我正在研究一种解决方案,用于在Power BI的DAX中计算与Qlikview的FirstSortedValue类似的值。
据我所知,没有开箱即用的解决方案来获得文本值(与类别类似)的功能,该文本值的排名位于第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
)
)
这些操作以及我的许多其他尝试都在单个列中起作用,但是为什么在具有多个列的表上使用时却不起作用?它应该根据我选择的第N个等级返回1个文本值的样本? 类似于回答“按销售量计算,第N个最畅销的产品名称是什么?”的问题。
我很困惑,仍在努力寻找答案。不能选择Firstnonblank,因为我不希望找到仅获得第一名的答案的解决方案。不建议这样做。
答案 0 :(得分:1)
最简单的方法是使用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 ()
)
)
尽管有可能更好地解决整个问题,所以请提供minimal complete verifiable example样本数据和所需的输出。
答案 1 :(得分:0)
由于在公式中使用了SAMPLE(1 ...),因此我想出了一种解决方案,该解决方案适用于具有警告关系的多列表:
SAMPLE(1, FILTER(ALL('X'[Name]), RANKX(ALL(X[Name]), CALCULATE(COUNT('X'[Name])),,,skip) = Nth), TRUE())
我稍后将尝试添加解决方案,以解决与CONCATENATEX(我已经开始工作)的关系,以便一次展示,因此不会遗漏任何东西。
编辑:2018年10月23日 这里是!最终的简洁版本:很棒!
测量=
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)),",")