Форум разработчиков QlikView и Qlik Sense. Получи любые ответы на вопросы по QlikView и Qlik Sense в течении нескольких часов!
Вы не вошли.
Страницы 1
Здравствуйте!
Если я вас правильно поняла, то вам можно воспользоваться:
если месяцы выведены в столбец таблицы
то функцией 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(МесяцГод))}>} [Сумма ТО]) - сумма для предыдущего месяца по отношению к текущему максимальному
(формулы приведены упрощенные)
Добрый день!
Могу предложить вариант добавления недостающих строк в скрипте.
Идея такая:
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
Страницы 1
[ Сгенерировано за 0.022 сек, 8 запросов выполнено - Использовано памяти: 1.36 Мбайт (Пик: 1.53 Мбайт) ]