2011-12-22 118 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