#powerbi #dax
Вопрос:
Я пытаюсь определить, сколько различных продуктов доступно в нескольких или во всех странах. (Я собираюсь сосредоточиться на 3 штатах США, Вашингтон, ОР и Калифорния)
Для примера у меня есть таблица, которая выглядит следующим образом:
Продукт | Государство |
---|---|
Первый | wa |
Первый | около |
Первый | около |
Второй | wa |
Второй | или |
Второй | около |
Второй | или |
Третий | или |
Третий | wa |
Третий | wa |
Третий | wa |
Четвёртый | wa |
Четвёртый | около |
Четвёртый | или |
Четвёртый | около |
Из таблицы видно, что у меня есть 4 уникальных продукта и 3 уникальных состояния. Используя dax, я хочу найти уникальные продукты, доступные во всех 3 штатах.
На выходных данных должно быть указано 2 для второго и четвертого продукта, так как они имеют состояния покрытия WA, CA и ИЛИ.
Я пытался сделать это с помощью
dax = CALCULATE(DISTINCTCOUNT(table1[product],filter(table1,[state] IN {"WA","CA","OR"}))
но он возвращает максимальное количество различных продуктов для любого состояния.
Ответ №1:
Вы можете попробовать это
Measure4 =
VAR _0 =
CONCATENATEX ( VALUES ( 'fct'[State] ), fct[State], ",", fct[State], DESC )
VAR _1 =
COUNTX ( VALUES ( 'fct'[State] ), fct[State] )
VAR _2 =
IF ( _1 > 2, _0, BLANK () )
RETURN
_2
Edit
Вы можете создать следующую меру после приведенной выше, чтобы получить желаемый результат в карточке
newMeasure =
COUNTX (
FILTER (
ADDCOLUMNS (
SUMMARIZE (
fct,
fct[Product],
"test", CONCATENATEX ( VALUES ( fct[State] ), fct[State], ",", fct[State], DESC )
),
"test2", [Measure4]
),
[test2] <> BLANK ()
),
[test2]
)
Комментарии:
1. Похоже, все идет в правильном направлении, которое я ищу. Как бы я вывел только количество уникальных продуктов, доступных в WA, OR и CA? Например, Четвертым и вторым будут 2 уникальных продукта, соответствующих данной категории, поэтому вывод должен быть 2, если я покажу его на карте в Power BI.
2. Отредактировано по запросу
3. Спасибо! Кажется, это работает. Мне нужно будет «перепроектировать» это, чтобы понять, как все это работает, но я ценю помощь!
Ответ №2:
Вы можете попробовать использовать функцию INTERSECT (из ваших выборочных данных мера возвращает единицу, потому что в четвертом продукте нет «ИЛИ»).:
dax =
var __WA_product = CALCULATETABLE(VALUES(table1[product]), filter(table1,[state] = "WA"))
var __CA_product = CALCULATETABLE(VALUES(table1[product]), filter(table1,[state] = "CA"))
var __OR_product = CALCULATETABLE(VALUES(table1[product]), filter(table1,[state] = "OR"))
return
countrows( INTERSECT(INTERSECT(__WA_product, __CA_product ), __OR_product ))
Комментарии:
1. Я исправил свою таблицу примеров, чтобы четвертая часть включала «ИЛИ». Там была опечатка. Предоставленный вами dax не решает мою проблему. У меня все еще возникает та же проблема, когда он показывает 4, потому что второй содержит 4 значения, которые имеют WA, ИЛИ или CA.