2017-09-08 5 views
1

20年前のSQLプロ、MDXに新しい。MDX複数のフィルタ

発売後30,60,90日などの製品の売上を得るための対策を作成しようとしていますが、不完全な期間を除外したいと考えています。ここでは、SQLのようになります。

select ProductName, sum(sales) '60DaySales' 
from dimProduct p join factSales s on p.productkey = s.productkey 
    join dimCalendar c on s.orderDateKey = c.CalendarKey 
    where datediff(dd,p.LaunchDate,c.Date) between 31 and 62 
    and exists (select 1 from sales etc... where date >= 62 days) 

基本的に私が唯一のも62日先以降の販売を持っている製品のための「60DaySales」を示したいと思います。

私は私の時間を取得し、このMDXあります

sum(
    filter(
    [Sales].[Days Since Launch].members 
    ,sales.[Days Since Launch].membervalue > 30 AND 
     sales.[Days Since Launch].membervalue < 63 
) 
,[Measures].[SalesBase] 
) 

を、私は62日を超えていない販売して項目を除外するかどうかはわかりません。私はiif(exist ..)とnonemptyのいくつかの組み合わせを試しましたが、運はありません...

答えて

0

私は計算された尺度ではなく余分の列を追加します。私は似たような仕事をしていました(30,60,90日間の売上、顧客の最初の販売日から)。 30日、すべての製品ごとの売上などの

sales30 = iif(dateadd(day,30,p.LaunchDate) >= c.Date, sales, null), 
sales60 = iif(dateadd(day,60,p.LaunchDate) >= c.Date, sales, null), 
sales90 = iif(dateadd(day,90,p.LaunchDate) >= c.Date, sales, null) 

タスクMDX経由でなんとかですが、彼らは、大きな寸法のパフォーマンスキラーです:最良の方法はあなたの販売対策表に列を追加することです。 SQL Serverは、その並行性のためにより優れた処理を行います。一方、MDXはこれらのような重い計算では良くありません。だから私はコードを提供していない。

+0

洞察のおかげで、私はそれをやると信じています。私はMDXで始まったばかりなので、以前と同じように考えていましたが、それはちょっとしたコップアウトだと思っていました。しかし、意味がないように思えます。 – Ttro

関連する問題