qlik sense день недели
Qlik sense день недели
Как ни странно, но в первые рабочие дни наступившего, 2021 года, многие столкнулись с вопросом, а какая сейчас идет неделя? С какой даты идет отсчет первой недели?
Обратимся к первоисточнику — стандарту ISO 8601.
Первая календарная неделя года — это та, которая включает в себя первый четверг этого года, а последняя календарная неделя календарного года-это неделя, непосредственно предшествующая первой календарной неделе следующего календарного года.
Другими словами, первая неделя календарного года — это самая ранняя неделя, содержащая по крайней мере четыре дня января. Аналогично, последняя неделя календарного года — это последняя неделя, содержащая хотя бы четыре дня декабря.
В Qlik Sense за это отвечают две переменные: BrokenWeeks (разбивать недели или всегда целые) и ReferenceDay (день определения 1 недели).
Рис 1. Разбивка недель по ISO 8601.
Все просто, но, фактические установки по умолчанию для переменных в Qlik Sense не учитывают положения ISO 8601. Здесь следует обратить внимание на то, что в описании переменных BrokenWeeks и ReferenceDay все грамотно, и утверждается что «По умолчанию в функциях Qlik Sense используются целые недели.» и «По умолчанию в функциях Qlik Sense используется 4 как день ссылки.» Но, после создания чистого приложения Qlik Sense мы имеем:
Что в итоге дает неверный результат, разбитые недели и нумерация недель всегда с 1 января:
Рис 2. Формирование календарных недель в Qlik Sense по умолчанию
Итак, запоминаем, корректные настройки переменных для нумерации календарных недель «по ГОСТу»
Qlik Sense: Основы работы с датами. Обзор Топ 16 функций
Опубликовано qliksense-expert в 15.03.2019 15.03.2019
Содержание урока по Qlik Sense
Вводное слово: Дата, Время, Timestamp
Пару слов о Timestamp – Это число с дробной частью, которое соответствует какой-то дате со временем. Т.е. это число можно представить в нужном формате Дата-Время.
Дата – это целая часть числа с дробной частью (про даты речь пойдет дальше). Время – это дробная часть числа (все, что после разделителя).
1 секунда
0,0000115740740740740
23 часа 59 минут 59 секунд = 0,99998842592593
Шаг 1. Учимся понимать даты. Как хранятся даты в Qlik Sense
Для того, чтобы научиться работать с датами в Qlik Sense, необходимо понять исходный формат хранения дат.
Дата в Qlik – это целое число, которое может быть загружено в модель в формате даты, например, 20/03/2019 или 20.03.2019, или 20-03-2019, или 20+03+2019 (все зависит от Ваших потребностей и фантазии). Если данные с датами загружаются из файла, где формат даты уже задан, то этот формат будет загружен в модель. Если данные загружаются не из QVD файлов, а из сторонних файлов/систем/баз данных, то рекомендуется делать преобразование:
Формат даты источника данных => Число => Формат даты Qlik Sense.
Если избегать преобразования даты в число, а затем в дату, то можно наткнуться на следующие проблемы:
Что такое исходный формат хранения даты? Дата в Qlik Sense – это целое число. Проверить это можно с помощью формул в Qlik Sense приложении (например вбить в текстовом объекте листа формулу =Date(3000)).
Исходный формат даты в Qlik – целое число:
Шаг 2. Формат даты. Настройка формата даты по умолчанию
Настройка системной переменной “Формат даты по-умолчанию”
Формат даты по умолчанию в рамках 1 приложения настраивается с помощью переменной на вкладке MAIN в скрипте:
К этой настройке относитесь очень внимательно, т.к. функции дат, например Date(), без обозначения формата даты используют формат даты по-умолчанию.
Формат даты. Примеры
Рассмотрим примеры записи форматов даты:
Шаг 3. Топ 16 функций для Script (ETL – выгрузки, преобразования данных и загрузки в модель)
В рамках краткого обзора функций для преобразования дат, я рассмотрю наиболее часто используемые на практике функции. На самом деле, таких функции очень много. Полный список можно посмотреть в официальном Qlik Sense HELP.
Понимание основ работы с данными и знание нескольких функций закроет на первое время все потребности при разработке скриптов загрузки данных.
Обзор функций трансформации дат
Функции нужны для преобразования дат, форматов, вычленения из даты года, месяца, дня, номера недели. К дате можно прибавить заданное количество дней, месяцев или лет. Для начала я кратко опишу каждую функцию и приведу примеры использования этих функций. Затем я рассмотрю несколько кейсов работы с датами в нестандартных случаях.
Мой топ функций для работы с датами:
Подробнее про Date# и Date с примером
Date#() используется для интерпретации данных. Например
говорит о том, что первые четыре цифры – это год, цифры между двумя ‘_ – это дата, а последние две – месяц. Причем, функция Date# не меняет формат даты, т.е. дата просто будет переведена из текста в число по правилу ‘YYYY_DD_MM’
Date() используется, чтобы сказать, как показать данные. Например:
Сочетание обеих функций:
Длинное название месяца
Для того, чтобы получить длинное название месяца, необходимо применить следующий код (длинное название месяца берется из системной переменной LongMonthNames):
Это выражение вернет ‘сентябрь 2018’. Обязательно оборачивайте в Text, иначе будет ошибка. Объясняю почему:
Date(MakeDate(2018,9,21),’MMMM YYYY’) тоже вернет ‘сентябрь 2018′, но храниться будет как дата 21.09.2018. И если Вы сравните две даты ’22 сентября 2018′ и ’21 сентября 2018’, то в формате ‘MMMM YYYY’ они будут не равны.
Результат: 0, т.е. ложь.
Результат: 1
Вывод “Месяц Год” и “Неделя Год” в числовом формате
Пример 1:
Пример 2:
Определить максимальную и минимальную даты периода отчета. Вывод в переменную
Иногда требуется в отчете вывести период, за который он был сформирован. Например, отчет за предыдущую неделю.
В скрипте определяем переменную Прошлая Неделя:
В календаре есть поле НеделяГод, с помощью этого поля определяем минимальную и максимальную даты (функция Date используется для форматирования даты в нужном виде, т.е. ‘DD.MM.YY’):
Пример использования агрегации данных по неделям (advanced scripting)
Если нужно упорядочивать записи по неделям, то рекомендую использовать формат ГодНеделя, причем неделя должна быть записана как 201901 и 201911 (т.е. два знака). В скрипте этот прием использован:
Создание переменных с датами
Добавить в формат даты неделю. Длинный формат месяца в дате Qlik Sense
Формат длинных названий месяцев задается на вкладке Main с помощью системных переменных. Значения этих переменных задается по-умолчанию при создании приложения:
Рекомендую заменить их на следующие значения (точки будут портить вид при формате DD.MMM.YYYY):
Формат даты с названием дня недели:
Манипуляции над датами в скрипте через переменные
Шаг 4. Использование функций в выражениях (визуализации)
Шаг 5. Кейсы/примеры работы с датами в Qlik Sense
Кейс 1. Обработка дат с английскими названиями месяцев
Данные хранятся в датах англоязычного календаря. Нужно произвести преобразование в русский формат даты:
Для преобразования используем следующий скрипт (с меппингом):
Получаем вот такой результат:
LFL Календарь. Накопительный календарь Qlik. The As-Of Table. YTD, MTD, WTD, QTD / LYTQ, LQTD, LMTD, LWTD
Опубликовано qliksense-expert в 14.06.2019 14.06.2019
В этой статье речь пойдет про накопительный календарь и календарь с флагами для расчета LFL показателей, например, продажи за последние 90 дней текущего месяца к продажам за аналогичный период предыдущего года (т.е. 90 дней прошлого года).
Для начала рассмотрим упрощенный пример LFL Календаря.
LFL Календарь Qlik Sense (для расчета показателей год к году)
Принскрин скрипта LFL календаря Qlik Sense (Календарь с флагами на даты):
Пример LFL календаря Qlik Sense с флагами: Текущий год 180 дней, Прошлый год 180 дней, Последние 7 дней, 7 дней на прошлой неделе и т.п.
Теперь для того, чтобы отобразить продажи за период можно использовать в Set Analysis предварительно рассчитанные флаги. Следующие примеры будут использовать модификатор 1 для того, чтобы исключить установленные в модели фильтры (т.е. на полном множестве данных):
Если Вам нужно учитывать выборки модели, то рекомендуется проигнорировать выборки по полям календаря. Делается это следующим образом (через запятую перечисляются поля календаря и ставится знак равно, это означает, что по этому полю мы игнорируем установленные выборки):
Еще один вариант календаря Qlik Sense (поправил первый вариант)
Пример формулы с использованием флагов:
Сравнение двух периодов в Qlik Sense & Date Picker
Опубликовано qliksense-expert в 07.04.2019 07.04.2019
Содержание урока по Qlik Sense
В этой статье будет разобран подход для сравнения продаж по двум периодам. В примере будут использованы: Set Analysis, Альтернативные состояния, Расширение Date Picker и Qlik Sense (версия Feb 2019).
Генерация данных Qlik Sense
Для начала сгенирируем данные для модели. Используем календарь Qlik Sense и генерацию элементов справочников в цикле:
Загружаем данные, получится такая вот модель Qlik Sense:
Создаем панель сравнения продаж по двум периодам
Затем формируем таблицу: в измерении Контрагент, в мерах создаем следующие выражения:
Выражение 1:
Метка для выражения 1:
Для выражения 2 делаем все по аналогии, только используем состояние [ВыборкаДаты2].
Функции форматирования Qlik Sense – синтаксис и пример
Мы используем функции форматирования в Qlik Sense для форматирования числовых значений в определенных форматах, таких как время, дата, деньги, интервал, число и т. д. Такие функции возвращают значения в двойном формате, т.е. для каждого значения существует строка и числовая интерпретация. По сути, функции форматирования Qlik Sense преобразуют числовые значения (принимаемые в качестве входных данных) в строковое представление, которое представляет входное числовое значение.
Итак, давайте рассмотрим функции форматирования Qlik Sense.
Функции форматирования в Qlik Sense
i. Функция ApplyCodepage() в Qlik Sense
Мы используем функцию applycodepage(), чтобы применить формат (набор символов кодовой страницы) к выражению диаграммы или другой странице. Обычно мы используем эту функцию, когда хотим скопировать определенный символ из одного раздела кода в другой. В выражениях скрипта мы чаще всего используем эту функцию.
Синтаксис:
В текстовом параметре вы можете указать поле или текст, к которому хотите применить кодовую страницу.
Codepage – это набор символов, который должен применяться к полю или тексту.
Например, у нас есть фрагмент кода, в котором мы хотим применить наборы символов соответствующих языков к трем строкам. Мы сделаем это для каждой строки с помощью функции applycodepage.
Таким образом, это применит набор греческих символов Windows, для которого соответствующее число – 1253, к полю ROWA. Точно так же 1255 и 65001 являются стандартными наборами символов UTF-8 для иврита и английского/латинского языков соответственно, которые мы будем применять к полям ROWB и ROWC соответственно. Эти три поля загружаются из SQL и не входят в требуемые наборы символов. Итак, мы используем эту функцию для применения стандартных наборов символов Windows.
ii. Функция Date() в Qlik Sense
Функция date() определяет формат даты для значения или выражения в скрипте загрузки данных. Как и все функции форматирования, эта функция также возвращает значение в двойном формате, то есть в текстовой и числовой интерпретациях.
Синтаксис:
где число – это значение, для которого вы хотите установить формат даты.
Используя параметр формата, вы можете указать формат даты, иначе в системе будут сохранены форматы по умолчанию. По умолчанию в системе есть два типа форматов: ГГ-ММ-ДД и М/Д/ГГ.
Пример использования этой функции в коде,
Это выражение вернет два значения, числовое и текстовое для обоих типов данных по умолчанию. Для настройки ГГ-ММ-ДД строковое представление даты будет 97-08-06, а числовая интерпретация будет 35648. Аналогично, для формата М/Д/ГГ строковое представление будет 8/6/97 и числовое представление – 35648.
где Joining = 35648
Таким образом, строковое представление, соответствующее этому номеру, – 08.06.1997, а числовое представление – 35648.
iii. Функция Dual() в Qlik Sense
Мы используем функцию dual(), поскольку название предполагает создание как текстового (строкового), так и числового представления значения. Как мы видели в приведенном выше примере, у нас было текстовое представление «06/08/1997» для числового значения 35648 для одной даты. Двойные значения полезно создавать, потому что в их случае текстовое значение используется для отображения или представления, а числовой аналог этого значения используется для хранения и вычислений.
Синтаксис:
Где text – это текстовое значение, для которого вы хотите получить числовую часть, а числовой параметр – это числовое значение, которое вы хотите использовать со строковым значением в аргументе.
Например, в приведенном ниже коде мы загрузили поле с именем DayOfWeek, которое содержит дни недели как строковые представления и соответствующие числам строки. Числовая часть используется для сортировки этих дней недели в числовом виде, и если дни недели обозначаются числами в другой функции, то эти числа (от 0 до 6) могут использоваться логикой системы, чтобы понять, какой день недели упоминается.
iv. Функция Interval() в Qlik Sense
Функция interval() определяет формат интервала для интервалов даты и времени, которые обычно используются в выражениях диаграмм и скриптах загрузки данных. Интервалы можно отформатировать разными способами, например, как время, как день, как время и как день, оба из которых имеют как элементы даты, так и элементы времени.
Синтаксис:
Где number – это числовое значение, которое вы хотите отформатировать как интервал.
Упоминая формат, вы устанавливаете тип форматирования, который хотите применить к числу. Если тип форматирования не указан, то применяются форматы по умолчанию, например, ГГ-ММ-ДД для даты и чч:мм:сс для времени и десятичного разделителя чисел.
Например,
Возвращает строковое значение ’09: 00: 00 ’и соответствующее число 0,375 для этого значения. Таким образом, эта функция возвращает значения в двойных форматах данных.
v. Функция Money() в Qlik Sense
Функция money() используется для форматирования значений как представления денег. Наборы форматирования обычно берутся из доступных системных переменных в сценарии загрузки данных или в операционной системе. Если вы хотите применить к значениям любой другой денежный формат, вам необходимо указать их в выражении с допустимым десятичным разделителем и разделителем тысяч.
Синтаксис:
Где number – это значение, которое нужно отформатировать как деньги.
dec_sep – строка, определяющая разделитель десятичных чисел.
thou_sep – строка, определяющая разделитель тысяч.
Например, предположим, что мы упоминаем денежный формат для значений в переменной количество.
vi. Функция Num() в Qlik Sense
В этой функции вы можете указать формат числа или использовать предопределенный набор форматирования, предоставляемый системой. Эта функция также возвращает значение двойного формата.
Синтаксис:
Где number – это значение, которое необходимо отформатировать как деньги.
Format – особый формат, который определяется системой или упоминается пользователем. Если вы не укажете формат в этой функции, то будут использоваться форматы даты, сохраненные в системе по умолчанию.
dec_sep – строка, определяющая разделитель десятичных чисел. MoneyDecimalSep используется в качестве десятичного разделителя по умолчанию.
thou_sep – строка, определяющая разделитель тысяч. MoneyThousandSep используется как разделитель тысяч по умолчанию в скрипте загрузки данных.
Например, в приведенном ниже фрагменте кода мы установили формат для числовых значений как 0.00.
Результаты для поля Field1 будут 4 и 1. Результаты для поля Field2 будут 12,56 и 3,14 (значение числа пи) в соответствии с форматом, указанным в функции.
vii. Функция Time() в Qlik Sense
Функция time() возвращает числовое значение, форматируя его как значение времени. По умолчанию в системе установлены значения чч:мм:сс, которые используются, если вы не указываете формат времени в выражении функции.
Синтаксис:
где number – это значение, к которому вы хотите применить формат времени. А с помощью параметра формата вы можете указать формат времени, который вы хотите.
Например, вы можете присвоить формат времени значениям в переменных.
Возвращает строковое значение, соответствующее числовому значению для T = 0,375, которое составляет 09:00:00 в качестве времени.
viii. Функция Timestamp() в Qlik Sense
Эта функция форматирует числовое значение как отметку времени и даты. Значение возвращается в двойном формате, то есть интерпретируется как строковое и числовое значение.
Синтаксис:
где number – это числовое значение, которое должно быть отформатировано как отметка времени.
format – это особый формат, который вы хотите применить к значению, чтобы сделать его отметкой времени. Есть два типа форматов: ГГ-ММ-ДД чч:мм:сс и М/Д/ГГ чч:мм:сс, которые доступны в системе как форматы по умолчанию. Вы используете их, если не указываете формат для отметки времени.
вернет два значения для каждого из двух форматов метки времени по умолчанию. Для формата ГГ-ММ-ДД чч:мм:сс результат будет: 97-08-06 09:00:00 (строка) и 35648,375 (числовой). А для формата M/D/YY чч:мм:сс результат будет 8/6/97 09:00:00 (строка) и 35648,375 (число).