在Power BI中对数据进行排序(数据查询篇)

有的时候表单中会有文本+数字类型的数据需要进行排序,例如Week 1 Week 2一直到Week 10, Week 11等这种情况。由于Power BI默认会按照字母顺序对文本类型数据进行排序,这就会导致Week 1后面出现Week 10而不是我们实际中使用的Week 2。

这里写图片描述

要对这种数据进行排序,可以在Editor Query中进行,利用M语言在数据查询时就对其进行编辑,这样就可以使新增数据在倒入Power BI前就已经排序完毕,从而省去了在数据建模阶段再进行排序的麻烦。

对于上例中的排序很简单,思路是先将Weeks这一列复制一份,之后对复制出来的新列以空格为单位进行拆分,拆分后利用得到的数字列进行排序。

这里写图片描述

上面这个例子很常见处理起来也很简单,下面这个例子需要按照产品序列号排序,处理起来就稍微绕一下。因为产品序列号一般都是一些数字按照类似于XXXX.YY.ZZ这种格式组成,并不是标准的整数或者小数类型,无法进行类型转换,因此在Power BI中就会被当做一般的Text数据类型进行处理,导致排序出现一些问题。

这里写图片描述

要对这种类型数据进行处理,就需要对原始数据进行拆分和填充,利用文本类型的排序规则创建出一个拍序列。具体实现需要借用下面的M Script。其实思路一样,需要先将原始列进行拆分,拆分后注意到Copy.2和Copy.3中的数据位数不一样,有的是两位数,有的是一位数,这就导致按照文本类型数据规则排序时两位数以1开头的数据会紧跟着一位数1后面。
这里写图片描述

要解决这个问题,就需要将所有数据都变成两位数,也就是要在原来一位数的数据前添加0,把1变成01。要做这个操作需要调用一个M函数,目前在Query Edit中还无法直接进行。使用的函数是:Text.PadStart

Text.PadStart(text, length, optional pad)

这个函数的目的是在已存在的文本前填充字符,以似的文本达到指定长度。

Text是要填充的文本,Length指的是要填充后整个文本的长度,optional pad指的是要填充的字符,如果不填写则使用空格。注意,此处要填充的字符(optional pad)只能是一个单个字符,添多个字符会报错。

在本例中的处理思路是,将所有拆分出来的字符(Copy.1,Copy.2,Copy.1)进行填充,填充的规则是对于不足2字符长度的数据前添加0,然后将填充后的数据进行拼接,生成一个新的列

= Table.AddColumn(#"Split Column by Delimiter", "Sort_Version", each Text.PadStart ([Copy.1], 2, "0") & "." & Text.PadStart ([Copy.2], 2, "0") & "." & Text.PadStart ([Copy.3], 2, "0"))

这里写图片描述

之后删除多余列,再以新建的列进行排序既可以解决version排序问题。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值