Матрица Power BI — вычтите два (динамических) соответствующих столбца, используя DAX

#matrix #powerbi #dax #dynamic-columns

#матрица #powerbi #dax #динамические столбцы

Вопрос:

У меня есть единственная мера в матрице Power BI для рабочего стола ниже. введите описание изображения здесь

Мера берется из одной таблицы и представляет собой сумму столбца с числовыми значениями.

Мера: СУММА (таблица [Столбец])

Группа столбцов 1: Категория

Группа столбцов 2: год

Группа столбцов 3: Qtr (т.е. Q)

У меня есть сценарий, в котором наш клиент хочет получить разницу (разницу) между 2020 Q1 категории A и 2020 Q1 категории B.

введите описание изображения здесь

Новый столбец представляет собой дисперсию Q1.

Аналогичным образом мне нужна разница между 2020 Q2 категории A и 2020 Q2 категории B.

Как мне получить новый столбец в матрице на основе этого сценария, где я вычитаю соответствующие столбцы за год и квартал?

Также позже может возникнуть ситуация, при которой у категории A может быть год, которого у категории B может не быть.

Например, категория A может иметь 2018 и 2019 годы, в то время как категория B может иметь 2017 и 2018 годы.

В этом сценарии мне понадобится разница только между кварталами 2018 года, не нужно никаких вычислений для 2017 и 2019 годов.

Пожалуйста, есть идеи, используя DAX?

Выбор категории происходит с помощью среза.

Иногда это могут быть категории A и B, в других случаях это могут быть категории B и C, которые выбираются из слайсера.

Срез всегда будет выбирать ровно 2 категории одновременно.

Итак, я не могу ничего жестко закодировать. Все динамично.

Категория A может иметь 2018 и 2019 годы, в то время как категория B может иметь 2017 и 2018 годы, в то время как категория C может иметь 2019, 2020, 2021 и т.д.

Кроме того, мне, возможно, придется сравнивать соответствующие месяцы. Скажем, январь 2019 года A будет вычтен из января 2019 года B (аналогично квартальному сравнению).

Я думаю, нам может потребоваться использовать некоторую переменную для сопоставления с годом, а затем перейти к кварталу, а затем к месяцу.

Ответ №1:

Если у вас есть ровно две разные категории, вы можете выбрать одну, используя max, и одну, используя min, и вычислить разницу между ними.

 Variance =
VAR Cat1 = MAXX ( ALLSELECTED ( Table1 ), Table1[Category] )
VAR Cat2 = MINX ( ALLSELECTED ( Table1 ), Table1[Category] )
VAR Sum1 = CALCULATE ( SUM ( Table1[Column] ), Table1[Category] = Cat1 )
VAR Sum2 = CALCULATE ( SUM ( Table1[Column] ), Table1[Category] = Cat2 )
RETURN
    IF ( ISBLANK ( Sum1 ) || ISBLANK ( Sum2 ), BLANK (), Sum1 - Sum2 )
 

Это сохраняет контекст года и квартала / месяца и изменяет контекст категории только для выполнения вычисления.

Комментарии:

1. Спасибо, Алексис, в этом есть смысл. Я вернусь после попытки.

2. Большое спасибо Алексис; теперь это работает; Я использовал предоставленную вами идею и внес небольшие коррективы в соответствии со своими потребностями; я также многое узнал о ALLSELECTED функции DAX. очень ценю вашу помощь.

3. Еще один небольшой вопрос: я использую матрицу Power BI. Таким образом, новая мера дисперсии отображается в виде столбца для каждой категории (столбец группы). Существует ли какой-либо метод отображения столбца показателя дисперсии только в какой- либо одной категории? Возможен ли какой-либо метод скрытия в Power BI с использованием DAX?

4. Ваш небольшой вопрос на самом деле намного сложнее, и для него потребуется собственный post.

5. хорошо, опубликуем новый; данные соответствуют вашему подходу; но столбец отклонений повторяется для обеих категорий (в матрице), что является избыточным. я сообщу вам об этом после того, как отправлю вопрос о части сокрытия матрицы с избыточным столбцом. Еще раз спасибо Алексису за вашу помощь.

Ответ №2:

Существует функция под названием SAMEPERIODLASTYEAR, которая работает с time intelligence, возможно, это может сработать для вас.

Комментарии:

1. На самом деле я не сравниваю показатель между двумя разными годами; скорее, он сравнивается в том же году (пример: 2020 Q1 против 2020 Q1), только категория меняется (A Vs B Vs C ……)