Содержание урока по 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].