Простой (классический) календарь Клик Сенс / Qlik Sense
В рамках простого календаря Qlik Sense находится минимальная и максимальная даты и в цикле while создается календарь.
Пример кода скрипта для создания календаря QlikSense:
// Получаем из таблицы фактов минимальную и максимальную даты [TEMP Максимальная Минимальная Дата]: LOAD min(Дата) As [Минимальная Дата], max(Дата) As [Максимальная Дата] Resident [Таблица фактов]; // Минимальную и максимальную даты помещаем в переменные, // для того, чтобы использовать их в условии While Let пНачалоКалендаря_Число = Num(Peek('Минимальная Дата', 0, 'TEMP Максимальная Минимальная Дата')); Let пОкончаниеКалендаря_Число = Num(Peek('Максимальная Дата', 0, 'TEMP Максимальная Минимальная Дата')); // Удаляем временную таблицу DROP Table [TEMP Максимальная Минимальная Дата]; // Создаем набор дат в промежутке от минимальной до максимальной даты [TEMP Набор дат в интервале MinDate - MaxDate]: LOAD Date($(пНачалоКалендаря_Число) + IterNo() - 1) as [TEMP Дата] AutoGenerate 1 While $(пНачалоКалендаря_Число) + IterNo() -1 <= $(пОкончаниеКалендаря_Число); // Формируем таблицу с календарем в моделе Qlik Sense [Простой календарь QS]: Load Date([TEMP Дата]) As Дата, Date([TEMP Дата],'DD MMMM YYYY') As [Дата длинный месяц], Text(Date([TEMP Дата],'WWWW MMM YYYY')) As [День недели МесяцГод], 'Кв'& Ceil(Num(Month([TEMP Дата]))/3) As Квартал, 'Кв'& Ceil(Num(Month([TEMP Дата]))/3) & '-' & Year([TEMP Дата]) As КварталГод, Text(Date([TEMP Дата],'YYYY.MM')) As [Год Месяц], Text(Date([TEMP Дата],'MMM YYYY')) As [Месяц Год], Year([TEMP Дата]) As Год, Year([TEMP Дата])&'.'&Week([TEMP Дата]) As [Год Неделя], Week([TEMP Дата]) As Неделя, Day([TEMP Дата]) As День Resident [TEMP Набор дат в интервале MinDate - MaxDate]; Drop Table [TEMP Набор дат в интервале MinDate - MaxDate];
Результат работы скрипта:
Оптимизированный календарь (ускоренное создание при большой таблице фактов). Advanced Calendar
Тот же самый календарь, но для ускоренной загрузки (если большая таблица фактов):
// Получаем из поля Дата минимальное и максимальное значения [TEMP Максимальная Минимальная Дата]: LOAD Min(FieldValue('Дата',RecNo())) As [Минимальная Дата], Max(FieldValue('Дата',RecNo())) As [Максимальная Дата] AutoGenerate FieldValueCount('Дата'); // Минимальную и максимальную даты помещаем в переменные, // для того, чтобы использовать их в условии While Let пНачалоКалендаря_Число = Num(Peek('Минимальная Дата', 0, 'TEMP Максимальная Минимальная Дата')); Let пОкончаниеКалендаря_Число = Num(Peek('Максимальная Дата', 0, 'TEMP Максимальная Минимальная Дата')); // Удаляем временную таблицу DROP Table [TEMP Максимальная Минимальная Дата]; // Создаем набор дат в промежутке от минимальной до максимальной даты [TEMP Набор дат в интервале MinDate - MaxDate]: LOAD Date($(пНачалоКалендаря_Число) + IterNo() - 1) as [TEMP Дата] AutoGenerate 1 While $(пНачалоКалендаря_Число) + IterNo() -1 <= $(пОкончаниеКалендаря_Число); // Формируем таблицу с календарем в моделе Qlik Sense [Простой календарь QS]: Load Date([TEMP Дата]) As Дата, Date([TEMP Дата],'DD MMMM YYYY') As [Дата длинный месяц], Text(Date([TEMP Дата],'WWWW MMM YYYY')) As [День недели МесяцГод], 'Кв'& Ceil(Num(Month([TEMP Дата]))/3) As Квартал, 'Кв'& Ceil(Num(Month([TEMP Дата]))/3) & '-' & Year([TEMP Дата]) As КварталГод, Text(Date([TEMP Дата],'YYYY.MM')) As [Год Месяц], Text(Date([TEMP Дата],'MMM YYYY')) As [Месяц Год], Year([TEMP Дата]) As Год, Year([TEMP Дата])&'.'&Week([TEMP Дата]) As [Год Неделя], Week([TEMP Дата]) As Неделя, Day([TEMP Дата]) As День Resident [TEMP Набор дат в интервале MinDate - MaxDate]; Drop Table [TEMP Набор дат в интервале MinDate - MaxDate];
Когда дата в одной таблице все работает, а что делать когда у меня 4-е таблицы фактов по мероприятию и все они связаны между собой по ID мероприятия, но в них разные даты (1 собственно даты мероприятия, 2 даты визитов на сайт, 3 даты отправленных приглашений на сайт, 4 даты опросов)
Максим, Вам необходимо объединить в таблице фактов. Т.е. сделать принудительный concatenate([Фаткы]) и одинаково назвать поле с датой. Для переименования поля при загрузке используйте [Мероприятие Дата] As Дата
concatenate([Фаткы]) использовать в скрипте по созданию календаря?