两个表。 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表达式才能使该措施起作用?
谢谢
答案 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中将其作为客户的最小日期进行检测。换句话说,如果您要使用日历表,建议您重新设计数据模型。