Коллеги, отQLIKнитесь на чужое горе горькое! Детская задачка, а я заБлудился . Нужна свежая голова, а у меня её уже нет. Фабула такова: Есть: торговая сеть с магазинами (unit¬_id), в магазинах проводятся акции (action_id), продаются товары (prod_id) и в акциях и без. У каждой акции есть начало (Start_Date) и есть конец (End_Date).
Надо: посчитать продажи товаров (Sum(amount)) за время акции, за некоторое время до нее , проклятой, и за некоторое время после . Пусть интервал наблюдения и до и после будет одинаков и составит 7 дней.
Проблемы: возникли от большого ума на ровном месте и не отпускают. Скоро поймаю ку-ку. Конкретно. Решение показалось очевидным и тривиальным. Берем за рога Set Analysis и давай на нем жениться.
- ввел две переменные
vEndDateAfter=Date(End_Date+7) и
vStartDateBefore=Date(Start_Date-7) . 7 - потому как решил пока задать интервалы до и после по 7 дней.
С их помощью думал определить два интервала по 7 дней в сет анализе вычисления количества проданного товара до начала акции и после соответственно:
Sum({<DATA={" >=$(=Start_Date_After) <$(Start_Date) "},ACTION_ID={"NO"}>} Amount) и
Sum({<DATA={">$(End_Date) <=$(=vEnd_Date_After)"},ACTION_ID={"NO"}>}Amount) .
Встал вопрос, какую таблицу построить. Хотел построить Pivot c измерениями ACTION_ID и Product_id.
Не получилось с лёта – характеристики продаж в акцию цеплялись идеально, Sum(Amount) выдавал значения по каждому товару по каждой акции. Но выражения для продаж до и после ессно не работали. Так строка таблицы, привязана к Акции, акция связана с ее временем проведения, и приведенные выше формулы выдают NULL.
Идея была, что бы заданный в измерении ACTION_ID определял границы интервалов за пределами акции – от него ( от ACTION_ID) брать значения End_Date и Start_Date для формул переменных, приведенных выше, а в качестве ассортимента брать перечень товаров prod_id), которые участвует в этой акции. Не взлетело. Интервалы до и после считаются правильно (разбирал формулы на кусочку и смотрел по частям)б а кол-во =0, так как за пределами акций нет ее продаж.
Попробовал упростить задачу – в качестве измерения оставил только Product_id и попробовал накормить формулы для до и после дополнительным условием в модификаторе множества - использовал функцию concat()
=Sum({<
DATA={">$(End_Date) <=$(=vEnd_Date_After)"},
ACTION_ID={"NO"},
product_id={chr(39) & Concat (distinct product_id, chr(39) & ',' & chr(39)) & chr(39)}
>}Amount)
Выражение для вычисления продаж во время акции
Sum({<ACTION_ID={"$(=GetFieldSelections(ACTION_ID,',',1))"} >} Amount) .
Т.е. пользователь из списка отбирает одну акцию, последняя формула считает для нее продажи для каждого товара (измерения таблицы), а предыдущая формула- считает продажи за пределами акций.
То ж не полетело. Хотя и так и об косяк, но уперся в стену. Может кто подскажет чего, а то уже когнитивный диссонас случился – даже нормально описать проблему не смог. Устал от горя. Вот и нужен совет свежей головы. Заранее благодарен