2

我正在尝试添加一个计算BIDS 2008R2DaysSinceLastOrder考虑到唯一用户的平均值(以及他们的每个平均 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度量是在期间预先计算的ETLSUM作为多维数据集中的聚合类型)
  • #UniqueCustomers 显然是多维数据集中的一个度量(在这种情况下会有 3 个),这不是我想要在上面使用的
  • daysSinceLastOrder值表示这是该客户的第一个订单
4

0 回答 0