Power BI - 用于计算前 31 天销售额的 DAX 度量 - 'DATEADD' 需要连续选择

Power BI - DAX measure to calculate sales first 31 days - 'DATEADD' expects a contiguous selection

两个 table。 Sales_Fact & 日期键。加入日期。

DateKey table 基于销售额的动态:

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

销售额 Table 具有以下结构。

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 天的总购买量。 销售额 table 有过去 2 年的连续日期,否'purchase date' 失踪。

以下测量 returns 'DATEADD' 需要连续选择...错误

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

如何编写 DAX 表达式才能使此度量生效?

谢谢

您可以计算每笔交易自首次购买以来的天数,然后将天数<=31的交易加起来:

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

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

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

措施"First 31 days"那么就很简单了:

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

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