2

に計算を追加しようとしていますBIDS 2008R2:DaysSinceLastOrderユニーク ユーザー (およびそれぞれの平均 DaysSinceLastOrder 時間) を考慮した平均

たとえば、orders テーブルに次の行があるとします。

customerID  daysSinceLastOrder
1           null
1           1
1           3
2           6
3           null

次に((1 + 3)/2 + 6) / 2 = 4、最後の注文からの平均日数 が必要です

つまり
、各ユーザーについて、そのユーザーのdaysSinceLastOrder
平均を計算し、それらの値の平均をとりますが、値が
null の注文は無視します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]

:

  • daysSinceLastOrderETLメジャーは(SUMキューブの集計タイプとして) 中に事前計算されます。
  • #UniqueCustomers は明らかにキューブ内のメジャー (この場合は 3 になります) であり、上記で使用したいものとはまったく異なります
  • nulldaysSinceLastOrder値は、その顧客の最初の注文であることを意味します
4

0 に答える 0