2012-03-19 21 views
1

計算されたメンバーをキューブに作成して、各顧客の請求書の合計金額を60日以下に表示する必要があります。SSAS 2008の計算されたメンバー式

私は現在の日付から請求書の日付を差し引いた日数が60日以下の場合は、各顧客のすべての請求書の合計を計算することができます。

計算されたメンバーの表現にこれをどのように実装するのかを私は知らない。私はこれを行っているが、私はSELECTのエラーを取得し、私は知らない理由:

CREATE MEMBER CURRENTCUBE.[Measures].[Importe60] 
AS Sum([Measures].[Importe de la factura]) 

SELECT [Measures].[Importe60] ON COLUMNS, 
[Clientes].[Nombre].Members ON ROWS 
FROM CuboVentas 
WHERE DateDiff(dd,[Facturas].[Fecha Factura],getDate())<=60, 

VISIBLE = 1, ASSOCIATED_MEASURE_GROUP = 'Facturas clientes'; 

誰もが私が間違ってやっている知っていますか?

答えて

1

問題はWHERE句にあります。 MDXでは、WHERE句をキューブ空間をフィルタリングする手段として使用する必要があります。 SELECT句のすべては、残りの「サブキューブ」に基づいています。

また、計算されたメンバーは必要ありません。この場合、SUM()関数は冗長です([Measures] [Importe de la factura]で指定された集計関数がSUMであると仮定します)。

は、ここでは上記の持っているフォーマットに近いクエリを記述するための一つの方法... WHERE句は、[受注日]の次元に沿ってセットを指定する方法

SELECT 
    { 
     [Measures].[<<measure>>] 
    } ON 0, 
    { 
     [Business Unit].[Division].[Division].Members 
    } ON 1 
FROM 
    [<<cube>>] 
WHERE 
    {StrToMember("[Order Date].[Date Key].[" + Format(now(), "yyyyMMdd") + "]").Lag(59) 
    : 
    StrToMember("[Order Date].[Date Key].[" + Format(now(), "yyyyMMdd") + "]")} 

お知らせです。これは基本的には、すべてのディメンションのキューブ全体のスペースを指定します...指定したいセットの日付の次元を除いて "

また、次のようなクエリを書くと、ビット何が起こっているか理解しやすい...

WITH 
SET [Past 60 days] AS 
    StrToMember("[Order Date].[Date Key].[" + Format(now(), "yyyyMMdd") + "]").Lag(59) 
    : 
    StrToMember("[Order Date].[Date Key].[" + Format(now(), "yyyyMMdd") + "]") 
MEMBER [Measures].[Total Sales Past 60 days] AS 
    SUM(
     [Past 60 days] 
     ,[Measures].[<<measure>>] 
    ) 
SELECT 
    { 
     [Measures].[Total Sales Past 60 days] 
    } ON 0, 
    { 
     [Business Unit].[Division].[Division].Members 
    } ON 1 
FROM 
    [<<cube>>] 

注:datekeyはYYYYMMDD形式であるため、「StrToMemberは()」式は私のキューブで働くあなたがかもしれないので、あなたは、異なるフォーマットであってもよいです。それを微調整する必要があります。

関連する問題