Содержание урока по Qlik Sense
В этой статье будет разобран подход для сравнения продаж по двум периодам. В примере будут использованы: Set Analysis, Альтернативные состояния, Расширение Date Picker и Qlik Sense (версия Feb 2019).
Генерация данных Qlik Sense
Для начала сгенирируем данные для модели. Используем календарь Qlik Sense и генерацию элементов справочников в цикле:
SET ThousandSep=' ';
SET DecimalSep=',';
SET MoneyThousandSep=' ';
SET MoneyDecimalSep=',';
SET MoneyFormat='# ##0,00 ₽;-# ##0,00 ₽';
SET TimeFormat='h:mm:ss';
SET DateFormat='DD.MM.YYYY';
SET TimestampFormat='DD.MM.YYYY h:mm:ss[.fff]';
SET FirstWeekDay=0;
SET BrokenWeeks=1;
SET ReferenceDay=0;
SET FirstMonthOfYear=1;
SET CollationLocale='ru-RU';
SET CreateSearchIndexOnReload=1;
SET MonthNames='янв;фев;мар;апр;май;июн;июл;авг;сент;окт;ноя;дек';
SET LongMonthNames='январь;февраль;март;апрель;май;июнь;июль;август;сентябрь;октябрь;ноябрь;декабрь';
SET DayNames='пн;вт;ср;чт;пт;сб;вс';
SET LongDayNames='понедельник;вторник;среда;четверг;пятница;суббота;воскресенье';
SET NumericalAbbreviation='3:тыс.;6:млн.;9:млрд.;12:трлн.;15:P;18:E;21:Z;24:Y;-3:m;-6:μ;-9:n;-12:p;-15:f;-18:a;-21:z;-24:y';
//Формирование календаря
QuartersMap:
MAPPING
LOAD rowno() as Month,
'Кв.' & Ceil (rowno()/3) as Quarter
AUTOGENERATE (12);
Let varMinDate = Num(MakeDate(2017,1,1));
Let varMaxDate = Num(Today());
TempCalendar:
LOAD $(varMinDate) + Iterno()-1 As Num,
Date($(varMinDate) + IterNo() - 1) as TempDate
AutoGenerate 1
While $(varMinDate) + IterNo() -1 <= $(varMaxDate);
Календарь:
Load
Date(TempDate) As Дата,
week(TempDate) As Неделя,
Month(TempDate) As Месяц,
Text(SubField(Date(TempDate,'DD MMMM YYYY'),' ',2)) As МесяцПолный,
ApplyMap('QuartersMap', month(TempDate), Null()) As Квартал,
Year(TempDate) As Год,
Day(TempDate) As НомерДень,
Week(weekstart(TempDate)) & '-' & WeekYear(TempDate) As НеделяГод,
Month(TempDate) & '-' & Year(TempDate) As МесяцГод,
ApplyMap('QuartersMap', month(TempDate), Null()) & '-' & Year(TempDate) As КварталГод,
WeekDay(TempDate) As ДеньНедели
Resident TempCalendar
Order By TempDate ASC;
Drop Table TempCalendar;
// Генерация справочников
For i=1 to 15
Контрагенты:
Load
$(i) As [Контрагент ID],
'Контрагент $(i)' As [Контрагент Наименование]
AutoGenerate 1;
Next i
For i=1 to 20
Товары:
Load
$(i) As [Товар ID],
'Товар $(i)' As [Товар Наименование]
AutoGenerate 1;
Next i
GenerateFact:
LOAD [Контрагент ID]
Resident Контрагенты;
JOIN (GenerateFact)
LOAD [Товар ID]
Resident Товары;
JOIN (GenerateFact)
LOAD Дата
Resident Календарь;
NoConcatenate
Fact:
LOAD
[Контрагент ID],
[Товар ID],
Дата,
Rand()*(Rand() + Rand()*Rand())*(4000-4000*Rand()) + Rand()*100 - Rand()*50 as Продажи
Resident GenerateFact;
DROP Table GenerateFact;
Загружаем данные, получится такая вот модель Qlik Sense:

Создаем панель сравнения продаж по двум периодам
Первым шагом необходимо создать 2 состояния в режиме правки листа (Основные элементы -> Другие состояния):
- ВыборкаДаты1
- ВыборкаДаты2

Затем используем элемент Qlik Dashboard bundle -> Date Picker (выбираем дату и в свойствах “Другие состояния” выбираем ВыборкаДаты1). Создаем два элемента Date Picker (второй настраиваем с состоянием ВыборкаДаты2):

Затем формируем таблицу: в измерении Контрагент, в мерах создаем следующие выражения:

Выражение 1:

sum({<Дата=[ВыборкаДаты1]::Дата>} [Продажи])
Метка для выражения 1:

='Продажи '&min({[ВыборкаДаты1]} Дата)&' - '&max({[ВыборкаДаты1]} Дата)
Для выражения 2 делаем все по аналогии, только используем состояние [ВыборкаДаты2].