Power BI自定义排序,你应该知道的技巧
以这样一个应收明细为例,模拟的每个客户不同账龄的应收余额:
如果想要展示各账龄应收余额占该客户总应收余额的占比,你可能会这样写个度量值:
应收 占比 = DIVIDE( SUM('应收明细表'[应收余额]), CALCULATE( SUM('应收明细表'[应收余额]) , ALL( '应收明细表'[账龄] ) ) )
看起来计算的结果是正确的,但是列标题上账龄显示的顺序却是错乱的,不是我们想要的按照账期长短的顺序。
这样的问题是不是都遇到过?应该怎么调整为期望的顺序结构呢。
其实只要熟练掌握之前分享过的按列排序技巧就可以解决,参考:
根据按列排序的规则,首先需要为这些账龄添加一个序号列,以方便排序。在不破坏原表结构的情况下,可以新建一个单独的账龄分组表:
关于辅助表的制作,可以参考:Power BI 辅助表制作方式汇总
对这个表的账龄列,按照序号列排序,操作方式如下:
然后将这个表与应收余额表建立关系:
并将矩阵的列标题替换为账龄分组表中的账龄,度量值也调整为账龄分组表的字段:
应收 占比 =
DIVIDE(
SUM('应收明细表'[应收余额]),
CALCULATE(
SUM('应收明细表'[应收余额]) ,
ALL( '账龄分组表'[账龄] )
)
)
做完这样的操作以后,发现矩阵变成了这样的:
虽然列标题的顺序对了,但是值却全部变成了100%,这是什么原因呢?
因为对账龄列做按列排序以后,再用这个字段做可视化,上下文就不仅仅是这个字段本身,实际上还隐含了序号列,所以才能将文本按照一定的顺序展示。
既然上下文中隐含的有序号列,在度量值中将序号列也ALL掉就可以了:
应收 占比 =
DIVIDE(
SUM('应收明细表'[应收余额]),
CALCULATE(
SUM('应收明细表'[应收余额]) ,
ALL( '账龄分组表'[账龄] , '账龄分组表'[序号] )
)
)
更省心的做法,为了避免出错,这里也可以直接ALL整个分组表:
应收 占比 =
DIVIDE(
SUM('应收明细表'[应收余额]),
CALCULATE(
SUM('应收明细表'[应收余额]) ,
ALL( '账龄分组表' )
)
)
度量值这样修改以后,就可以按照正确的顺序准确显示了:
以上就是在不改动原数据的情况下,对文本字段进行自定义排序的技巧,关键是正确的操作按列排序,以及排序后根据上下文的变化调整度量值的写法。
如果你再遇到类似的问题,套用上面的解决思路就行了。