Эквивалент PowerBi DAX для СУММЕСЛИМН с текущим значением строки в качестве фильтра

В Excel я мог бы, если бы находился в таблице под названием «Продажи» с четырьмя столбцами.

Продажи

Month, CustomerId, ProductId, TotalQuantity
Jan,1, CAR,
Feb,1, CAR,

Я мог бы добавить формулу:

=SUMIFS(Sales[Quantity],Sales[CustomerId],[@[CustomerId]])

Это перейдет в таблицу продаж и суммирует столбец CustomerID, отфильтрованный по CustomerID текущей строки, в которую была введена формула.

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

TotalQuantity = CALCULATE(SUM(Sales[Quantity]),Sales[CustomerId] = Sales[CustomerId]))

Есть идеи, как заставить работать эквивалент @?


person Jay Killeen    schedule 08.02.2016    source источник
comment
Он помечен тегом powerquery, но язык запросов - не M. Вы хотите расширить свой вопрос или изменить теги?   -  person Carl Walsh    schedule 08.02.2016
comment
Меня немного смущает ваш пример - все ваши ссылки относятся к одной таблице продаж? Где находится столбец "Количество"?   -  person Mike Honey    schedule 09.02.2016
comment
@CarlWalsh Я думаю, я был сбит с толку, поскольку пришел из редактора запросов в PowerBI (который также используется в PowerQuery так же), но использовал AddColumn в отчетах, который затем переходит из M в DAX. Поправьте меня, если я ошибаюсь.   -  person Jay Killeen    schedule 09.02.2016


Ответы (1)


Я думаю, что ключевая функция, которую вам не хватает, - РАНЬШЕ. Это неудивительно, потому что его название вводит в заблуждение - на самом деле оно означает «Текущая строка». Вам также понадобится функция FILTER в параметре Filter в CALCULATE, чтобы сбросить контекст фильтра для всей таблицы.

Итак, ваша функция New Column может выглядеть так:

TotalQuantity = CALCULATE(SUM(Sales[Quantity]), FILTER(Sales, Sales[CustomerId] = EARLIER (Sales[CustomerId])))

Вот отличный пример из наиболее доступного исходного сайта для формул DAX:

http://www.powerpivotpro.com/2013/07/writing-a-subtotal-calc-column-aka-the-simplest-use-of-the-earlier-function/

И FWIW вот официальный документ на EARLIER:

https://msdn.microsoft.com/en-us/library/ee634551.aspx

person Mike Honey    schedule 08.02.2016
comment
Потрясающие. На самом деле я собирался прокомментировать использование ФИЛЬТРА, когда вы редактировали свой ответ. Который я взял по ссылке PowerPivotPro. TotalQuantity = CALCULATE (SUM ([Quantity]), FILTER (Sales, Sales [CustomerId] = EARLIER (Sales [CustomerI‌ d]))) сработало! Спасибо! - person Jay Killeen; 09.02.2016
comment
И да, извините, у меня должен был быть столбец CustomerId с именем Quantity, но я торопился. Я не буду ничего менять, это будет означать, что ответы нужно отредактировать. Решение все еще работает. Спасибо еще раз. - person Jay Killeen; 09.02.2016
comment
ALLEXCEPT () здесь чище, чем FILTER (): CALCULATE (‹expression›, ALLEXCEPT ('Продажи', 'Продажи' [CustomerId])) и лучше работает в большой таблице. - person greggyb; 09.02.2016