Использование нескольких фильтров в DAX

Я новичок в DAX.

В настоящее время я использую Power BI и пытаюсь создать общую сумму продаж с использованием нескольких разных SKU (или идентификаторов)

Я могу использовать это, чтобы отфильтровать до 1 артикула ("A1"):

Мера = РАССЧИТАТЬ ([Сумма продаж], Таблица 4 [SKU] = "A1")

но я хотел бы отфильтровать до пяти различных SKU.

Пример данных:

2      1,050.54
3     43,925.20
4      8,596.00
5      1,630.00
8      3,330.00
A1        45.24
A2       499.87
A3    53,567.05
A4       337.92
A5     4,265.00
AB    12,651.94
ACC    7,634.95
ADV   -1,769.95
ANT        1.60
AUTO   9,655.40
BOOT     268.00

Это возможно?


person ImaginationRF    schedule 06.05.2015    source источник
comment
Можете ли вы отредактировать свой вопрос, чтобы отформатировать данные из примера в таблицу. Таким образом мы сможем лучше понять, как выглядят ваши данные. Кроме того, является ли сумма продаж вычисляемым столбцом, который вы добавили в свою модель powerpivot?   -  person dotNetE    schedule 07.05.2015
comment
Обычно вы создаете свою меру для фильтрации по артикулам, а затем используете пользовательский интерфейс для фильтрации по нужным артикулам (с помощью среза или фильтра).   -  person guitarthrower    schedule 08.05.2015


Ответы (4)


CALCULATE определяется как CALCULATE(<expression>,<filter1>,<filter2>…) Это означает, что вы можете использовать несколько фильтров одновременно. время. Однако несколько фильтров будут действовать одновременно. Это означает, что данные должны соответствовать обоим условиям.

Таким образом, выполнение BadSumOfSales:=CALCULATE([Sum of Sales],Table3[SKU]="A1",Table4[SKU]="AB") не даст вам того, что вам нужно. Поскольку SKU должен быть равен A1 и AB, он вернет пустое.

Поскольку у вас есть пять элементов, которые вы хотели бы включить в фильтрацию, вам следует использовать SWITCH функция. Это позволит вам учесть несколько условий, которые должны возвращать TRUE, а затем позволить вы возвращаете FALSE для чего-либо еще

TotalsSumOfSales:=CALCULATE([Sum Of Sales],
SWITCH(Table4[SKU],
    "A1",TRUE(),
    "A2",TRUE(),
    "A3",TRUE(),
    "4" ,TRUE(),
    "5" ,TRUE(),
    "8" ,TRUE(),
      FALSE()  
))

Другой способ обойти это - использовать функцию OR. Это отличный вариант, но он действительно хорошо работает только тогда, когда у вас есть два фильтра одновременно. Если у вас их больше двух, вам придется выполнить вложение, которое может оказаться сложным. Поэтому в вашем случае я бы придерживался SWITCH, но вот пример того, как это будет выглядеть:

OrTotalSumOfSales:=CALCULATE([Sum of Sales],
OR(
    Table4[SKU]="A1",
    Table4[SKU]="A2"
))
person dotNetE    schedule 19.05.2015

Лучшая идея в этом случае - использовать оператор IN в DAX. Производительность намного лучше, чем у оператора канала или OR, и код становится более читабельным.

Это поддерживается только в последних версиях DAX.

GroupingSales:=CALCULATE([Sum of Sales],Table[SKU] IN {"A1","A2","A3","AB"})

Вы также можете использовать CONTAINSROW.

Дополнительная информация: https://www.sqlbi.com/articles/the-in-operator-in-dax/

person Bhavesh Patel    schedule 03.03.2018

Просто третья альтернатива версии Or. Вы можете использовать двойные трубы '||' который действует как оператор Or в фильтре.

Measure = CALCULATE([Sum of Sales],Table4[SKU]="A1" || Table4[SKU]="A2" || 
Table4[SKU]="A3" ||Table4[SKU]="A4" || Table4[SKU]="A5")  
person Brandon    schedule 29.07.2016

Что ж, я думаю, что на основании вашего запроса отфильтровать до 5 различных SKU, вам на самом деле не следует использовать DAX для решения вашей проблемы.

Если вы просто вставите сводную таблицу в Excel, вы можете добавить SKU в строки и продажи в значения. Если вам нужно, вы можете настроить агрегат (но я думаю, что по умолчанию используется SUM), чтобы у вас уже были правильные данные. Осталось только отфильтровать его до нужных вам SKU. Вы можете сделать то же самое в Power View, просто создав таблицу. Затем вы можете добавить SKU на панель фильтров и выбрать 5 требуемых SKU.

Благодарим вас за использование Power BI, - Лукаш

person Lukasz P.    schedule 11.05.2015