为每条记录分配一定数量的事件(如果是,则为Count)

时间:2018-05-03 15:22:19

标签: excel count powerquery countif

如何在Power Query中实现相同的计算?

在Excel中我会使用:=COUNTIF($A$2:A2,A2)

Name    Occurrence
A          1
A          2
B          1
A          3
B          2

谢谢, 塔米尔

2 个答案:

答案 0 :(得分:1)

这可以仅通过“按钮”达到(几乎 - 除了一些自定义列公式):

AddedIndex = Table.AddIndexColumn(Source, "Index", 0, 1),
GroupedRows = Table.Group(AddedIndex, {"Name"}, {{"tmp", each _, type table}}),
AddedCustom = Table.AddColumn(GroupedRows, "Custom", each Table.AddIndexColumn([tmp],"Occurrence", 1,1)),
RemovedOtherColumns = Table.SelectColumns(AddedCustom,{"Custom"}),
Expanded = Table.ExpandTableColumn(RemovedOtherColumns, "Custom", {"Name", "Occurrence"}, {"Name", "Occurrence"})

或者,更短:

AddedIndex = Table.AddIndexColumn(Source, "Index", 0, 1),
GroupedRows = Table.Group(AddedIndex, {"Name"}, {{"tmp", each Table.AddIndexColumn(_, "Occurence", 1,1), type table}}),
Expanded = Table.ExpandTableColumn(GroupedRows, "tmp", {"Occurrence"}, {"Occurrence"})

如果您需要保留初始行顺序,那么您还可以提取Index列并按其排序。还必须在最后一步提取所有其他必要的列

答案 1 :(得分:0)

在PQ中保持运行计数肯定是可能的,尽管其中一个因PQ设计用于查看数据而不是非常简单。可能有一种更有效的方式,但这就是我提出的方法。

首先添加一个从1开始的索引列,这样我们就可以轻松跟踪"行"我们在。然后在其中添加一个自定义列

Number.Abs(List.Count(List.RemoveItems(List.Range(#"Added Index"[Name], 0, [Index]), {[Name]}))-List.Count(List.Range(#"Added Index"[Name], 0, [Index])))

我没有在PQ中看到一个简单的列表函数来计算列表中的匹配项,因此我们通过获取列表与匹配项已删除和列表的基本计数。该索引用于我们可以检查列表,直到我们当前的"行"通过使用List.Range。

当我输入样本数据表时,完整的M代码如下所示:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1),
    #"Added Custom" = Table.AddColumn(#"Added Index", "Occurence", each Number.Abs(List.Count(List.RemoveItems(List.Range(#"Added Index"[Name], 0, [Index]), {[Name]}))-List.Count(List.Range(#"Added Index"[Name], 0, [Index]))))
in
    #"Added Custom"