是否可以在 powerquery 公式中执行 Excel 的 Countifs/Sumifs 公式?假设我将 [Column1] 作为“条件范围”,将 [Column2] 作为“条件”(示例条件 [Column2] 文本包含“产品”)并且我希望在新的自定义列中计数/求和 [Column1] 单元格([Column3 ])
6 回答
你可能想试试这个公式:
List.Count(List.FindText(Source[Column1], [Column2]))
它不像 SUMIF 那样灵活,但会计算 Column1 中包含 Column2 当前行中的单词的记录数
我在我的 Power Query 编辑器中为 COUNTIF 使用了这个函数,但我还没有掌握 COUNTIFS 或 SUMIFS:
let
countif = (tbl as table, col as text, value as any) as number =>
let
select_rows = Table.SelectRows(tbl, each Record.Field(_, col) = value),
count_rows = Table.RowCount(select_rows)
in
count_rows
in
countif
然后我像使用它一样使用它
add_column = Table.AddColumn(
last_expression,
"count",
each
f_countif(Product, "Id",[ProductId]))
我已经在我的博客上广泛地写了这个,这是我的首选方式。
http://jaykilleen.com/posts/countif-in-power-query-or-powerbi-using-m-language
我希望这可以帮助你 :)
看这个例子:我有一个包含 4 列(序列、团队、名称、角色)的表,如此处所示,并且想要创建一个包含列(团队、HasAdmin?、CountOfMembers)的汇总表
我分 3 步完成,如图所示:
第 1 步:使用功能区中的conditional column
按钮添加 2 个新列,如此处和此处所示Add Column
第 2 步:将新列的类型更改为“整数”,如下所示
Step 3 : 选择 [Team] 栏并点击Ribbon中的Group By
按钮, 并填写如下所示Home
结束!
对于“sumif”,您可以在步骤 1 中放置单元格值而不是“1”
您可以使用过滤器根据您的条件进行过滤,然后使用“转换”功能区选项卡中的“计数行”。过滤可以通过单击列中的箭头来完成。
或者,您可以过滤列,然后使用 Group By 来计算计数或总和。
我想我解决了这个问题。
我创建了一个csv。[Sumifs test.csv] 并将查询链接到此文件。
这是源表,如下所示:[Header] {rows}
[Alpha1] {AAAAAAAAA}
[Alpha1] {AA AA AA AA BB BB BB BB BB}
[Num1] {1 1 1 1 1 1 1 1 1}
[Num2] {11 11 11 11 22 22 22 22 22}
[值] {1 2 3 4 5 6 7 8 9}
让
Source = Csv.Document(File.Contents("D:\Power BI\Tests\Sumifs test.csv"),[Delimiter=",", Encoding=1252]),
#"Promoted Headers1" = Table.PromoteHeaders( Source),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers1",{{"Num1", Int64.Type}, {"Num2", Int64.Type}, {"Value", Int64.Type}} ),
Phase1=#"Changed Type" ,
#"Grouped Rows" = Table.Group(#"Changed Type", {"Alpha1", "Alpha1_1"}, {{"Values", each List.Sum([Value]),类型编号}}),
MyList = List.Buffer(#"Grouped Rows"[Values]),
Custom1 = #"Grouped Rows",
#"添加自定义" = Table.AddColumn(Custom1, "Acumulative", each List.Sum( List.Select(MyList, (x) => x>=[Values]))),
#"Grouped Rows1" = Table.Group(#"Added Custom", {"Alpha1"}, {{"Values2", each List.Sum([Values]), type number}}),
MyList2 = List.Buffer(#"Grouped Rows1"[Values2]), Custom2
= #"Grouped Rows1",
#"Merged Queries" = Table.NestedJoin(Phase1,{"Alpha1"},Custom2,{"Alpha1"},"NewColumn",JoinKind.LeftOuter),
#"Expanded NewColumn" = Table.ExpandTableColumn(#"Merged Queries" , "NewColumn", {"Values2"}, {"NewColumn.Values2"}), Phase2=#"Expanded NewColumn",
#"Merged Queries2" = Table.NestedJoin(Phase2,{"Alpha1_1"},Custom1,{"Alpha1_1"},"NewColumn",JoinKind.LeftOuter),
#"Expanded NewColumn1" = Table.ExpandTableColumn(#"Merged Queries2", "NewColumn", {"Values"}, {"NewColumn.Values"})
在
#"扩展的新列 1"
Powerquery 遵循更多的 ETL 方法。所以在 powerquery 的情况下你不能有一个活动的 OLE。您可以将 excel 中的现有表链接为数据源,并可以为您想要的内容生成一些特定的摘要。如果你想实现类似 excel 的功能,有一些先决条件。
您的数据应该在 Excel 表格中。制作另一个包含您的搜索条件的表格。现在您需要制作两张表,一张用于 datasource ,第二张用于您的搜索条件
现在在从现有数据中获取的表中,您可以创建一个额外的指标列,您可以在其中根据搜索条件进行输出,因为您需要执行 countifs if Text.Contains(col1,search criteria1) 和 Text.Contains(col2, searchcriteria 2) than 1 else 0 to implement sumifs if Text.Contains(col1,search criteria1) and Text.Contains(col2,searchcriteria 2) than [sumcol] else 0 根据此列汇总表,只需选择输出范围输出结果的工作表(将是另一个单单元格表)
如果您已经从其他来源获取数据,只需为搜索条件创建参数表,如果您的搜索条件是固定的,只需跳过数据和搜索条件表并使用指示符列。
不幸的是,它是一个过程,没有捷径或公式。