Параметр ASC при использовании функции TOPN в Power BI - PullRequest
1 голос
/ 08 октября 2019

У меня есть эти данные:

enter image description here

Затем получите эту меру:

amount = SUM( play[amount] )

Тогда я попробовалчтобы использовать ASC/DESC аргументы функции TOPN в этих двух мерах:

Top 2 customer per category ASC = 
VAR rnk = VALUES( play[customer] )

RETURN
CALCULATE(
    [amount],
    TOPN(
        2,
        ALL( play[customer] ),
        [amount],
        ASC
    ),
    RNK
)

Top 2 customer per category DESC = 
VAR rnk = VALUES( play[customer] )

RETURN
CALCULATE(
    [amount],
    TOPN(
        2,
        ALL( play[customer] ),
        [amount],
        DESC
    ),
    RNK
)

Теперь, если я использую эти две меры, это будет выглядеть следующим образом:

enter image description here

Что происходит? Почему мера Top 2 customer per category ASC ничего не показывает? Как изменить этот показатель, чтобы он отображал значения для двух нижних значений каждой категории?

1 Ответ

1 голос
/ 08 октября 2019

Проблема здесь в том, что вторым аргументом TOPN должна быть таблица, а не столбец без фильтра.

Независимо от того, чем является category, ALL(play[customer]) возвращает таблицу:

customer
--------
xx
yy
zz
jj
qq
ff

Мера [amount] все еще оценивается в контексте фильтра category, хотя для category = "a" вы получаете

customer  [amount]
------------------
xx          10
yy          12
zz          13
jj
qq
ff

, а для category = "b" вы получаете

customer  [amount]
------------------
xx
yy
zz
jj          15
qq          16
ff           9

Эти пробелы считаются меньшими, чем любое число, поэтому они выбираются при сортировке ASC.

Попробуйте вместо этого слегка измененную меру:

Top 2 customer per category ASC =
VAR rnk = VALUES ( play[customer] )
RETURN
    CALCULATE (
        [amount],
        TOPN ( 2, CALCULATETABLE ( play, ALL ( play[customer] ) ), [amount], ASC ),
        RNK
    )

Использование CALCULATETABLE, контекст фильтра category сохраняется.


PS Чтобы сгенерировать таблицы выше, вы можете написать новую вычисляемую таблицу следующим образом:

Top2Table =
CALCULATETABLE (
    ADDCOLUMNS ( ALL ( play[customer] ), "amount", [amount] ),
    play[category] = "a" <or "b">
)

...