0

我有一个 MRR 数据表,其中只有订阅开始日期和结束日期(如果子仍然处于活动状态,则结束日期为空白)。

考虑到这一点,我如何通过 DAX 计算某个客户的每月正确 MRR 总计,例如,该客户在 1 月至 3 月期间处于活动状态,但其记录现在表明他们已取消。我想在 1 月、2 月和 3 月包括该客户的经常性订阅费,但不包括 4 月至 8 月。和所有作为一个运行总数?

样本数据:

客户ID 子开始日期 结束日期 每月金额 地位
客户 A 2021 年 1 月 1 日 2021 年 3 月 1 日 5 美元 取消
客户 B 2021 年 2 月 1 日 5 美元 积极的
客户 C 2021 年 3 月 1 日 10 美元 积极的
客户 D 2021 年 1 月 1 日 2021 年 8 月 1 日 20 美元 取消
客户 E 2021 年 4 月 1 日 2021 年 6 月 1 日 50 美元 取消
客户 F 2021 年 5 月 1 日 5 美元 积极的
客户 G 2021 年 2 月 1 日 2021 年 7 月 1 日 10 美元 取消

因此,例如,在 2 月,MRR 总额为 30 美元(客户 A、B、D),而 4 月为 95 美元(客户 B、C、D、E 和 G)。

例如,一旦我们到了 8 月,总金额将是 40 美元(客户 B、C、D - Ds 上个月的活动,以及客户 F)。

任何关于如何通过新列或 DAX 度量来实现这一点的想法都将不胜感激 - 至于我的生活,我找不到这样的例子,我认为其他人的 MRR 数据是这样设置的。

4

2 回答 2

0

您可以通过有一个日历表和以下措施来实现运行总计

RunningTotal =
VAR _1 =
    ADDCOLUMNS (
        GENERATEALL (
            t,
            DATESBETWEEN (
                'Calendar'[Calendar_Date],
                t[Sub Start Date],
                IF ( t[End Date] = BLANK (), TODAY (), t[End Date] )
            )
        ),
        "test", IF ( DAY ( [Calendar_Date] ) = 1, [Monthly Amount], 0 )
    )
VAR _00 =
    FILTER (
        GENERATE (
            _1,
            SELECTCOLUMNS (
                'Calendar',
                "dt", 'Calendar'[Calendar_Date] + 0,
                "yr", 'Calendar'[Calendar_Year] + 0,
                "mo", 'Calendar'[Calendar_Month] + 0,
                "fd", 'Calendar'[First_Day_in_Month],
                "lt", 'Calendar'[Last_Day_in_Month]
            )
        ),
        [Calendar_Date] = [dt]
    )
VAR _000 =
    ADDCOLUMNS (
        ADDCOLUMNS (
            _00,
            "ld",
                MAXX (
                    FILTER ( _00, EARLIER ( [yr] ) = [yr] && EARLIER ( [mo] ) = [mo] ),
                    [dt]
                )
        ),
        "rev", IF ( [ld] = [lt], [Calendar_Date], [lt] )
    )
VAR _2 =
    ADDCOLUMNS (
        _000,
        "test2", SUMX ( FILTER ( _1, EARLIER ( [Calendar_Date] ) >= [Calendar_Date] ), [test] )
    )
RETURN
    CALCULATE (
        MAXX ( FILTER ( _2, [rev] = MAX ( 'Calendar'[Calendar_Date] ) ), [test2] )
    )

解决方案

计算取决于具有最小以下结构的日历表

日历_日期 公历年 日历_月 First_Day_in_Month Last_Day_in_Month
2021-01-01 2021 1 2021-01-01 2021-01-31
2021-01-02 2021 1 2021-01-01 2021-01-31
2021-01-03 2021 1 2021-01-01 2021-01-31
于 2021-08-22T06:27:18.427 回答
0

如果您有一个日历表连接到示例中的这个表,那么我们可以使用这种方法。这里我们使用 GENERATE 为每一天创建一个虚拟表(基于范围开始/结束):

MRR = 
var temp = SELECTCOLUMNS( GENERATE(VALUES('Calendar'[Date]), CALCULATETABLE(Sheet1, FILTER(ALL(Sheet1), [Date]>= Sheet1[Sub Start Date] && [Date] <= if (ISBLANK(Sheet1[End Date]), TODAY(), Sheet1[End Date]) )))
, "Day", [Date], "Amount", [Monthly Amount])
return
CALCULATE(sumx(temp, [Amount]))

在此处输入图像描述

于 2021-08-21T19:55:34.380 回答