Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Добрый день Коллеги! Возник вопрос. Нужно посчитать прирост от проведения акций. Но я все никак не пойму как это сделать.
Вот пример.
Надо реализовать на подобии такой таблицы:
Дата начала и дата конца это время проведения Акции. Дата сравнения это Дата начала акции минус ее длительность. Соответственно нужно подсчитать оборот за промежуток Дата сравнение и Дата начала.
Как это можно реализовать?
Пример с данными во вложении.
Ваша идея использования функции IntervalMatch в данном случае абсолютно верна, т.к. по сути необходимо выполнять сопоставление объемов продаж за различные периоды времени.
Т.е. фактически нам необходимо последовательно "разметить" имеющиеся даты продаж для каждой из акций, сохранив атрибут разметки в одном или нескольких полях. Разметка должна проводиться по правилам:
После разметки расчет в объекте визуализации делается стандартным отбором значений по ранее рассчитанному признаку (выражение set-анализа).
В присоединенном примере я привел два варианта формирования таблицы данных в модели:
Поскольку 100% правильного варианта хранения подобных признаков нет, то выбирайте любой вариант, который окажется предпочтительнее для решения именно вашей задачи.
Каждый из вариантов сценария загрузки приведен на отдельной закладке ("Вариант 1" или "Вариант 2"), как и соответствующие каждому варианту объекты визуализации приведены на одноименных листах приложения.
Очевидно, что с точки зрения оптимизации, от автоматически создающегося синтетического ключа также имеет смысл избавиться, например, путем создания составного ключа.
Ваша идея использования функции IntervalMatch в данном случае абсолютно верна, т.к. по сути необходимо выполнять сопоставление объемов продаж за различные периоды времени.
Т.е. фактически нам необходимо последовательно "разметить" имеющиеся даты продаж для каждой из акций, сохранив атрибут разметки в одном или нескольких полях. Разметка должна проводиться по правилам:
После разметки расчет в объекте визуализации делается стандартным отбором значений по ранее рассчитанному признаку (выражение set-анализа).
В присоединенном примере я привел два варианта формирования таблицы данных в модели:
Поскольку 100% правильного варианта хранения подобных признаков нет, то выбирайте любой вариант, который окажется предпочтительнее для решения именно вашей задачи.
Каждый из вариантов сценария загрузки приведен на отдельной закладке ("Вариант 1" или "Вариант 2"), как и соответствующие каждому варианту объекты визуализации приведены на одноименных листах приложения.
Очевидно, что с точки зрения оптимизации, от автоматически создающегося синтетического ключа также имеет смысл избавиться, например, путем создания составного ключа.
Спасибо Сергей! Кажется это то что нужно. Была подобная мысль, но не довел ее до конца. Вопрос на засыпку- Реально ли решить этот пример используя только set analysis? Например динамически рассчитывая каждую строчку в таблице сравнения по значению столбцов Начальная дата сравнения и конечная дата.
Задачу расчета сравнения продаж до и во время проведения акции безусловно можно решить с использованием Set-анализа. Но вот вопросы желаемой визуализации результатов при этом нужно рассматривать более детально.
Например, вы можете написать формулу расчета продаж за период акции 'Акция1' в виде:
Sum( { 1 < НазваниеАкции = {'Акция1'},
Дата = {">=$(=Minstring( {< ДатаНачала = P( {< НазваниеАкции = {'Акция1'} >} ДатаНачала) >} ДатаНачала))<=$(=Minstring( {< ДатаКонца = P( {< НазваниеАкции = {'Акция1'} >} ДатаКонца) >} ДатаКонца))"}
>} Сумма)
и разместить ее в текстовом объекте. Такую же формулу можно написать для других Акций, заменив в ней значение модификатора поля НазваниеАкции на значение 'Акция2'. В третьей формуле - на 'Акция3' и так далее. Очевидно, что аналогичные формулы можно написать для периода сравнения по каждой акции.
Но если для отображения результатов мы захотим использовать стандартный объект Диаграмма (Таблица), то картина изменится.
Дело в том, что основная идея быстрого расчета значений в таблицах состоит в том, что для Выражения диаграммы описанного с использованием синтаксиса Set-анализа, процесс расчета состоит из двух этапов:
Указанный подход позволяет минимизировать время расчета значений Выражения диаграммы за счет использования минимально возможного набора значений по которым производится расчет и отсутствия каких-либо последующих проверок при вычислениях. Т.к. расчет подмножества возможного набора значений производится вне контекста измерений Диаграммы, то очевидно, что мы не имеем возможности подставлять в модификатор значение самого измерения, динамически изменяющееся от одной строки таблицы к другой.
Поэтому если мы захотим, чтобы в объекте Таблица в каждой из строк модификаторы задавались уникальным образом, то не останется ничего другого, кроме как оценивать оператором If( RowNo()) номер строки и формировать для каждой из строк свой модификатор. Т.е. технически это возможно, но:
Прикрепил пример приложения с третьим вариантом, в котором скрипт загрузки является предельно простым, но за это приходится расплачиваться сложностью выражений в объектах визуализации. Поэтому несмотря на существенную гибкость Qlik, обеспечивающую возможность решения одних и тех же задач как с использованием сценария загрузки, так и с использованием объектов визуализации, следует всегда оценивать сложность и оптимальность различных вариантов решения применительно к конкретной задаче.
Огромное спасибо за развернутый ответ!