Я работал над решением для вычисления чего-то похожего на FirstSortedValue Qlikview в DAX для Power BI.
Насколько мне известно, нет готового решения для получения функциональности по получению текстового значения (во многом как категории), которое по своему рангу находится на n-й позиции.
Мой вопрос: почему это работает с одним столбцом, но возвращает ошибку нескольких столбцов при использовании в таблице?
CALCULATE (
SAMPLE (
1,
FILTER (
'table_name',
RANKX (
ALL ( 'table_name'[column_name] ),
CALCULATE ( COUNT ( 'table_name'[column_name] ) ),
, , SKIP
)
= Nth
),
TRUE ()
)
)
Также другой вариант:
CALCULATE (
SAMPLE ( 1, VALUES ( 'table_name'[column_name] ), TRUE () ),
FILTER (
'table_name',
RANKX (
ALL ( 'table_name'[column_name] ),
CALCULATE ( COUNT ( 'table_name'[column_name] ) ),
, , DENSE
)
= Nth
)
)
Обе эти и многие другие мои попытки работают, когда это один столбец, но почему это не сработает при использовании в таблице с несколькими столбцами? Он должен вернуть образец 1 текстового значения в соответствии с выбранным мной рангом N? Сродни ответу на вопрос «Какое название продукта занимает N-е место по продажам по количеству продаж?».
Я в тупике, но все еще пытаюсь найти ответ. Firstnonblank - это не вариант, потому что меня не интересует решение, позволяющее получить только 1-й ответ; не предлагайте этого.
2 ответа
Я придумал решение, которое работает с таблицами с несколькими столбцами с оговоркой - связи, поскольку в формуле используется SAMPLE (1 ...), предпочтение отдается алфавиту:
SAMPLE(1, FILTER(ALL('X'[Name]), RANKX(ALL(X[Name]), CALCULATE(COUNT('X'[Name])),,,skip) = Nth), TRUE())
Позже я попытаюсь добавить решение, чтобы сгладить связи с помощью CONCATENATEX (который я должен был работать), который будет отображаться за один раз, и поэтому ни один камень не останется незамеченным.
РЕДАКТИРОВАТЬ: 23 октября 2018 г. Вот! Последняя лаконичная версия: отлично работает!
Мера =
VAR Nth = [number] RETURN CONCATENATEX(DISTINCT('table_name'[column_name]), CALCULATE(FILTER(VALUES('table_name'[column_name]), RANKX(ALL('table_name'[column_name]), CALCULATE(COUNT('table_name'[column_name])),,,Dense) = Nth)),",")
Самый простой способ заставить это работать из того, что у вас есть, - превратить вашу таблицу в один столбец, используя SELECTCOLUMNS
.
Следующее даст вам таблицу с одним столбцом с именем столбца «Имя столбца».
SELECTCOLUMNS( FILTER( [...] ), "Column Name", 'table_name'[column_name] )
CALCULATE (
SAMPLE (
1,
SELECTCOLUMNS(
FILTER (
'table_name',
RANKX (
ALL ( 'table_name'[column_name] ),
CALCULATE ( COUNT ( 'table_name'[column_name] ) ),
, , SKIP
)
= Nth
),
"Column Name",
'table_name'[column_name]
),
TRUE ()
)
)
Тем не менее, может быть лучший способ решить вопрос в целом, поэтому, пожалуйста, предоставьте минимальный полный проверяемый пример образцов данных и желаемых вывод если возможно.
Похожие вопросы
Связанные вопросы
Новые вопросы
dax
Язык выражений, используемый в Microsoft Power Pivot, табличных службах анализа SQL Server и Power BI для выполнения аналитических вычислений.