Мера DAX, которая возвращает значение на основе вычисленного минимума.

Вопрос или проблема

Привет, мне удалось создать меру, которая суммирует количество по ID и затем возвращает минимум между ними. Логика была бы такой: sum(id=1)=600, sum(id=2)=700, так что вернуть 600. Что я хочу, так это создать меру, которая возвращает ID с минимальным значением (id=1), и у меня не получается это сделать.
Моя текущая мера:

Min_value =
Var x1= calculate(sum(count), id=1)
Var x2 = calculate(sum(count), id=2)
Return min(x1,x2)

Вот что я пытался сделать:

Min_value_id =
Var x1= calculate(sum(count), id=1)
Var x2 = calculate(sum(count), id=2)
X3= min(x1,x2)
Return calculate(max(id), sum(count)=x3)

Кажется, что сумм (count) = x3 не работает, может кто-то посоветовать, как это исправить? Спасибо!

count
id

200
1

400
2

400
1

500
2

Вы можете попробовать это:
sum = sum(‘Table'[count])

min_sum = minx(values(‘Table'[id]),[sum])

min_id =
VAR _tbl =
SUMMARIZE ( ‘Table’, ‘Table'[id], “sum1”, SUM ( ‘Table'[count] ) )
VAR _tbl2 =
ADDCOLUMNS ( _tbl, “check”, IF ( MINX ( _tbl, [sum1] ) = [sum1], 1 ) )
RETURN
MAXX ( FILTER ( _tbl2, [check] = 1 ), [id] )

Ответ или решение

Чтобы решить задачу, связанную с вычислением идентификатора (ID) минимального значения по сумме столбца (count) в языке DAX, мы можем использовать подход, основанный на ссылочных функциях и агрегатах. Ваша первоначальная попытка использовала неправильные конструкции, поэтому давайте подробно рассмотрим, как правильно сформировать calculable measure для этой задачи.

Шаги для создания DAX-меры

  1. Подсчет суммы по ID.
    Нам необходимо создать меру, которая будет суммировать значения count по каждому уникальному id. Мы сделаем это с помощью функции SUMX вместе с VALUES.

  2. Нахождение минимального значения.
    После того как мы получили суммы для каждого ID, мы можем использовать функцию MINX для определения минимального значения.

  3. Получение ID с минимальной суммой.
    Для этого мы можем воспользоваться комбинацией функций FILTER и MAXX, чтобы извлечь тот ID, который соответствует минимальной сумме.

Итоговая мера DAX

Вот развернутое решение, которое выполняет описанные шаги:

SumByID = 
SUM('Table'[count])

MinSumID = 
VAR SummaryTable = 
    SUMMARIZE(
        'Table',
        'Table'[id],
        "TotalSum", [SumByID]
    )
VAR MinValue = 
    MINX(SummaryTable, [TotalSum])
RETURN 
    MAXX(
        FILTER(SummaryTable, [TotalSum] = MinValue),
        'Table'[id]
    )

Пояснение логики

  1. Создание сводной таблицы:
    SummaryTable — это временная таблица, в которой мы группируем данные по id и рассчитываем сумму count. Мы используем SUMMARIZE, чтобы сформировать новую таблицу с двумя колонками: id и TotalSum.

  2. Рассчитываем минимальное значение:
    MinValue — это минимальная сумма, полученная из TotalSum через MINX.

  3. Фильтрация результатов по минимальной сумме:
    Используем FILTER, чтобы оставить только те строки из SummaryTable, где сумма равна MinValue. Затем MAXX вернет ID с минимальным значением, так как идентификаторы уникальны и мы ожидаем, что у нас будет только один ID с минимальной суммой.

Примечания

  • Убедитесь, что в таблице присутствуют уникальные id, иначе MAXX вернет максимальный ID среди нескольких.
  • Эта мера будет автоматически рассчитывать нужное значение на основе данных, отображаемых в вашей модели, и учитывать контекст фильтрации.

Заключение

Используя представленный подход, вы легко сможете находить ID, соответствующий минимальной сумме ваших значений count. Этот метод является гибким и может быть адаптирован к более сложным условиям, если это необходимо. Следуйте изложенной логике, и вы сможете достигнуть желаемого результата.

Оцените материал
Добавить комментарий

Капча загружается...