MDX计算成员第三参数

时间:2014-11-11 12:17:21

标签: mdx measure

我在自助式BI工具(Pyramid Analytics,如果有帮助)中工作,它允许使用MDX使用自定义成员。

我正在尝试根据在所选维度“当前订单日期”中选择的值,找到连接到不同维度的度量(与预测周关联的预测金额)。

链接成员函数是我想到的,并且偶然使用。在我之前工作的那个人为计算出的成员提出了这个查询:

<code>
    (
        LINKMEMBER
        ( 
            [Order Date].[Order Calendar].[!@Current Order Date@!].PARENT
            , [Forecast Date].[Order Calendar]
        )
        ,[Measures].[Forecast Amount]
        ,[Order Date].[Order Calendar].[All]
    )
</code>

我现在的任务是对此查询进行更多更改(不同的度量和维度等)。

我的问题是上面的整体查询中的第三个参数/参数,[订单日期]。[订单日历。[全部],(不是链接成员位,我知道它是如何工作的)。

我对伪英语中的上述陈述的解释是,&#34;对于由第一个参数(LINKMEMBER语句)生成的成员或成员集,返回相应的度量金额(预测金额)&#34;但是对于我的生活,我无法弄清楚第三个论点的作用以及它是否是多余的。该查询确实以其当前形式工作,因此无论我是否删除它,我都想知道我为什么要这样做。

我试着查看这是否与查询范围有关,但它没有包含SCOPE关键字,并且未在&#34;第三个参数&#34;上找到任何搜索结果。据我所知,这与子立方体等没有关系,但我很高兴能够得到纠正。

非常感谢任何我应该寻找的输入或指示。

(如果我错过了其他一些搜索条件,请道歉)

谢谢, 小号

编辑时添加了以便在测试FrankPI的答案时添加示例

谢谢FrankPI。花了一段时间来消化,但最终通过阅读你的评论并提出一个例子得到它。

如果我理解正确,没有第三个参数,那么由于前两个参数而返回的Measure会被当前行中出现的任何内容(如此)进行子设置(/切片)。如果两者之间存在关系,那就罚款了。

<code>
    with 
    member [measures].[x1] as
        (
            LINKMEMBER
            ( 
                [Order Date].[Order Calendar].[Trading Week].&[2014]&[47]
                , [Forecast Date].[Order Calendar]
            )
            ,
            [Measures].[Forecast Amount]
        )
    select 
    {
        [measures].[x1]
    }
    on 0,
    {
        [Forecast Date].[Order Calendar].[Trading Week].&[2014]&[47]
    }
    on 1
    from [Cube]
</code>

但是当下面发生(没有关系)时,除非建立了上下文,否则返回Null,如此

<code>
    with 
    member [measures].[y1] as
        sum
        (
            LINKMEMBER
            ( 
                [Order Date].[Order Calendar].currentmember
                , [Forecast Date].[Order Calendar]
            )
            ,
            [Measures].[Forecast Amount]
        )
    member [measures].[y2] as
        (
            LINKMEMBER
            ( 
                [Order Date].[Order Calendar].currentmember
                , [Forecast Date].[Order Calendar]
            )
            ,
            [Measures].[Forecast Amount]
            ,
            [Order Date].[Order Calendar].[All]
        )
    select 
    {
        [measures].[y1] // returns null
        ,
        [measures].[y2] // returns value
    }
    on 0,
    {
        [Order Date].[Order Calendar].[Trading Week].&[2014]&[47]
    }
    on 1
    from [Cube]
</code>

感谢您的回答!

1 个答案:

答案 0 :(得分:0)

第三个参数更改Order Calendar层次结构的上下文以使用所有订单日期,而不仅仅是当前订单日期。

LinkMember更改了计算发生的Forecast Date当前成员,但不会更改来自环境的任何Order Calendar currentMember(例如当前行/列,WHERE条件) )。