示例需求:省份清单中“自治区”名称过长,在做报表展示时效果不理想,希望将其替换为简称,例如:内蒙古自治区替换为“内蒙古”。这个直接使用Excel中的替换也可以实现,毕竟只有5个自治区需要替换,接下来看看Power Query中如何实现。
单击选中数据表中任意单元格,例如A6,依次单击【数据】>【自表格/区域】,打开Power Query编辑器。
依次单击【转换】>【替换值】,在【替换值】对话框中输入【要查找的值】和【替换为】,单击【确定】按钮完成替换。
恐怕我是用的“假PQ”,自治区被替换为公式了,看编辑栏中是被引号包围,那么必定结果中是字符了,就像孙悟空戴上紧箍咒,不可能有什么神威了。
略加修改去掉引号,就可以实现正常替换了,将自治区替换为简称。
创建这样的新列正宗操作应该是使用【自定义列】功能,但是使用需要输入自定义公式(M代码),并确保没有语法错误。而使用条件列,只需要输入几个参数将可以实现,但是只能实现字符替换,在编辑栏中稍加修改将可以实现相同的效果,对于PQ新手来说,不失为一个偷懒的方法。这二者的区别有点儿类似于命令行与图形操作界面的区别。
新建列中内蒙古自治区被简化为“内蒙”,这个需要单独处理。在增加条件列对话框中,增加一个条件处理“内蒙古”。
修改PQ公式,就可以得到正确的省份名称了。
删除第一列,并修改列名为“省份”,完成全部替换。
单击【关闭并上载】按钮可以将数据加载到工作表中。
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
重命名的列