两个表。销售_行为&DateKey。于日期加入。
基于销售额的DateKey表动态:
DateKey = CALENDAR(MIN(Sales_Fact[Date]),MAX(Sales_Fact[Date]))
Sales 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天的总购买金额Sales表具有过去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表达式应该如何编写才能使该度量有效?
感谢
您可以计算每笔交易自第一次购买以来的天数,然后将天数为<=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是一个时间智能功能。此类函数通常在日历维度上操作,而不是在事实数据表上操作(正是因为维度具有连续的日期,而事实数据表通常没有(。在你的情况下,事情是复杂的,因为有两个日期而不是一个,所以对于你目前的工作方法,你需要有两个日历表,而不是一张(即"购买日历"one_answers"首次购买日历"(。更好的是,您可以重新设计您的销售事实表,使其只有一个日期("购买日期"(。然后,第一个购买日期可以在列中标记,也可以在DAX中检测为客户的最小日期。换句话说,如果您想使用日历表,我建议重新设计您的数据模型。