【问题标题】:Power BI - DAX measure to calculate sales first 31 days - 'DATEADD' expects a contiguous selectionPower BI - 用于计算前 31 天销售额的 DAX 度量 - 'DATEADD' 期望连续选择
【发布时间】:2018-11-03 14:28:17
【问题描述】:

两张桌子。 Sales_Fact 和 DateKey。加入日期。

基于Sales的DateKey表动态:

DateKey = CALENDAR(MIN(Sales_Fact[Date]),MAX(Sales_Fact[Date]))    

销售表具有以下结构。

Customer PurchaseDate  FirstTimePurchaseDate  Amount
A        2018/04/11       2018/02/26           500
b        2018/04/11       2018/03/01           300
c        2018/04/11       2018/04/11           400
A        2018/04/12       2018/02/26           100
b        2018/04/12       2018/03/01           200
c        2018/04/12       2018/04/11           400

我想计算每位客户首次购买后 31 天的总购买金额。 销售表有过去 2 年的连续日期,没有“购买日期”缺失。

以下度量返回“DATEADD”期望连续选择...错误

First 31 days  = CALCULATE(SUM(Sales_Fact[Amount]),DATESBETWEEN(Sales_Fact[PurchaseDate],MIN(Sales_Fact[FirstTimePurchaseDate]),DATEADD(Sales_Fact[PurchaseDate],31,DAY)))

应如何编写 DAX 表达式才能使此度量起作用?

谢谢

【问题讨论】:

    标签: powerbi dax calculated-columns dateadd


    【解决方案1】:

    您可以计算每笔交易自首次购买以来的天数,然后将天数为

    =
    SUMX (
        FILTER (
            Sales_Fact,
            Sales_Fact[PurchaseDate] - Sales_Fact[FirstTimePurchaseDate] <= 31
        ),
        Sales_Fact[Amount]
    )
    

    同样的结果可以通过创建一个计算列来实现自首次购买以来的实际销售天数:

    Days Since First Purchase = Sales_Fact[PurchaseDate] - Sales_Fact[FirstTimePurchaseDate]
    

    “前 31 天”的衡量标准非常简单:

    = CALCULATE ( SUM(Sales_Fact[Amount]), Sales_Fact[Days Since First Purchase] <= 31)
    

    关于您遇到的错误 - 这是一个不同的问题。 DATEADD 是一个时间智能函数。此类函数通常在日历维度上运行,而不是在事实表上运行(正是因为维度具有连续的日期,而事实表通常没有)。在您的情况下,由于有 2 个日期而不是一个日期,事情变得复杂了,因此对于您当前的工作方法,您需要有 2 个日历表,而不是一个(即“购买日历”和“第一次购买日历”)。更好的是,您可以重新设计您的销售事实表,使其只有一个日期(“购买日期”)。然后可以在列中标记第一个购买日期,或者在 DAX 中将其检测为客户的最小日期。换句话说,如果你想使用日历表,我建议重新设计你的数据模型。

    【讨论】:

    • 非常感谢您的详尽回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多