2-3. Модификаторы множеств

Модификатор множества проще всего описать, как фильтры, вшитые в формулу. В отличие от идентификаторов, которые должны создаваться заранее (закладки), и могут содержать динамические выборки (альтернативные состояния).

Модификаторы представляют собой значения отфильтрованных полей, прописанные прямо в формуле. Выглядит это примерно так:

Модификаторы пишутся в треугольных стрелках, рядом с идентификаторами. Модификаторы как бы вносят уточнения в идентификаторы.

Например: sum{1<CategoryName={‘Мужская одежда’}>Sales}. Это выражение значит, что берутся все данные приложения (идентификатор 1), но при этом остаются только данные, отфильтрованные по полю CategoryName, по значению Мужская одежда.

Если модификатор применяется к выборке по умолчанию, то идентификатор можно не указывать. Или указать $, если вам так больше нравится. Т.е. формулы

sum($<CategoryName={‘Мужская одежда’}>) sum(<CategoryName={‘Мужская одежда’}>)

работают одинаково.

Модификаторы множеств довольно часто используются чтобы ограничить расчет показателя по заранее заданным значениям полей. Например, сделать формулу для продаж только текущего и прошлого года, а потом сравнить их между собой на дашборде в визуалищации KPI. Именно это мы и реализуем.

Создайте новый лист, а на нем таблицу с двумя измерениями. OrderDate.Year и OrderDate.YearsAgo.

Т.к. мы загружали данные через диспетчер данных, и Qlik определил поле OrderDate как дату, для этого поля автоматически сгенерировался календарь — дополнительные измерения, которые содержат производные поля от даты (недели, месяцы, кварталы, годы и т.д.). Также, в календаре генерируются параметрические поля, вроде YearsAgo, которые считают, какое кол-во годов разделяет текущий год от того, что хранится в поле Year.

Т.е. в 2022 году поле YearsAgo будет равным 0 для 2022, 1 для 2021, 2 для 2020 и т.д. Таким образом мы знаем, что 0 — это текущий год, а 1 — прошлый. Используем это в модификаторе множеств.

Создайте таблицу с измерением Категория, а в ней меру. sum(Sales). Перейдите в редактор выражений, и пропишите перед Sales констуркцию {<>}.

Начните писать внутри конструкции {<>} слово Order. Вы увидите выпадающий список с подсказкой по наименованиям полей. Найдите в нем поле OrderDate.autoCalendar.YearsAgo.

После подстановки названия поля, пропишите ={0}.

Сохраните это выражение, и задайте метку для меры «Продажи текущего года».

Создайте рядом вторую меру. Можно скопировать в нее формулу из первой. Только нужно будет изменить пару деталей.

Во первых, параметр YearsAgo нужно установить равным 1. Также, нужно добавить параметр [OrderDate.autoCalendar.InYTD]={1}, чтобы в формуле учитывались только те даты, которые прошли в текущем году. Мыже не хотим сравнивать часть текущего года со всем прошлым, не так ли?

Поправим метку у второй меры, и получим вот такую таблицу.

Как вы понимаете, эти формулы можно использовать одновременно в одном выражении, чтобы создать показатель динамики текущего года к прошлому в % и т.д.

Если в модификаторе нужно указать несколько значений для одного поля, это делается через запятую, внутри фигурных скобок.

Если значение в модификаторе простое (одно слово или число), его нужно писать без кавычек. Иначе, значение нужно помещать в одинарные кавычки.

Наборы значений модификаторов могут взаимодействовать также, как и идентификаторы множеств. Например, вот такое выражение

вернет нам сумму продаж только по Мужской обуви и Женской одежде, потому что только эти 2 значения пересекаются в обоих наборах.

Обратите внимание, что выражение перестает реагировать на фильтр по полю, которое указано в модификаторе множеств. Это работает даже если для поля не указано никаких значений. Т.е. формула

не будет реагировать на фильтры по полям CategoryName, Country, Customer. Этим можно пользоваться, чтобы исключить нежелательную реакцию на фильтры.

В качестве полей для модификаторов можно исопльзовать только реально существующие поля в модели данных. Создаваемые измерения в основных элементах нельзя использовать в анализе множеств.

В этом занятии мы использовали заранее подготовленные в модели данных значения. Но реальные сценарии могут потребовать от нас более сложной логики фильтрации, полей в модели на все случаи жизни не насоздаешься. Поэтому мы разберем, как создавать данимические модификаторы множеств.

Скачать файл занятия

2 комментария

  1. Евгений, подскажите как сделать сравнение текущего года к прошлому, если данные заливаются с задержкой по факту закрытия периода, т.е. например сейчас апрель, а данные залиты только за февраль, март зальют на днях. Хотелось бы сравнивать 2 месяца текущего года к 2 двум месяцам прошлого, пока не зальют март.
    Опечатки: толкьо, котоыре

    1. Вам нужно сделать в скрипте в календаре параметр year-to-date (YTD), в клике для этого есть функция daynumberofyear(), пишите что-то вроде if(daynumberofyear(Дата) меньше daynumberofyear(today()),1,0) as InYTD. Можете использовать потом это поле в фильтрах и анализе множеств. При отборе по нему в анализ попадут только те даты, которые прошли в текущем году.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *