首页 > 解决方案 > Power BI:DAX:以固定开始日期运行 Sum - 即使在过滤时

问题描述

我有两张桌子,有:

  1. Entrydate,几个类别
  2. ChurnDate,几个类别

类别通过不同的表格连接,日期与日历连接。

现在我想计算我有多少客户。所以我有以下 DAX 公式

1. SumChurn = 
CALCULATE(
    SUM('kuendigungen'[KUENDIGUNG]);
    FILTER(
        ALLSELECTED('Calendar'[Date]);
        ISONORAFTER('Calendar'[Date]; MAX('Calendar'[Date]); DESC)
    )
)

2. SumEntry = 
CALCULATE(
    SUM('eintritt'[NEUMITGLIED]);
    FILTER(
        ALLSELECTED('Calendar'[Date]);
        ISONORAFTER('Calendar'[Date]; MAX('Calendar'[Date]); DESC)
    )
)

3. TotalCustomers = SumEntry - SumChurn

这可行,但在我的图表中,我想过滤日期,以便它只显示 2020 年或过去 3 年。当我这样做时,计算是错误的,因为它只计算在这个间隔内。

有没有一种解决方案可以过滤我的视觉效果中的日期,但在我的计算中,累积和的开始日期始终是固定的?

我不想要一个新列,因为我仍然想过滤我的客户类别......

谢谢,米凯拉

编辑:尝试更清楚地解释它

示例表 1:包含新客户

Date        unique_id1  unique_id2 unique_id3   cat1 cat2 cat3 cat4 cat5 cat6
1886-02-01  2070030124  550261     207000152145 207  0    0     1   0    0
1887-01-01  4350002756  4081878    435000010707 435  0    0     1   0    0
1888-01-01  7030000597  3206858    703000001279 703  0    0     1   0    0 
1888-06-01  7030016696  3208056    703000005002 703  0    0     1   0    0
1888-09-01  8210024182  204124     821000008664 821  1    0     1   0    1
1889-01-01  7050055324  1988250    705000018309 705  1    0     1   0    0
1889-01-01  8250000278  439485     825000600296 825  0    0     1   0    0
1889-05-01  7030023754  3208355    703000000884 703  0    0     1   0    0
1889-10-01  2110071206  2849359    211000330019 211  0    1     1   0    0
1889-10-01  2110071236  2851371    211000120014 211  0    0     1   0    0
1889-11-14  5190529889  4260192    519000123846 519  1    0     1   0    0
1890-07-01  7330349030  4819467    733000013102 733  0    0     1   0    0
1890-07-01  7330152914  4817492    733000075604 733  1    0     1   0    1
1890-07-01  8190000889  486170     819000215708 819  0    0     1   0    0
1890-07-01  8190444976  486199     819000215740 819  0    0     1   0    0
1890-12-01  8190001388  476049     819000100005 819  0    0     1   0    0
1891-01-01  7030001248  3206975    703000000043 703  0    0     1   0    1

示例表 2:包含与表 1 类似的离开客户

日历表示例:

01.01.1990
02.01.1990
03.01.1990 ... (till today)

输出关闭是一个衡量标准

for each day in calendar: number of customer at this date = cumulative_sum(newcustomer) - cumulative_sum(churncustomer)

当我运行我编写的计算时,我得到了这个输出,但我想要以某种方式测量,当我过滤日期时,总和仍然是第一个日期的累积总和,否则数字是错误的。

编辑3:

正如 mkrabbani 发布的那样,我做了完全相同的事情,但它对我不起作用,以下计算:

TotalKuendigungen = 
CALCULATE(
    SUM('kuendigungen'[KUENDIGUNG]);
        FILTER (
            ALL ( 'Calendar'[Date] );
           ( 'Calendar'[Date]   <= MAX (  ( 'Calendar'[Date]  ))
)))

TotalNeukunden = CALCULATE(
    SUM('eintritt'[NEUMITGLIED]);
        FILTER (
            ALL ( 'Calendar'[Date] );
           ( 'Calendar'[Date]   <= MAX (  ( 'Calendar'[Date]  ))
)))

AnzahlMitglieder = [SummeNeumitglied] - [SummeKuendigung]

这就是我的样子:(Neukunden:新客户,kündigungen:离开,aktuellemitglieder:客户数量)

图1 正确计算

图 2:也正确计算,但过滤器不起作用

标签: powerbidax

解决方案


感谢您添加一些带有更多解释的示例数据。如果我的要求正确,下面的解释步骤将帮助您解决我希望的问题。

假设:如果我的理解是正确的,您有 3 个包含 Date、new_customer 和 leave_customer 的表,它们的相关性如下图所示。

在此处输入图像描述

现在,我创建了一些 10 天的示例数据,以可视化您的需求/问题。希望下表中的累积计数是正确计算的(使用累积计算的基础知识)。

在此处输入图像描述

在这个阶段,您需要一个度量来计算基于计算>“cumulative_new_customer-cumulative_leaving_customer”的每行的当前客户数量,这对您来说不是一项艰巨的工作。

但是,当您使用日期切片器对数据进行切片时,您会遇到问题。如果您选择日期编号 5,即我的示例数据中的“2020 年 1 月 5 日”。您想要基于日期 1 月 1 日至 05 日的最终计数,但您只获得一个日期“2020 年 1 月 5 日”的计数。

如果上面的解释是正确的,我建议写 3 个单独的 Measure,如下面的这个答案所述。您可以查看我添加的下图中的输出,并与切片数据之前和之后进行比较。您可以看到“2020 年 1 月 5 日”的当前用户数在两种情况下都是 41(切片前和切片后)

在此处输入图像描述

现在,如果以上一切都符合您的期望,您可以使用以下 3 项书面措施。

1.

cumulative_new_customer = 
CALCULATE (
    COUNT(new_customer[unique_id]),
    FILTER (
        ALL ( 'Dates'[Date] ),
        'Dates'[Date] <= MAX ( 'Dates'[Date] )
    )
)

2.

cumulative_leaving_customer = 
CALCULATE (
    COUNT(leaving_customer[unique_id]),
    FILTER (
        ALL ( 'Dates'[Date] ),
        'Dates'[Date] <= MAX ( 'Dates'[Date] )
    )
)

3.

number_of_cutomer_today = [cumulative_new_customer] - [cumulative_leaving_customer]

希望以上细节对您有所帮助。


推荐阅读