其中子句使用其他维度值

时间:2015-12-01 20:57:01

标签: ssas mdx

我正在尝试使用where子句在我的多维数据集中创建一个计算成员,但无法确定如何获得正确的结果。

我使用以下代码创建了一个计算成员“Outlook”,仅显示预测值。

CREATE MEMBER CURRENTCUBE.[Measures].[Outlook]
 AS SUM(([Source Profile].[Source Profile Hierarchy].CurrentMember,
         [Source Profile].[Profile Level01].&[Outlook]),
        [Measures].[USD Amount]), 
FORMAT_STRING = "#,##0;(#,##0)", 
VISIBLE = 1 ,  DISPLAY_FOLDER = 'USD' ,  ASSOCIATED_MEASURE_GROUP = 'CARS'; 

Cube Result

现在我想基于另一个隐藏维度“Current_Month”动态过滤结果。此维度始终具有当前财务期间值以及相应的展望概要

Year_Month  Outlook_Profile
2015010     10 + 2

预期结果应为“Outlook”度量,显示基于Current_Month维度的值,即“10 + 2”,其余值应为0

Expected result

为了解释SQL术语中的要求,我想在MDX中实现以下目标

Where Fact.Source_Profile=Dimension.Source_Profile

而不是

Where Fact.Source_Profile='10 + 2'

我不确定如何在Where子句中或通过其他方式实现此目的。我可以看到硬编码值的例子,比如年份。& [2015],但没有看到使用动态值。

1 个答案:

答案 0 :(得分:0)

我自己找到了一个解决方案,并考虑分享相同的解决方案。使用StrToMember函数将隐藏维度的成员作为变量传递给此处。

CREATE MEMBER CURRENTCUBE.[Measures].[Outlook]
 AS (
        Sum
            (
                (
                    [Source Profile].[Source Profile Hierarchy].CurrentMember,
                    strtomember("[Source Profile].[Source Name].&[" + [Outlook Profile].[Outlook Profile].&[1].Member_Caption + "]")
                )
            ,[Measures].[USD Amount]
        )
), 
FORMAT_STRING = "#,##0;(#,##0)", 
VISIBLE = 1 ,  DISPLAY_FOLDER = 'USD' ,  ASSOCIATED_MEASURE_GROUP = 'CARS'  ;