1

我有一个有 2 个日期Invoice DateAccounting Current Date. 为了获得请求的收入值,我需要使用这两个日期的组合。例如,如果我需要 YTD 收入,我需要像这样选择它:

(注:我写的是SQL查询,因为我比较熟悉)

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

除了收入之外,这个事实表还有我还需要的其他信息,但是为了计算我不需要的其他数据Accounting Current DateInvoice Date所以我的想法是在主 MDX 查询中只使用 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]and[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
4

1 回答 1

1

在 MDX 中,从一个维度导航到另一个维度并非易事。理论上维度是独立的,因此标准语言缺少执行此操作的功能。您可以使用StrToMember MDX 函数,但它很慢而且有点奇怪。

对于您的过滤器,让我们从第一个开始:

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 功能。

现在我们需要整理碎片并构建查询。一种可能的解决方案是使用设置切片器并在您不希望应用过滤器时覆盖值:

 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]}
于 2011-12-23T11:24:59.040 回答