BI神器Power Query(23)-- 同一列内多重替换(3)

示例需求:省份清单中“自治区”名称过长,在做报表展示时效果不理想,希望将其替换为简称,例如:内蒙古自治区替换为“内蒙古”。这个直接使用Excel中的替换也可以实现,毕竟只有5个自治区需要替换,接下来看看Power Query中如何实现。

单击选中数据表中任意单元格,例如A6,依次单击【数据】>【自表格/区域】,打开Power Query编辑器。
在这里插入图片描述
第一个方法参见:BI神器Power Query(21)-- 同一列内多重替换(1)
M代码如下:

let= Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    更改的类型 = Table.TransformColumnTypes(,{{"省份", type text}}),
    替换的值 = Table.ReplaceValue(更改的类型,"内蒙古自治区","内蒙古",Replacer.ReplaceText,{"省份"}),
    替换的值1 = Table.ReplaceValue(替换的值,"宁夏回族自治区","宁夏",Replacer.ReplaceText,{"省份"}),
    替换的值2 = Table.ReplaceValue(替换的值1,"新疆维吾尔自治区","新疆",Replacer.ReplaceText,{"省份"}),
    替换的值3 = Table.ReplaceValue(替换的值2,"广西壮族自治区","广西",Replacer.ReplaceText,{"省份"}),
    替换的值4 = Table.ReplaceValue(替换的值3,"西藏自治区","西藏",Replacer.ReplaceText,{"省份"})
in
    替换的值4

第二个方法参见:BI神器Power Query(22)-- 同一列内多重替换(2)
M代码如下:

let= Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    更改的类型 = Table.TransformColumnTypes(,{{"省份", type text}}),
    已添加条件列 = Table.AddColumn(更改的类型, "省份(简)", each if Text.StartsWith([省份], "内蒙") then "内蒙古" else if Text.EndsWith([省份], "自治区") then Text.Middle([省份],0,2) else [省份]),
    删除的列 = Table.RemoveColumns(已添加条件列,{"省份"}),
    重命名的列 = Table.RenameColumns(删除的列,{{"省份(简)", "省份"}})
in
    重命名的列

第一种方法容易理解,但是需要多次替换,第二种方法,替换比较简单,但是需要借助辅助列,如果可以将这两种方法组合起来就好了。接下来就开始DIY …

第一种方法中核心就是如下代码实现替换。

 替换的值 = Table.ReplaceValue(更改的类型,"内蒙古自治区","内蒙古",Replacer.ReplaceText,{"省份"})

其语法格式如下,更多详情参考:微软在线文档

Table.ReplaceValue(table as table, oldValue as any, newValue as any, replacer as function, columnsToSearch as list) as table

简单讲的话,就是在columnsToSearch列中将oldValue替换为newValue。
改造后的M代码:

let= Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    替换的值 = Table.ReplaceValue(,
				each [省份],
				each if Text.EndsWith([省份],"自治区") 
					then (
							if Text.StartsWith([省份],"内蒙") 
							then "内蒙古" 
							else Text.Middle([省份],0,2)
							) 
					else [省份],
				Replacer.ReplaceText,
				{"省份"})
in
    替换的值

【代码解析】
each [省份]为oldValue,循环处理每行数据。
替换值的处理逻辑与第二种方法完全相同,使用if判断语句,得到省份简称。

这样在原始数据列进行一次替换,就可以达到目的。更新M代码,效果杠杠的,如下图所示。

在这里插入图片描述

如果希望用好PQ,那么还是要学习M语言,大家一起努力吧!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值