让我们愉快的切割吧 - 4:如何在无特定间隔符下拆分字母和数字

正所谓理想很丰满,现实很骨感。实际的数据整理中有不少情况下在所需要拆分的数据里是找不有规律的间隔符可以用做拆分依据的。例如下面统计文件大小的表单示例中,由于终端用户的豪放填写,导致记录大小的数字和单位并没有形成统一规律,用常规的通过空格或者右侧截取后两位字符的方式是无法对数据进行拆分的。

这里写图片描述

对于这种数字+字母或者字母+数字类型的文本,即使没有统一的间隔符也是可以进行拆分的,思路为:

  • 先看数据格式,如果有些行包含空格,有一些没有,为了方便截取,需要先将空格去掉,保证要替换的内容只有数字和字母。去掉空格的方法用SUBSTITUTE函数即可
RemoveSpace = SUBSTITUTE([File Size]," ","")

这里写图片描述

  • 清除掉空格后下一步开始考虑截取,从数据的结构特点来看,所有行都是以数字开头,字母结尾,因此可以考虑用LEFT函数截取数字部分,之后再用RIGHT函数截取字母部分。
    此处的难点在于到底要截取几位才能将数字和字母分离。可以考虑数数每一行一共有多少个数字,然后按照数字个数进行截取即可。例如第一行的150K一共有三个数字,分别是1,5,0。如果按照3位从左侧截取,就可以获得150这个结果,就完成了将数字分离出来的目的。
    这样,下一个函数公式就应该是计算每一行文本中数字的个数。计算思路是,先用LEN函数计算整个文本字符的个数,然后再减去字母的个数,即可得到数字的个数。
    哈,好,现在难点又变成如何计算字母的个数了。这里面用了一个小的技巧,就是可以将每一行文本中的数字都去掉,这样得到一个纯字母字符串,再用LEN计算这个字符串长度即可。去掉数字的方法很直接,就是用SUBSTITUTE函数将所有的数字都替换成空(也就是双引号中没有任何内容)。此处之所以要把数字去掉而不是字母,主要考虑的是数字只有0-9外加小数点(.)总共只有11个符号,而英文字母有26个字符,如果换成中文就要有3000多个,用SUBSTITUTE来挨个替换是不现实的,去掉数字所用的公式为:
SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE([File Size],"0",""),"1",""),"2",""),"3",""),"4",""),"5",""),"6",""),"7",""),"8",""),"9",""),".","")

注意:此处必须使用多层嵌套,因为在DAX语言中不支持类似于在Excel中使用SUBSTITUTE的方法用大括号({})将要替换的多个值罗列出来。

  • 去掉数字后就可以计算文本中字母的个数,然后再用原始文本中总的字符串个数减去字母个数即可获得数字的个数。具体公式如下:
CountOfNumber = LEN(Sheet1[File Size])-LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Sheet1[File Size],"0",""),"1",""),"2",""),"3",""),"4",""),"5",""),"6",""),"7",""),"8",""),"9",""),".",""))

这里写图片描述

  • 得到数字的个数之后就可以利用LEFT函数进行截取,具体公式如下:
Number = LEFT([RemoveSpace],[CountOfNumber])

这里写图片描述

  • 拆分数字成功之后就可以利用RIGHT函数将字母拆分出来。具体公式是:
Unit = RIGHT(Sheet1[RemoveSpace],LEN(Sheet1[RemoveSpace])-Sheet1[CountOfNumber])

这里写图片描述

这样,拆分数字+字母形式的文本就完成了,同样原理还可以拆分字母+数字形式的。不过从实际操作来看,对这种没有特殊分隔符的数据在Power BI中通过DAX语言进行拆分并不是最好的选择,因为DAX可以调用的方法有限。如果可以的话,最好在将数据导入到Power BI前就对原始数据进行规整,以便利用更多的公式,工具方法等进行数据拆分。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值