Форум разработчиков QlikView и Qlik Sense. Получи любые ответы на вопросы по QlikView и Qlik Sense в течении нескольких часов!
Вы не вошли.
Страницы 1
Доброго времени суток. Столкнулся после просмотра видео 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)
Неактивен
Так какие будут идеи? Я уже как только не пытался решить эту задачу. Если рассматривать только анализ повторных покупок в разрезе с продажами, то данные более или менее адекватные, если же их совмещать, то данные по продажам ведут себя неадекватно.
Неактивен
Добрый день!
Попробую помочь.
Добавленная таблица "Календарь" содержит все даты и их различные представления начиная с первой даты в ваших данных и заканчивая последней (включая пробелы, даты по которым не было продаж).
Таблица "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 при желаниии можно удалить, настройка останется.
Таким образом сделанный выбор нельзя будет очистить или случайным образом изменить и все формулы будут считаться с учетом этого выбора.
Неактивен
Страницы 1
[ Сгенерировано за 0.010 сек, 10 запросов выполнено - Использовано памяти: 1.62 Мбайт (Пик: 1.73 Мбайт) ]