Неофициальный форум пользователей Qlik Sense & Qlikview

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: muratov.ast от 14 декабря 2017, 01:38:21

Название: Как посчитать TOTAL<> в data loader-е
Отправлено: muratov.ast от 14 декабря 2017, 01:38:21
Доброго времени суток!
У меня есть следующая таблица:
year   month   value
2015   1   100
2015   2   600
2015   3   50
2016   2   300
2016   4   500
2016   8   800
2017   5   20
2017   7   40
2017   10   170
2017   12   600

и я хотел бы посчитать долю каждого месяца по отношению к году.
В чарте я могу это сделать следующим образом:
sum(total<month> value)/sum(total<year> value)

Подскажите, как можно сделать подобные вычисления в скрипте на уровне data loader-а?
Благодарю!
Название: Re: Как посчитать TOTAL<> в data loader-е
Отправлено: admin от 14 декабря 2017, 03:30:06
Привет

t1:
LOAD * INLINE [
    year,   month,   value
    2015,   1,   100
    2015,   2,   600
    2015,   3,   50
    2016,   2,   300
    2016,   4,   500
    2016,   8,   800
    2017,  5,   20
    2017,  7,   40
    2017,   10,   170
    2017,   12,   600
];

left join (t1)
LOAD year, sum(value) as TotalYear
resident t1
Group by year;

left join (t1)
LOAD year, month, round(value/TotalYear*100,0.01) as X
resident t1;


Весь смысл в первой связи, посредством которой к каждой записи присоединяется итоговое значение по полю/полям связи.
Название: Re: Как посчитать TOTAL<> в data loader-е
Отправлено: muratov.ast от 03 января 2018, 01:07:42
Спасибо большое!
Работает.
Но если в таблице имеется большое количество записей, скрипт не выполняется. Это уже скорее проблема железа.
Название: Re: Как посчитать TOTAL<> в data loader-е
Отправлено: LoryMax от 04 января 2018, 07:02:09
Идет не хватка памяти? Тогда разбивайте данные на части (например, по годам, или по количеству строк).

или по какой причине не выполняется скрипт?
Название: Re: Как посчитать TOTAL<> в data loader-е
Отправлено: admin от 04 января 2018, 10:28:46
Join - затратная функция, плюс с группировкой.
Следите за памятью при выполнении скрипта.
Можно попробовать использовать временные таблицы, когда каждый этап преобразования работает с загрузкой через load а не resident.
Надо ставить эксперименты и сравнивать.