5

是否可以在 powerquery 公式中执行 Excel 的 Countifs/Sumifs 公式?假设我将 [Column1] 作为“条件范围”,将 [Column2] 作为“条件”(示例条件 [Column2] 文本包含“产品”)并且我希望在新的自定义列中计数/求和 [Column1] 单元格([Column3 ])

4

6 回答 6

5

你可能想试试这个公式:

List.Count(List.FindText(Source[Column1], [Column2]))

它不像 SUMIF 那样灵活,但会计算 Column1 中包含 Column2 当前行中的单词的记录数

于 2016-02-12T21:30:30.520 回答
3

我在我的 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

我希望这可以帮助你 :)

于 2016-03-16T06:42:38.620 回答
1

看这个例子:我有一个包含 4 列(序列、团队、名称、角色)的表,如此处所示,并且想要创建一个包含列(团队、HasAdmin?、CountOfMembers)的汇总表

我分 3 步完成,如图所示:

第 1 步:使用功能区中的conditional column按钮添加 2 个新列,如此此处所示Add Column

第 2 步:将新列的类型更改为“整数”,如下所示

Step 3 : 选择 [Team] 栏并点击Ribbon中的Group By按钮, 并填写如下所示Home

结束!

对于“sumif”,您可以在步骤 1 中放置单元格值而不是“1”

于 2018-02-14T07:51:16.453 回答
1

您可以使用过滤器根据您的条件进行过滤,然后使用“转换”功能区选项卡中的“计数行”。过滤可以通过单击列中的箭头来完成。

或者,您可以过滤列,然后使用 Group By 来计算计数或总和。

于 2016-02-12T19:01:41.040 回答
1

我想我解决了这个问题。

我创建了一个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"

于 2016-10-19T04:23:40.783 回答
-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 根据此列汇总表,只需选择输出范围输出结果的工作表(将是另一个单单元格表)

如果您已经从其他来源获取数据,只需为搜索条件创建参数表,如果您的搜索条件是固定的,只需跳过数据和搜索条件表并使用指示符列。

不幸的是,它是一个过程,没有捷径或公式。

于 2016-02-29T18:04:48.380 回答