好的,我想到了一种完全不同的方法,它对 PQ 更有意义,即使它看起来有点奇怪。我认为这应该运行得更快。
制作几个具有年份 - 1 和年份 - 2 的自定义列,以获取您过去两年的信息。现在使用 Merge Queries 函数,并将表与自身合并。 Cntrl-选择客户,然后在顶部表格中为 Year - 1 制作的列,然后 Cntrl-选择客户,然后在底部表格中选择当前年份的列。从结果中展开金额,但将其命名为上一年金额或其他名称。对 Year -2 列执行相同操作。
然后只需添加一个自定义列,用于检查三年金额中的 0 或空值,您就会得到答案。
这是最终表格的样子和完整的 M 代码(显然,您可以在完成后删除带有前一年/amt 引用的列)。
let
Source = Table1,
#"Merged Queries" = Table.NestedJoin(Source,{"Client", "Year"},Source,{"Client", "Year"},"Source",JoinKind.LeftOuter),
#"Removed Columns" = Table.RemoveColumns(#"Merged Queries",{"Source"}),
#"Added Custom" = Table.AddColumn(#"Removed Columns", "PY", each [Year]-1),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "PPY", each [Year]-2),
#"Merged Queries1" = Table.NestedJoin(#"Added Custom1",{"Client", "PY"},#"Added Custom1",{"Client", "Year"},"Added Custom1",JoinKind.LeftOuter),
#"Expanded Added Custom1" = Table.ExpandTableColumn(#"Merged Queries1", "Added Custom1", {"Amt"}, {"PY.Amt"}),
#"Merged Queries2" = Table.NestedJoin(#"Expanded Added Custom1",{"Client", "PPY"},#"Expanded Added Custom1",{"Client", "Year"},"Expanded Added Custom1",JoinKind.LeftOuter),
#"Expanded Expanded Added Custom1" = Table.ExpandTableColumn(#"Merged Queries2", "Expanded Added Custom1", {"Amt"}, {"PPY.Amt"}),
#"Added Custom2" = Table.AddColumn(#"Expanded Expanded Added Custom1", "ThreeYearCheck", each not List.ContainsAny({[Amt],[PY.Amt],[PPY.Amt]}, {null, 0})),
#"Sorted Rows" = Table.Sort(#"Added Custom2",{{"Client", Order.Ascending}, {"Year", Order.Ascending}})
in
#"Sorted Rows"