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

【注】此案例來自于“M與DAX的恩怨糾葛” 討論群(群號(hào):545814382),方法都不是我原創(chuàng),我只是收集整理。

原始文件

鏈接:http://pan.baidu.com/s/1eSIL40U 密碼:58c8

分析

這個(gè)表格處理的關(guān)鍵在于如何替換換行符。如果知道軟換行符是“#(lf)”,就比較好辦。如果不知道這個(gè)軟換行符,就只能百度了(這是我的下意識(shí)做法,然而并沒有搜出來正確結(jié)果)。其實(shí)PowerQuery的UI直接給出了替換這類換行符的方法。

在“開始”選項(xiàng)卡,點(diǎn)擊“拆分列”,彈出下圖拆分列的對(duì)話框。選擇“自定義”,選擇“每次出現(xiàn)分隔符時(shí)”(PowerQuery大多數(shù)時(shí)候都是自動(dòng)選擇此選項(xiàng)),點(diǎn)擊“高級(jí)選項(xiàng)”展開子菜單,勾選“使用特殊字符進(jìn)行拆分”,點(diǎn)擊“插入特殊字符”下拉菜單,選擇“換行”,確定。


用換行符分列的界面.png

在這個(gè)界面,如果好奇心起,在“高級(jí)選項(xiàng)”里的“拆分為”勾選“行”,有驚喜。其實(shí)這正是下面的方法一的關(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”這一步,施陽大俠其實(shí)是合并了若干步驟,并且在保護(hù)原始數(shù)據(jù)時(shí),新增了一列作為拆分列。

我們也可以一步一步利用UI先拆分換行符,再用“/”來拆分列。這樣做的好處是直觀,壞處是代碼不夠簡潔。

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

這個(gè)方法是我從施陽大俠處獲得換行符的代碼之后,照著@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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容