Power BI:客户和年份的自定义列

时间:2018-05-23 07:55:08

标签: statistics analytics powerbi powerquery

我想在查询编辑器(QE)中创建一个表格,显示我的客户编号,年份,金额和自定义列,表明过去3年的金额是否为空。

我尝试了多种解决方案,但似乎都没有。我在查询编辑器中需要这个。我不能用这个措施。

有人可以帮我这个吗?如果您有任何需要额外信息,请告诉我,我会看到我能做些什么。

例如我的结果应该是什么: Clientnumber Year Amount Custom table 1 2016 2100 FALSE 1 2017 2000 FALSE 1 2018 100 TRUE
2 2016 0 FALSE 2 2017 100 FALSE 2 2018 3800 FALSE 2 2019 2357 TRUE

我希望这个例子有所帮助!

3 个答案:

答案 0 :(得分:1)

花了一分钟来理解你的意思,但我假设你正在寻找的是你所看到的记录年份以及前两年的每一年。

我也在假设这些数据已经汇总,因此每个客户每年只有一个金额(如果情况不是这样的话,您可以在PQ中轻松汇总这个数据)。

我不知道这是否是“正确”的方法,但我基本上只是在做一个countifs函数。添加一个自定义列并将其放入其中(我假设您提供的示例作为没有自定义列的起点,因此引用“Source”作为查询的第一步):

.c

答案 1 :(得分:1)

好吧我想到了一种完全不同的方法,即使PQ看起来很奇怪,也会对PQ更有意义。我认为这应该快得多。

制作一些包含Year - 1和Year - 2的自定义列,以获得过去两年。现在使用Merge Queries函数,并将表与自身合并。 Cntrl-选择客户端,然后选择您在顶部表格中为Year - 1创建的列,并选择Cntrl - 选择Client,然后在底部表格中选择当前Year的列。从结果中展开金额,但将其命名为上年金额或其他任何金额。对于第-2年列,请执行相同的操作。

enter image description here

然后只需添加一个自定义列,检查三年金额中的0或空值,即可获得答案。

enter image description here

这里是最终表格的样子和完整的M代码(显然,您可以在完成后删除带有前一年/ amt参考的列。)

enter image description here

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"

答案 2 :(得分:-1)

DAX 正是您所期待的for

  

使用数据分析表达式(DAX)来解决许多基本的计算和数据分析问题