【案例】用PowerQuery处理单元格包含多行文本的表格

【注】此案例来自于“M与DAX的恩怨纠葛” 讨论群(群号:545814382),方法都不是我原创,我只是收集整理。

原始文件

链接:http://pan.baidu.com/s/1eSIL40U 密码:58c8

分析

这个表格处理的关键在于如何替换换行符。如果知道软换行符是“#(lf)”,就比较好办。如果不知道这个软换行符,就只能百度了(这是我的下意识做法,然而并没有搜出来正确结果)。其实PowerQuery的UI直接给出了替换这类换行符的方法。

在“开始”选项卡,点击“拆分列”,弹出下图拆分列的对话框。选择“自定义”,选择“每次出现分隔符时”(PowerQuery大多数时候都是自动选择此选项),点击“高级选项”展开子菜单,勾选“使用特殊字符进行拆分”,点击“插入特殊字符”下拉菜单,选择“换行”,确定。


【案例】用PowerQuery处理单元格包含多行文本的表格_第1张图片
用换行符分列的界面.png

在这个界面,如果好奇心起,在“高级选项”里的“拆分为”勾选“行”,有惊喜。其实这正是下面的方法一的关键。

方法一:直接用SplitColumn()函数。此方法为施阳给出。【推荐】

let
源 = Excel.CurrentWorkbook(){[Name="测试"]}[Content],
自定义1 = Table.ExpandListColumn(Table.AddColumn(源,"自定义",each Text.Split([业绩],"#(lf)")),"自定义"),
按分隔符拆分列 = Table.SplitColumn(自定义1, "自定义", Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv), {"自定义.1", "自定义.2"})
in
按分隔符拆分列

上面的“自定义1”这一步,施阳大侠其实是合并了若干步骤,并且在保护原始数据时,新增了一列作为拆分列。

我们也可以一步一步利用UI先拆分换行符,再用“/”来拆分列。这样做的好处是直观,坏处是代码不够简洁。

方法二:使用SplitColumn()和UnpivotOtherColumns()

这个方法是我从施阳大侠处获得换行符的代码之后,照着@R is for Data Robot大侠提示,照猫画虎做出来的。比方法一多了一步骤,但也不失为一种思路。

let
源 = Excel.CurrentWorkbook(){[Name="测试"]}[Content],
按分隔符拆分列 = Table.SplitColumn(源, "业绩", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), {"业绩.1", "业绩.2", "业绩.3"}),
逆透视的列 = Table.UnpivotOtherColumns(按分隔符拆分列, {"姓名"}, "属性", "值"),
按分隔符拆分列1 = Table.SplitColumn(逆透视的列, "值", Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv), {"值.1", "值.2"})
in
按分隔符拆分列1

你可能感兴趣的:(【案例】用PowerQuery处理单元格包含多行文本的表格)