PowerBI中选取指定行并对该行数据排名的方法求助
解决PowerBI中DAX排名错误的方案
错误原因
你写的DAX表达式报错是因为:Filter(table1, table1[Index]=100)返回的是包含整行多列数据的表,而RANKX函数的第二个参数要求传入单个标量值,无法处理多列数据,因此触发错误提示:"表达式引用了多个列,无法将多个列转换为标量值。"
正确实现步骤
我们需要先把table1中index=100行的各列值,匹配到table2的对应行,再对这些值进行排名。
方法1:拆分两步创建计算列
- 第一步:创建
ValueFromTable1计算列,获取table1中index=100行对应列的值:
ValueFromTable1 = VAR TargetRow = FILTER(table1, table1[Index] = 100) RETURN SWITCH( table2[newCol1], "col1", SELECTCOLUMNS(TargetRow, "val", table1[col1]), "col2", SELECTCOLUMNS(TargetRow, "val", table1[col2]), "col3", SELECTCOLUMNS(TargetRow, "val", table1[col3]) )
- 第二步:创建
Ranked计算列,基于上面的值进行排名:
Ranked = RANKX(table2, table2[ValueFromTable1],,ASC,SKIP)
方法2:合并为单个DAX表达式
直接在Ranked列中完成值匹配和排名:
Ranked = VAR TargetRow = FILTER(table1, table1[Index] = 100) VAR CurrentValue = SWITCH( table2[newCol1], "col1", SELECTCOLUMNS(TargetRow, "val", table1[col1]), "col2", SELECTCOLUMNS(TargetRow, "val", table1[col2]), "col3", SELECTCOLUMNS(TargetRow, "val", table1[col3]) ) RETURN RANKX(table2, CurrentValue,,ASC,SKIP)
效果验证
完成后table2会生成正确的排名结果:
| newCol1 | Ranked |
|---|---|
| col1 | 1 |
| col2 | 2 |
| col3 | 3 |
内容的提问来源于stack exchange,提问作者Leon Von Moltke
相关产品推荐
相关产品推荐

