我正在尝试在BIDS 2008R2
中添加计算:平均DaysSinceLastOrder
考虑到唯一身份用户(以及他们平均每天的DaysSinceLastOrder次数)
例如,如果我的订单表有这些行:
customerID daysSinceLastOrder
1 null
1 1
1 3
2 6
3 null
然后我想要自上次订单后的((1 + 3)/2 + 6) / 2 = 4
平均天数
用语言:
对于每个用户,计算该用户daysSinceLastOrder
的平均值
然后取这些值的平均值
但忽略值为daysSinceLastOrder
的订单
显然这个基本计算不起作用,因为它忽略了分子中客户的唯一性:
CREATE MEMBER CURRENTCUBE.[Measures].[Avg Days Since Last Order]
AS [Measures].[daysSinceLastOrder] / [Measures].[#UniqueCustomers]
SQL中的将是:
select AVG(t.avgDaysSinceLastOrder) as avgDaysSinceLastOrder
from (
select customerID, AVG(daysSinceLastOrder) as avgDaysSinceLastOrder
from orders
group by customerID
) t
那么我怎样才能在MDX
中完成这项工作?
更新:
实际上我想要这样的东西:
CREATE MEMBER CURRENTCUBE.[Measures].[Avg Days Since Last Order]
AS sum(avg_daysSinceLastOrder_per_customer) / [Measures].[#Unique Customers]
我尝试了以下不起作用,它只是平均所有内容,而不是基于每个客户:
CREATE MEMBER CURRENTCUBE.[Measures].[Avg Days Since Last Order]
AS sum([Customers].[User Id],
sum([Customers].[User Id], [Measures].[Days Since Last Order]))
/ [Measures].[#Unique Customers]
备注:
daysSinceLastOrder
度量是在ETL
期间预先计算的(SUM
为多维数据集中的聚合类型)daysSinceLastOrder
值表示该客户的第一个订单