Модификатор множества проще всего описать, как фильтры, вшитые в формулу. В отличие от идентификаторов, которые должны создаваться заранее (закладки), и могут содержать динамические выборки (альтернативные состояния).
Модификаторы представляют собой значения отфильтрованных полей, прописанные прямо в формуле. Выглядит это примерно так:
![](https://bi2business.ru/wp-content/uploads/2021/03/image-73.png)
Модификаторы пишутся в треугольных стрелках, рядом с идентификаторами. Модификаторы как бы вносят уточнения в идентификаторы.
Например: sum{1<CategoryName={‘Мужская одежда’}>Sales}. Это выражение значит, что берутся все данные приложения (идентификатор 1), но при этом остаются только данные, отфильтрованные по полю CategoryName, по значению Мужская одежда.
Если модификатор применяется к выборке по умолчанию, то идентификатор можно не указывать. Или указать $, если вам так больше нравится. Т.е. формулы
sum($<CategoryName={‘Мужская одежда’}> Sales) sum(<CategoryName={‘Мужская одежда’}> Sales)
работают одинаково.
Модификаторы множеств довольно часто используются чтобы ограничить расчет показателя по заранее заданным значениям полей. Например, сделать формулу для продаж только текущего и прошлого года, а потом сравнить их между собой на дашборде в визуалищации KPI. Именно это мы и реализуем.
Создайте новый лист, а на нем таблицу с двумя измерениями. OrderDate.Year и OrderDate.YearsAgo.
![](https://bi2business.ru/wp-content/uploads/2021/03/image-74.png)
Т.к. мы загружали данные через диспетчер данных, и Qlik определил поле OrderDate как дату, для этого поля автоматически сгенерировался календарь — дополнительные измерения, которые содержат производные поля от даты (недели, месяцы, кварталы, годы и т.д.). Также, в календаре генерируются параметрические поля, вроде YearsAgo, которые считают, какое кол-во годов разделяет текущий год от того, что хранится в поле Year.
Т.е. в 2022 году поле YearsAgo будет равным 0 для 2022, 1 для 2021, 2 для 2020 и т.д. Таким образом мы знаем, что 0 — это текущий год, а 1 — прошлый. Используем это в модификаторе множеств.
Создайте таблицу с измерением Категория, а в ней меру. sum(Sales). Перейдите в редактор выражений, и пропишите перед Sales констуркцию {<>}.
![](https://bi2business.ru/wp-content/uploads/2021/03/image-75.png)
Начните писать внутри конструкции {<>} слово Order. Вы увидите выпадающий список с подсказкой по наименованиям полей. Найдите в нем поле OrderDate.autoCalendar.YearsAgo.
![](https://bi2business.ru/wp-content/uploads/2021/03/image-76.png)
После подстановки названия поля, пропишите ={0}.
![](https://bi2business.ru/wp-content/uploads/2021/03/image-77.png)
Сохраните это выражение, и задайте метку для меры «Продажи текущего года».
![](https://bi2business.ru/wp-content/uploads/2021/03/image-78.png)
Создайте рядом вторую меру. Можно скопировать в нее формулу из первой. Только нужно будет изменить пару деталей.
Во первых, параметр YearsAgo нужно установить равным 1. Также, нужно добавить параметр [OrderDate.autoCalendar.InYTD]={1}, чтобы в формуле учитывались только те даты, которые прошли в текущем году. Мыже не хотим сравнивать часть текущего года со всем прошлым, не так ли?
![](https://bi2business.ru/wp-content/uploads/2021/03/image-79.png)
Поправим метку у второй меры, и получим вот такую таблицу.
![](https://bi2business.ru/wp-content/uploads/2021/03/image-80.png)
Как вы понимаете, эти формулы можно использовать одновременно в одном выражении, чтобы создать показатель динамики текущего года к прошлому в % и т.д.
Если в модификаторе нужно указать несколько значений для одного поля, это делается через запятую, внутри фигурных скобок.
![](https://bi2business.ru/wp-content/uploads/2021/03/image-81.png)
Если значение в модификаторе простое (одно слово или число), его нужно писать без кавычек. Иначе, значение нужно помещать в одинарные кавычки.
Наборы значений модификаторов могут взаимодействовать также, как и идентификаторы множеств. Например, вот такое выражение
![](https://bi2business.ru/wp-content/uploads/2021/03/image-82.png)
вернет нам сумму продаж только по Мужской обуви и Женской одежде, потому что только эти 2 значения пересекаются в обоих наборах.
Обратите внимание, что выражение перестает реагировать на фильтр по полю, которое указано в модификаторе множеств. Это работает даже если для поля не указано никаких значений. Т.е. формула
![](https://bi2business.ru/wp-content/uploads/2021/03/image-83.png)
не будет реагировать на фильтры по полям CategoryName, Country, Customer. Этим можно пользоваться, чтобы исключить нежелательную реакцию на фильтры.
В качестве полей для модификаторов можно исопльзовать только реально существующие поля в модели данных. Создаваемые измерения в основных элементах нельзя использовать в анализе множеств.
В этом занятии мы использовали заранее подготовленные в модели данных значения. Но реальные сценарии могут потребовать от нас более сложной логики фильтрации, полей в модели на все случаи жизни не насоздаешься. Поэтому мы разберем, как создавать данимические модификаторы множеств.
Евгений, подскажите как сделать сравнение текущего года к прошлому, если данные заливаются с задержкой по факту закрытия периода, т.е. например сейчас апрель, а данные залиты только за февраль, март зальют на днях. Хотелось бы сравнивать 2 месяца текущего года к 2 двум месяцам прошлого, пока не зальют март.
Опечатки: толкьо, котоыре
Вам нужно сделать в скрипте в календаре параметр year-to-date (YTD), в клике для этого есть функция daynumberofyear(), пишите что-то вроде if(daynumberofyear(Дата) меньше daynumberofyear(today()),1,0) as InYTD. Можете использовать потом это поле в фильтрах и анализе множеств. При отборе по нему в анализ попадут только те даты, которые прошли в текущем году.