Qlik Community

Россия и СНГ

Announcements
QlikWorld 2022, LIVE in Denver CO., May 16-19, 2022. REGISTER NOW TO RECEIVE EARLY BIRD PRICING
cancel
Showing results for 
Search instead for 
Did you mean: 
vkozlov
Creator
Creator

Задачка \ HELP

Коллеги привет

Пусть есть источник формата

LOAD * INLINE [
Order, Product, Product Type
1, A, X
1, A, Y
2, B, X
3, C, Y
4, D, X
4, D, Y
4, E, X
];

В источнике есть свойство. В одном Order есть строго один уникальный Product

Требуется посчитать количество продуктов, которые обладают одновременно свойствами X и Y

Как считать продукты по отдельным свойствам понятно:

Количество продуктов считаем как уникальное Order&Product, т.к. в заказе может быть только один продукт

2018-12-26_12-08-17.pngА вот количество тех которые обладают обоими свойствами хз

Можно ли это сделать формулами, не прибегая к скрипту и изменению модели(Например можно было бы вывести справочник продуктов разметив ее флагами)?

1 Solution

Accepted Solutions
Sergey_Polekhin
Employee
Employee

С множествами можно выполнять математические операции.

Поэтому сама задача сводится к трём шагам:

  1. Получению множества значений продуктов (Product), имеющих тип X: P( {<ProductType = {'X'}> } Product)
  2. Получению множества значений продуктов (Product), имеющих тип Y: P( {<ProductType = {'Y'}> } Product)
  3. Получению пересечения двух множеств: P( {<ProductType = {'X'}> } Product) * P( {<ProductType = {'Y'}> } Product)

В таком случае итоговое выражение может выглядеть так:

 Count( distinct {< Product = P( {<ProductType = {'X'}> } Product) * P( {<ProductType = {'Y'}> } Product) >} Product)

 

Итог - на рисунке ниже: 

1.png

 

View solution in original post

6 Replies
Zhandos_Shotan
Partner
Partner

Здравствуйте,

Используйте функцию P():

https://help.qlik.com/ru-RU/sense/September2018/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetA...

Выглядеть должно примерно вот так:

Count({<Product=P({1<[Product Type]={‘X’, 'Y'}>} Product)>} Product)

 

vkozlov
Creator
Creator
Author

Спасибо!

Но

Count(DISTINCT{<Product=P({1<[Product Type]={'X','Y'}>} Product)>}Product)

Эквивалентно

Count(DISTINCT If([Product Type]='Y' or [Product Type]='X',Order&Product))

2018-12-26_13-45-09.png

В результате должны получить A и D

Требуется выделить продукты которые обладают двумя свойствами(X,Y) одновременно

Zhandos_Shotan
Partner
Partner

Если данных не много можно объединить два выражения и написать

if(Count(...X...)=1 and Count(...Y...)=1, 1)

 

Вместо проверки ProductType через IF лучше написать через Set Analysis: Count({<[Product Type]={'X'}>} Product). Так намного быстрее работает.

vkozlov
Creator
Creator
Author

Тоже думал, но

Count(If(Count( не работает, а что то типа 

If(Count(DISTINCT If([Product Type]='X',Order&Product))=1 and Count(DISTINCT If([Product Type]='Y',Order&Product))=1, Count(distinct Order&Product),0)

Условно работает только по измерению Product, не считается в Total

2018-12-26_16-14-39.png

Zhandos_Shotan
Partner
Partner

Вот сделал, во вложении.

Слишком замысловато. Я чувствую что мы ходим вокруг да около Smiley Very Happy. Тоже учусь.

count({<Product={"=Count({1<ProductType={'X','Y'}>} Product)=2"}>} DISTINCT Product)

Выбирает те продукты у которых количество =2 по выражению.

https://help.qlik.com/ru-RU/sense/September2018/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetA...

 

Sergey_Polekhin
Employee
Employee

С множествами можно выполнять математические операции.

Поэтому сама задача сводится к трём шагам:

  1. Получению множества значений продуктов (Product), имеющих тип X: P( {<ProductType = {'X'}> } Product)
  2. Получению множества значений продуктов (Product), имеющих тип Y: P( {<ProductType = {'Y'}> } Product)
  3. Получению пересечения двух множеств: P( {<ProductType = {'X'}> } Product) * P( {<ProductType = {'Y'}> } Product)

В таком случае итоговое выражение может выглядеть так:

 Count( distinct {< Product = P( {<ProductType = {'X'}> } Product) * P( {<ProductType = {'Y'}> } Product) >} Product)

 

Итог - на рисунке ниже: 

1.png

 

View solution in original post