平时为了快捷直接使用销售表里面的产品信息清洗去重得到一张产品表用来搭建数据模型。因为产品信息每个月在更新,所以可能会产生同一个产品1月和6月的销售记录中某一个属性不一样的情况,遇到这样的情况,统一使用最近一次销售记录的产品信息。源数据销售表有超过20万行,清洗完的产品表有约60,000个SKU。
我想了两个方案,但是性能都不好,想请教一下大神们有没有更好的解法或者我现在的Query有提升空间
方案一:Table.Buffer倒序排序销售日期后按产品编号去重
let
Source = Excel.CurrentWorkbook(){[Name="Table"]}[Content],
#"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"产品编号", Int64.Type}}),
#"Sorted Rows" = Table.Buffer(Table.Sort(#"Changed Type",{{"销售日期", Order.Descending}})),
#"Removed Duplicates" = Table.Distinct(#"Sorted Rows", {"产品编号"}),
#"Removed Other Columns" = Table.SelectColumns(#"Removed Duplicates",{"产品编号", "产品类别", "产品子类别", "产品颜色", "产品尺寸"})
in
#"Removed Other Columns"
方案二:Table.Group嵌套Table.SelectRows
let
Source = Excel.CurrentWorkbook(){[Name="Table"]}[Content],
#"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"产品编号", Int64.Type}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"产品编号"}, {{"产品信息", each Table.Distinct(Table.SelectRows(_, (x) => Number.From(x[销售日期])=Number.From(List.Max(_[销售日期]))))}}),
#"Expanded 产品信息" = Table.ExpandTableColumn(#"Grouped Rows", "产品信息", {"产品类别", "产品子类别", "产品颜色", "产品尺寸"}, {"产品类别", "产品子类别", "产品颜色", "产品尺寸"})
in
#"Expanded 产品信息"