2011-12-22 70 views
1

我有一個事實表,它有兩個日期Invoice DateAccounting Current Date。爲了獲得請求的收入價值,我需要結合使用這兩個日期。例如,如果我需要YTD收入,我需要選擇這樣的:MDX - 從另一個日期維度計算一個日期維度

(注:我寫SQL查詢,因爲我比較熟悉它)

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

除了收入,這一事實表格還有其他我需要的信息,但是爲了計算這些其他數據,我不需要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] 

在這種情況下,[Measure].[RevenueYTD][Measure].[RevenueMTD]需要由Accounting Current DateInvoice Date限於必須大於從查詢的時間低。在另一方面,我需要[Measure].[NumberOfInvoices][Measure].[NumberOfPolicies]爲particual發票日期(或MTD日期,等等),但沒有Accounting Current Date

計算成員的查詢應該做這樣的事情(這更像是算法)的involvemenet:

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 2011-12-22 14:40:23

+0

我編輯了我的問題。謝謝 – 2011-12-22 15:39:38

回答

1

從一個維度導航到另一個在MDX中並不重要。理論上,維度是獨立的,所以標準語言缺少這樣做的功能。您可以使用StrToMember MDX function,但速度很慢並且有點奇怪。

爲了您的過濾器,讓我們開始第一個:

Invoice_Date <= '2011-10-22' 

在MDX我們必須建立一套與表達式匹配的成員。

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

其他過濾器很容易猜測:這可以通過使用範圍設置操作完成

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

MDX版本:

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

也有可能使用Filter MDX function如果您需要不同類型的過濾器。

現在我們需要把這些部分和構建查詢。一種可能的解決方案是使用設置切片機並在不想應用濾鏡時覆蓋這些值:

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

此查詢可以用於計算成員還是獨立查詢?我需要的是將其應用於計算成員。如果這是打算用於計算成員,那麼我在哪裏放置此查詢?我嘗試的任何地方都會拋出WITH WITH無法使用的錯誤......感謝您的回覆! – 2011-12-23 11:54:47

+0

您使用的是什麼OLAP服務器? – ic3 2011-12-23 17:33:17

+0

作爲一個計算出來的成員是有點棘手..給我一點時間;-) – ic3 2011-12-23 17:34:03