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

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

Вы не вошли.

Готовые решения на платйорме QlikView

#1 2016-04-29 15:42:20

Alexeynik17
Участник
Зарегистрирован: 2016-04-29
Сообщений: 2
Windows 7Firefox 45.0

Анализ повторных покупок

Доброго времени суток. Столкнулся после просмотра видео https://www.youtube.com/watch?v=E3S7AIHqYVA
с проблемой. После срабатывания скрипта, появляется дополнительный месяц в конце периода
и начинаются перебои со статистикой продаж.

Скрипт:

ТестПродажи:
LOAD   
     Контрагент,
     Артикул,
     Дата,
     [Документ продажу],
     [Основний менеджер покупця] as Менеджер,
     Підрозділ,
     Кількість,
     Вартість,
     ПДВ,
     Вартість+ПДВ as [Продажа $ с НДС]
   
FROM
[C:\Users\nikolaenko.BIKO\Desktop\Анализ продаж\Тестовіе данніе\Постоянная выгрузка.xlsx]
(ooxml, embedded labels, table is TDSheet);


TempMinMaxDates:
LOAD   
       Min(Дата) as MinDate,
       Max(Дата) as MaxDate
RESIDENT ТестПродажи;

LET varMinDate = Num(FieldValue('MinDate', 1));
LET varMaxDate = Num(FieldValue('MaxDate', 1));

Drop Table TempMinMaxDates;

TempCalendar:
LOAD
       date ($(varMinDate) + rowno() - 1) as [TempDate]
AUTOGENERATE $(varMaxDate) - $(varMinDate) + 1;

Календарь:
LOAD         
       [TempDate],
       Day([TempDate]) as [День],
       Week([TempDate]) as [Неделя],
       WeekName([TempDate]) as [НеделяГод],
       WeekDay([TempDate]) as [День Недели],
       Month([TempDate]) as [Месяц],
       dual (year([TempDate])&'-'& Month([TempDate]), MonthStart([TempDate])) as МесяцГод,
       Dual('КВ'&Text(Div(Month([TempDate]),4)+1),Div(Month([TempDate]),4)+1) as [Квартал],
       QuarterName([TempDate]) as [КварталГод],
       Year([TempDate]) as [Год]
Resident TempCalendar;

calendarShift:
load [TempDate],
   [TempDate] as Дата,
  'now' as dateShift
resident Календарь;

load [TempDate]+1 as [TempDate],
     [TempDate] as Дата,
     'День' as dateShift
resident Календарь;

load num (AddMonths(MonthStart([TempDate]),1)) as [TempDate],
     [TempDate] as Дата,
     'Месяц' as dateShift
resident Календарь;

LOAD num ([TempDate]+7) as [TempDate],
     [TempDate] as Дата,
     'Неделя' as dateShift
resident Календарь;

load num (AddMonths(QuarterStart([TempDate]),3)) as [TempDate],
     [TempDate] as Дата,
     'Квартал' as dateShift
resident Календарь;

load num (AddMonths(MonthStart([TempDate]),12)) as [TempDate],
     [TempDate] as Дата,
     'Год' as dateShift
resident Календарь;

DROP Table TempCalendar;



Помогите разобраться что к чему.

Редактировался Alexeynik17 (2016-04-29 15:43:57)

Неактивен

#2 2016-05-06 13:47:36

Alexeynik17
Участник
Зарегистрирован: 2016-04-29
Сообщений: 2
Windows 7Firefox 45.0

Re: Анализ повторных покупок

Так какие будут идеи? Я уже как только не пытался решить эту задачу. Если рассматривать только анализ повторных покупок в разрезе с продажами, то данные более или менее адекватные, если же их совмещать, то данные по продажам ведут себя неадекватно.

Неактивен

#3 2016-05-18 19:19:16

Nick Riga
Участник
Зарегистрирован: 2015-02-17
Сообщений: 13
Windows 7Firefox 46.0

Re: Анализ повторных покупок

Добрый день!

Попробую помочь.
Добавленная таблица "Календарь" содержит все даты и их различные представления начиная с первой даты в ваших данных и заканчивая последней (включая пробелы, даты по которым не было продаж).
Таблица "calendarShift" - организует связь многое ко многим между календарем и данными продаж. То есть одна строчка продаж ссылается на несколько дат в календарь, в зависимости от значения поля dateShift. Если не учитывать это в формулах, то статистика с использованием измерение из календаря поедет.
Пример:
рассмотрим следующую строку продаж (нам интересны 2 параметра):
  Дата, [Продажа $ с НДС], ...
  15.05.2010, 1500, ...

Формула: sum([Продажа $ с НДС]) в разрезе месяцев (поле из календаря) только для этой строки вернет следующее:
2010.05 = 4500
2010.06 = 1500
2010.08 = 1500
2011.05 = 1500
Утроение в первой строке происходит за счет dateShift = now; День; Неделя. Затем идут строки, где dateShift = Месяц, Квартал, Год соответственно.
Чтобы правильно рассчитать формулу продаж в разрезе месяцев необходимо добавить set analysis:
sum({$<dateShfit = {'now'}>} [Продажа $ с НДС]) - то есть явно указать какое смещение по датам мы используем.

now - дата из календаря ссылается на саму себя в продажах;
День - дата из календаря ссылается на предыдущую дату в продажах;
Неделя - дата из календаря ссылается на аналогичный день предыдущей недели в продажах;
и т. д.

Чтобы избежать проблем добавьте во всем формулы, где вы планируется рассматривать текущие параметры set analysis:
dateShift = {'now'}.

Либо, если формул уже много, и добавление займет большое количество времени, можно вывести listbox с этим полем, выбрать значение now, после чего в свойствах listbox-general поставить галку Always one selected value (всегда выбрано одно значение). Затем listbox при желаниии можно удалить, настройка останется.
Таким образом сделанный выбор нельзя будет очистить или случайным образом изменить и все формулы будут считаться с учетом этого выбора.

Неактивен

Сейчас в этой теме форумчан: 0, гостей: 1
[Bot] CCBot

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

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

[ Сгенерировано за 0.008 сек, 9 запросов выполнено - Использовано памяти: 1.62 Мбайт (Пик: 1.73 Мбайт) ]