Вопрос или проблема
Привет, мне удалось создать меру, которая суммирует количество по 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-меры
-
Подсчет суммы по ID.
Нам необходимо создать меру, которая будет суммировать значенияcount
по каждому уникальномуid
. Мы сделаем это с помощью функцииSUMX
вместе сVALUES
. -
Нахождение минимального значения.
После того как мы получили суммы для каждого ID, мы можем использовать функциюMINX
для определения минимального значения. -
Получение 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]
)
Пояснение логики
-
Создание сводной таблицы:
SummaryTable
— это временная таблица, в которой мы группируем данные поid
и рассчитываем суммуcount
. Мы используемSUMMARIZE
, чтобы сформировать новую таблицу с двумя колонками:id
иTotalSum
. -
Рассчитываем минимальное значение:
MinValue
— это минимальная сумма, полученная изTotalSum
черезMINX
. -
Фильтрация результатов по минимальной сумме:
ИспользуемFILTER
, чтобы оставить только те строки изSummaryTable
, где сумма равнаMinValue
. ЗатемMAXX
вернет ID с минимальным значением, так как идентификаторы уникальны и мы ожидаем, что у нас будет только один ID с минимальной суммой.
Примечания
- Убедитесь, что в таблице присутствуют уникальные
id
, иначеMAXX
вернет максимальный ID среди нескольких. - Эта мера будет автоматически рассчитывать нужное значение на основе данных, отображаемых в вашей модели, и учитывать контекст фильтрации.
Заключение
Используя представленный подход, вы легко сможете находить ID, соответствующий минимальной сумме ваших значений count
. Этот метод является гибким и может быть адаптирован к более сложным условиям, если это необходимо. Следуйте изложенной логике, и вы сможете достигнуть желаемого результата.