MDX - 是否可以在一行中包含两个不相关的维度成员?

时间:2014-07-15 13:15:33

标签: mdx

我需要在MDX中创建以下结构的表(在SSRS报告中使用):

enter image description here

为此我有2个维度和一个度量:

  1. 选项维度,包含选项类型和选项值属性
  2. 标准尺寸,带IsStandard标志
  3. 价格衡量
  4. 在第一列中,我需要显示所有选项类型属性

    在第二个所有值属性中,其中IsStandard标志设置为[Y],

    用户在参数和

    中选择的第三个值

    用户选择的组件的第四个价格。

    是否可以在单个MDX中执行上述操作?或者我最好创建2个不同的查询并为它们创建2个表?

    编辑:由于我的更新不符合评论,我将在此处添加一些想法。 下面的答案中的EXISTS函数不会过滤结果集,我没有得到标准值,但所有可能的值都连接起来。当我发出以下代码时:

    SELECT 
    [Measures].[Price] ON 0,
    NON EMPTY [Option].[Option Type].children
    *
    [Option].[Option Value].children ON 1
    FROM [Cube]
    WHERE
    (
    [Standard].[IsStandard].&[Y],
    [Configurations].[Configuration].&[conf1]
    )
    

    它会正确返回默认值,但如果我使用

    SELECT 
    [Measures].[Price] ON 0,
    [Option].[Option Type].children
    *
    EXISTS(
    [Option].[Option Value].[Option Value].members
    ,([Standard].[IsStandard].&[Y],[Configurations].[Configuration].&[conf1])
    ) ON 1
    FROM [Cube]
    

    它不会过滤结果。

2 个答案:

答案 0 :(得分:2)

如果您可以接受稍微不同的列顺序,则可以在MDX中使用计算的度量来完成,该度量实际上是一个字符串(因为您希望在列中查看属性值列表)。这样可以避免在行中使用两次相同的属性:

WITH Member Measures.[Standard Value] AS
     Generate(NonEmpty([Option].[Option Type].[Option Type].Members,
                       {([Standard].[IsStandard].&[Y],
                         Measure‌​s.[Price]
                       )}
                      ),
              [Option].[Option value].CurrentMember.Name,
              ", "
             )
SELECT {  Measures.[Standard Value], Measures.[Price] }
       ON COLUMNS,

       NON EMPTY
       [Option].[Option Type].[Option Type].Members
       *
       { @chosenValues } // the parameters value should be a comma separated list like "[Option].[Option value].[AMD], [Option].[Option value].[INTEL]"
       ON ROWS
  FROM [Your Cube]
 WHERE [Configurations].[Configuration].&[conf1]

您可以将列表分隔符(Generate函数的最后一个参数)调整为您喜欢的任何内容。

如果有多个与维度[Option][Standard][Configurations]相关的度量值组,则应添加要用于的度量值组的名称将关系确定为Exists的附加最后一个参数,以便您而不是引擎确定该关系。只需在单引号或双引号中使用度量值组。

答案 1 :(得分:1)

是的,尺寸将被忽略。这假设您已经在同一架构/多维数据集中。

注意,根据OLAP服务器的使用情况,如果您使用未在Measure定义的维度,则可以更改发送错误的标记。小组等级。