基于PowerQuery中列名的行总计

时间:2016-04-06 16:14:32

标签: excel powerquery

我有一个大约有400列的数据文件。我需要将此数据导入PowerPivot。为了减少文件大小,我想使用PowerQuery创建2个不同的行总计,然后在加载时删除所有不需要的列。

虽然我的第一行总列(RowTotal1)将汇总所有400列,但我还希望第二行总计(RowTotal2)从RowTotal1中减去名称包含文本“click”的任何列在它。

其次,我想使用我的Country列中的值作为变量,同时减去包含此var的任何列。 e.g。

网站 ----的国家 ----的 Col1中 ----的 col2的 --- - 的 ClickCol1 ----的 COL3 ----的德国 ----的 RowTotal1 ---- RowTotal2

1A -------- ---------- USA 2 --------- 4 ----------- 8 ---- -------- ---------- 16 24 54 -------------- --------------- 46 -------

2A ----- -------德国2 --------- 4 ----------- ---------- 8 --16 ---------- -------------- 24 54 22 --------------- ----- -

RowTotal1 = 2 + 4 + 8 + 16 + 24

RowTotal2 (第一行) = 54 - 8 (ClickCol1)

RowTotal2 (第二行) = 54 - 24 (德国) - 8 (ClickCol1)

这可能吗? (编辑:是的。请参阅下面的答案)

已修订问题:是否有更多内存效率方法可以尝试一次分组3亿多行?

1 个答案:

答案 0 :(得分:1)

代码看起来像这样:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Site", type text}, {"Country", type text}, {"Col1", Int64.Type}, {"Col2", Int64.Type}, {"ClickCol1", Int64.Type}, {"Col3", Int64.Type}, {"Germany", Int64.Type}}),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Country", "Site"}, "Attribute", "Value"),
    #"Added Conditional Column" = Table.AddColumn(#"Unpivoted Other Columns", "Value2", each if [Country] = [Attribute] or [Attribute] = "ClickCol1" then 0 else [Value] ),
    #"Grouped Rows" = Table.Group(#"Added Conditional Column", {"Site", "Country"}, {{"RowTotal1", each List.Sum([Value]), type number},{"RowTotal2", each List.Sum([Value2]), type number}})
in
    #"Grouped Rows"

但是由于你有很多专栏,我应该解释一下步骤:

  • (假设您在Excel文件中有这些内容)将它们导入Power Query
  • 选择“网站”和“国家/地区”列(使用Ctrl),右键单击> Unpivot其他专栏
  • 使用此公式添加列(您可能需要使用高级编辑器):Table.AddColumn(#“Unpivoted Other Columns”,“Value2”,每个如果[Country] = [Attribute] = [Attribute] =“ClickCol1”然后0其他[值])
  • 选择网站和国家/地区列,右键单击>分组
  • 看起来像这样:enter image description here