#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 ……)