В этой статье будет разобран подход для сравнения продаж по двум периодам. В примере будут использованы: 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].

Скачать пример Qlik Sense со сравнением двух периодов

0 0 голосов
Рейтинг статьи

Подписаться
Уведомление о
guest
0 комментариев
Встроенная Обратная Связь
Просмотр всех комментариев
0
Оставьте, пожалуйста, комментарий!x