如何在Power Query中实现相同的计算?
在Excel中我会使用:=COUNTIF($A$2:A2,A2)
Name Occurrence
A 1
A 2
B 1
A 3
B 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"