2011-12-22 18 views
1

2つの日付がInvoice DateAccounting Current Dateのファクトテーブルがあります。要求された収益値を取得するには、これらの2つの日付の組み合わせを使用する必要があります。MDX - 別の日付ディメンションから1つの日付ディメンションを計算する

(注:私はそれをよりよく知っているので、私はSQLクエリを書いています)

SELECT Revenue 
FROM 
Fact_Revenue 
WHERE 
Invoice_Date <= '2011-10-22' 
and AccountingCurrent >= '2011-01' 
and AccountingCurrent <= '2011-10' 

の収入に加えて、この事実私はYTD収益が必要な場合たとえば、私はこのようにそれを選択する必要がありますテーブルには他にも必要な情報がありますが、この他のデータを計算するには私はAccounting Current Dateは必要ありません。ですから、私の考えは、メインのMDXクエリーで1つの日付(Invoice Date)を使用することです(できるだけ多くのデータを1つのクエリーで取得できるようにします)。そして、計算されたメンバーを使用したいと思っています。 Accounting Current Dateを選択してInvoice Dateと関連付けます。この場合

例えば

SELECT {[Measure].[RevenueYTD], 
[Measure].[RevenueMTD], 
[Measure].[NumberOfInvoices], 
[Measure].[NumberOfPolicies]} 
ON COLUMNS, 
{[People].Members} ON ROWS 
FROM [Cube] 
WHERE 
[Invoice Date].[Date Hierarchy].[Date].&[2011-10-22] 

Accounting Current DateInvoice Dateに限定される[Measure].[RevenueYTD][Measure].[RevenueMTD]必要はクエリからの日付よりも低くなければなりません。

:一方で、私は、このような何か(これは、よりアルゴリズムのようなものです)を行う必要があります Accounting Current Date

計算メンバークエリーのinvolvemenetなしparticual請求書の日付(何かMTD日、)のため[Measure].[NumberOfInvoices][Measure].[NumberOfPolicies]を必要とします

ROUND(
    SUM(
     YTD([Accounting Current Date].[Date Hierarchy].CurrentMember), 
     [Measures].[Revenue] 
     ), 
    2) 
WHERE [Invoice Current Date].[Date Hierarchy] < [Invoice Current Date].[Date Hierarchy].CurrentMember 
+0

ご理解いただけますか? – ic3

+0

私は自分の質問を編集しました。ありがとう –

答えて

1

MDXでは、ある次元から別の次元へ移動することは自明ではありません。理論上、次元は独立しているため、標準言語にはこれを行うための関数がありません。 StrToMember MDX functionを使用することはできますが、それは遅く、少し奇妙です。あなたのフィルタの場合

、最初の1で始まるのを聞かせて:MDXで

Invoice_Date <= '2011-10-22' 

我々は表現にマッチするメンバーとのセットを作成する必要があります。

NULL:[Invoice Date].[Date Hierarchy].[Date].&[2011-10-22] 

他のフィルタを推測するのは簡単です::これは、レンジの集合演算子を使用して行うことができ

AccountingCurrent >= '2011-01' and AccountingCurrent <= '2011-10' 

MDX版:それはあなたが必要な場合Filter MDX functionを使用しても可能です

[Accounting Date].[Date Hierarchy].[Date].&[2011-01-31]:[Accounting Date].[Date Hierarchy].[Date].&[2011-10-30] 

異なるタイプのフィルタ

ここで、これらの部分を取り出してクエリを作成する必要があります。 1つの可能な解決策は、フィルタを適用したくないときに、設定されたスライサーを使用して値を上書きすることです:

WITH 
    // here we're changing the 'selection' from the where clause 
    MEMBER [Measure].[NumberOfInvoices II] AS ([Accounting Date].[Date Hierarchy].defaultmember,[Measure].[NumberOfInvoices]) 
SELECT 
    .. axis here [Measure].[RevenueYTD] will be applying the filters defined in the where clause 
FROM MyCube 
WHERE {[Accounting Date].[Date Hierarchy].[Date].&[2011-01-31]:[Accounting Date].[Date Hierarchy].[Date].&[2011-10-30]} 
+0

このクエリを計算メンバーまたはそのスタンドアロンクエリに使用できますか?私が必要とするのは、これをCalculatedメンバーに適用することです。これが計算されたメンバーのためのものである場合は、このクエリをどこに置くのですか?どこでも私はそれを使用することはできませんエラーをスローしようとする...あなたの返信いただきありがとうございます! –

+0

どのOLAPサーバーを使用していますか? – ic3

+0

計算されたメンバーは少し厄介です。私に少し時間を与えてください;-) – ic3

関連する問題