【注】此案例來自于“M與DAX的恩怨糾葛” 討論群(群號:545814382),方法都不是我原創(chuàng),我只是收集整理。
原始文件
鏈接:http://pan.baidu.com/s/1eSIL40U 密碼:58c8
分析
這個表格處理的關(guān)鍵在于如何替換換行符。如果知道軟換行符是“#(lf)”,就比較好辦。如果不知道這個軟換行符,就只能百度了(這是我的下意識做法,然而并沒有搜出來正確結(jié)果)。其實PowerQuery的UI直接給出了替換這類換行符的方法。
在“開始”選項卡,點擊“拆分列”,彈出下圖拆分列的對話框。選擇“自定義”,選擇“每次出現(xiàn)分隔符時”(PowerQuery大多數(shù)時候都是自動選擇此選項),點擊“高級選項”展開子菜單,勾選“使用特殊字符進(jìn)行拆分”,點擊“插入特殊字符”下拉菜單,選擇“換行”,確定。

用換行符分列的界面.png
在這個界面,如果好奇心起,在“高級選項”里的“拆分為”勾選“行”,有驚喜。其實這正是下面的方法一的關(guān)鍵。
方法一:直接用SplitColumn()函數(shù)。此方法為施陽給出?!就扑]】
let
源 = Excel.CurrentWorkbook(){[Name="測試"]}[Content],
自定義1 = Table.ExpandListColumn(Table.AddColumn(源,"自定義",each Text.Split([業(yè)績],"#(lf)")),"自定義"),
按分隔符拆分列 = Table.SplitColumn(自定義1, "自定義", Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv), {"自定義.1", "自定義.2"})
in
按分隔符拆分列
上面的“自定義1”這一步,施陽大俠其實是合并了若干步驟,并且在保護(hù)原始數(shù)據(jù)時,新增了一列作為拆分列。
我們也可以一步一步利用UI先拆分換行符,再用“/”來拆分列。這樣做的好處是直觀,壞處是代碼不夠簡潔。
方法二:使用SplitColumn()和UnpivotOtherColumns()
這個方法是我從施陽大俠處獲得換行符的代碼之后,照著@R is for Data Robot大俠提示,照貓畫虎做出來的。比方法一多了一步驟,但也不失為一種思路。
let
源 = Excel.CurrentWorkbook(){[Name="測試"]}[Content],
按分隔符拆分列 = Table.SplitColumn(源, "業(yè)績", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), {"業(yè)績.1", "業(yè)績.2", "業(yè)績.3"}),
逆透視的列 = Table.UnpivotOtherColumns(按分隔符拆分列, {"姓名"}, "屬性", "值"),
按分隔符拆分列1 = Table.SplitColumn(逆透視的列, "值", Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv), {"值.1", "值.2"})
in
按分隔符拆分列1