我有一个包含2个日期Invoice Date
和Accounting Current Date
的事实表。为了获得请求的收入值,我需要使用这两个日期的组合。例如,如果我需要YTD收入,我需要选择它:
(注意:我正在编写SQL查询,因为我对它更熟悉)
SELECT Revenue
FROM
Fact_Revenue
WHERE
Invoice_Date <= '2011-10-22'
and AccountingCurrent >= '2011-01'
and AccountingCurrent <= '2011-10'
除了Revenue,这个事实表还有我需要的其他信息,但是为了计算这些其他数据,我不需要Accounting Current Date
。所以我的想法是在主MDX查询中只使用1个日期(Invoice Date
)(这样我可以尽可能多地使用1个查询获取数据)并计算Revenue我想使用Calculated Member并在那里我想将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 Date
限制,Invoice Date
必须低于查询日期。另一方面,我需要[Measure].[NumberOfInvoices]
和[Measure].[NumberOfPolicies]
作为特定发票日期(或MTD日期,无论如何),但不涉及Accounting Current Date
计算成员查询应该做这样的事情(这更像算法):
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 :(得分: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。
现在我们需要接下来并构建查询。一种可能的解决方案是使用set slicer并在不希望应用过滤器时覆盖值:
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]}