我有以下数据:
然后采取以下措施:
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
)
现在,如果我使用这两种措施,它看起来将如下所示:
这是怎么回事?
为什么度量Top 2 customer per category ASC
什么都没显示?
如何修改该度量,以使其显示每个类别的底部两个值?
答案 0 :(得分:1)
这里的问题是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
过滤器上下文被保留。
P.S。要生成上面的表,您可以编写一个新的计算表,如下所示:
Top2Table =
CALCULATETABLE (
ADDCOLUMNS ( ALL ( play[customer] ), "amount", [amount] ),
play[category] = "a" <or "b">
)