問題描述
Power BI獲取SharePoint List列表作為資料來源。但是在資料來源中,有Table屬性值,有List屬性值。如果直接展開,則會形成“笛卡爾”集的效果,變成N多行資料。
效果圖如下:
但是,我們最終所需要的效果是:
保留整體表格的行數不變,把Table中所需要的欄位,List中的值使用“逗號”分隔,展示在一行中。
那麼,在真實的Sharepoint List + Power BI中,如何來展開List/Table中的欄位呢? 如何來使用 “ , ” 拼接呢?
問題解答
解決以上的問題,主要使用的知識點為:
1)在Table屬性列,透過“新增新列”,從Table中取出Column2列中的值,形成一個新的List列
#"Added Custom" = Table.AddColumn(#"SharePoint List", "Custom", each [Count][Column2]),
2)在新的List列中,透過 Text.Combine 函式把List中的全部值轉換為目標字串
#"Extracted Values" = Table.TransformColumns(#"Added Custom", {"Custom", each Text.Combine(List.Transform(_, Text.From), ","), type text}),
詳細操作步驟如下:
步驟一:在Table列中,展開檢視Table中的資料及列名
點選Add Column --> Custome Column --> 選擇正確的列(這裡是Text) --> 在第4點中,需要手動輸入Text表中的列名。
點選OK後,新的資料結構為List。
第二步:展開List,並且使用Comma分隔
點選列頭右邊的展開符號,選擇“Extract Values...”後,並選擇 Comma分隔。
最終效果,達到了把 Table --> List --> String 的目的。
動態效果圖
完整的Power BI Query語句為
let Source = Table.FromRows(), #"SharePoint List" = ... ... .... .... , #"Renamed Columns" = Table.RenameColumns(#"SharePoint List",{{"Column1", "ID"}, {"Count", "Text"}}), #"Added Custom" = Table.AddColumn(#"Renamed Columns", "Custom", each [Text][Column2]), #"Extracted Values" = Table.TransformColumns(#"Added Custom", {"Custom", each Text.Combine(List.Transform(_, Text.From), ","), type text}), #"Replaced Errors" = Table.ReplaceErrorValues(#"Extracted Values", {{"Custom", " < no value >"}}), #"Replaced Value" = Table.ReplaceValue(#"Replaced Errors",null,"<no null>",Replacer.ReplaceValue,{"Custom"}) in #"Replaced Value"
參考資料