前面有提到過(guò),當(dāng)用PowerQuery分組功能挑選出重復(fù)值之后,展開的表格列順序發(fā)生了變化,那么要如何保證展開的列和原始數(shù)據(jù)的列順序是一樣的呢。這個(gè)帖子將對(duì)此進(jìn)行演示。
我們借用傳說(shuō)中的NorthWind數(shù)據(jù)庫(kù)來(lái)演示(以后都如此,免得我還要去造數(shù)據(jù))。
以下是代碼,我將操作說(shuō)明放在注釋中(用“//”標(biāo)記)。
let
//獲取表格
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
//這一步是PowerQuery自動(dòng)轉(zhuǎn)換數(shù)據(jù)格式的操作,非人為添加
更改的類型 = Table.TransformColumnTypes(源,{{"ProductID", Int64.Type}, {"ProductName", type text}, {"SupplierID", Int64.Type}, {"CategoryID", Int64.Type}, {"QuantityPerUnit", type text}, {"UnitPrice", type number}, {"UnitsInStock", Int64.Type}, {"UnitsOnOrder", Int64.Type}, {"ReorderLevel", Int64.Type}, {"Discontinued", type logical}}),
//關(guān)鍵步驟:通過(guò)分組來(lái)獲取重復(fù)值——凡是計(jì)數(shù)結(jié)果大于1的都是重復(fù)值
標(biāo)記重復(fù)值 = Table.Group(更改的類型, {"SupplierID"}, {{"計(jì)數(shù)", each Table.RowCount(_), type number}, {"列", each _, type table}}),
//通過(guò)篩選功能,只保留重復(fù)值
篩選重復(fù)值 = Table.SelectRows(標(biāo)記重復(fù)值, each ([計(jì)數(shù)] <> 1)),
//因?yàn)槲覀円凑赵急砀竦牧许樞騺?lái)展開分組操作生成的表格,因此把分組操作生成的“SupplierID”列刪除
刪除的列 = Table.RemoveColumns(篩選重復(fù)值,{"SupplierID"}),
//關(guān)鍵步驟:通過(guò)Table.ColumnNames()來(lái)獲取原始表格的列名稱,這將產(chǎn)生一個(gè)list,并且嚴(yán)格按照原始順序排列所有列,其結(jié)果作為展開表格的輸入
還原列順序= Table.ExpandTableColumn(刪除的列, "列", Table.ColumnNames(源), Table.ColumnNames(源))
in
還原列順序