Неофициальный форум разработчиков QlikView и Qlik Sense

Форум разработчиков QlikView и Qlik Sense. Получи любые ответы на вопросы по QlikView и Qlik Sense в течении нескольких часов!

Вы не вошли.

#1 Re: Программирование QlikView » Сравнительная динамика » 2015-12-10 21:09:17

Здравствуйте!

Если я вас правильно поняла, то вам можно воспользоваться:
если месяцы выведены в столбец таблицы
то функцией Above(Sum([Сумма ТО]), 1) - вы получите сумму по полю  [Сумма ТО] за предыдущий месяц (за месяц, который идет строкой выше)
Соответственно, для сравнения с текущим месяцем формула может быть, например, такой:
Sum([Сумма ТО]) - Above(Sum([Сумма ТО]), 1)

если месяцы выведены в строку таблицы
то формулы те же, просто заменить Above на Before


Вообще, если абстрагироваться от таблицы, то возможностей больше у способа со смещениями (здесь необходимо применять еще и анализ множеств (set analysis)).
Когда текущий месяц ссылается на себя и на предыдущий месяц:
Январь 2015  -   Январь 2015  -  Смещение=0
Январь 2015  -   Декабрь 2014  -- Смещение=1
Эти смещения создаются в скрипте.

При таком способе в формулах следует указывать смещение:
Таким образом, для янв 2015 можно посчитать две суммы:
Янв 2015   -  Sum({<Смещение={0}>} [Сумма ТО]) -  сумма для текущего месяца (янв 2015)
Янв 2015   - Sum({<Смещение={1}>} [Сумма ТО])  -  сумма для предыдущего месяца (дек 2014)
(формулы приведены упрощенные)


Если в объекте не выводится временное измерение, то для сравнения текущего и предыдущего месяцев можно просто использовать анализ множеств (set analysis):
Sum({<МесяцГод={$(max(МесяцГод) - 1)}>} [Сумма ТО]) - сумма для текущего максимального месяца
Sum({<МесяцГод={$(max(МесяцГод))}>} [Сумма ТО]) - сумма для предыдущего месяца по отношению к текущему максимальному
(формулы приведены упрощенные)

#2 Re: Программирование QlikView » Необходимость в аналитических функциях » 2015-10-30 16:52:11

Добрый день!

Могу предложить вариант добавления недостающих строк в скрипте.

Идея такая:

1. Находим задачи, у которых есть разрывы между неделями больше чем на одну
2. Высчитываем дельту разрыва
3. Добавляем строки по неделям, которых нехватает с последним из установленных статусов задачи.

Вот небольшой пример кода:

Task_Logs:
Load
	TaskID
	, Status
	, week
	, If(Status = 'closed', 1, 0) as ?ClosedTask
	;
Load * Inline [
	TaskID, Status, week
	1, assigned, 43
	1, active, 43
	1, assigned, 43
	1, created, 43
	1, closed, 47 
	2, closed, 44
	2, resolved, 44
	2, active, 42
	2, assigned, 42
	2, created, 42
	];


// определяем разрывы в неделях
Task_LogsFinal:
Load
	TaskID
	, Status
	, week
	, ?ClosedTask
	, If(Previous(TaskID) = TaskID and Previous(week) - week > 1, Previous(week) - week, 0) as delta
Resident Task_Logs
Order by
	TaskID
	, week
desc
;

Drop Table Task_Logs;

// берем только те строки, после которых есть разрыв
Task_LogsWithDelta:
Load
	TaskID
	, Status
	, week
	, delta
Resident Task_LogsFinal
Where
	?ClosedTask = 0
	and delta > 0
;


// добавляем каждой строке каждую неделю
join(Task_LogsWithDelta)
Load * Inline [
	weekAdd
	42
	43
	44
	45
	46
	47
	];


// отбираем необходимы строки и добавляем в нашу таблицу
Concatenate(Task_LogsFinal)
Load
	TaskID
	, Status
	, weekAdd as week
Resident Task_LogsWithDelta
Where
	weekAdd - week < delta
	and weekAdd - week > 0
;

Drop Table Task_LogsWithDelta;

А вот финальная таблица:
Status    TaskID    week
active    1    43
assigned    1    43
created    1    43
assigned    1    44
assigned    1    45
assigned    1    46
closed    1    47
active    2    42
assigned    2    42
created    2    42
active    2    43
closed    2    44
resolved    2    44

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.022 сек, 8 запросов выполнено - Использовано памяти: 1.36 Мбайт (Пик: 1.53 Мбайт) ]