我需要在MDX中创建以下结构的表(在SSRS报告中使用):
为此我有2个维度和一个度量:
在第一列中,我需要显示所有选项类型属性
在第二个所有值属性中,其中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]
它不会过滤结果。
答案 0 :(得分:2)
如果您可以接受稍微不同的列顺序,则可以在MDX中使用计算的度量来完成,该度量实际上是一个字符串(因为您希望在列中查看属性值列表)。这样可以避免在行中使用两次相同的属性:
WITH Member Measures.[Standard Value] AS
Generate(NonEmpty([Option].[Option Type].[Option Type].Members,
{([Standard].[IsStandard].&[Y],
Measures.[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定义的维度,则可以更改发送错误的标记。小组等级。