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,我建议您重新设计您的数据模型。
两个 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,我建议您重新设计您的数据模型。