Power BI-DAX测量以计算前31天的销售量-'DATEADD'期望连续的选择

时间:2018-11-03 14:28:17

标签: powerbi dax calculated-columns dateadd

两个表。 Sales_Fact和DateKey。已加入日期。

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表达式才能使该措施起作用?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以计算自每笔交易首次购买以来的天数,然后汇总天数为<= 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]

那么“前31天”的度量非常简单:

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

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