如何在MDX中获取维度属性

时间:2013-10-24 16:20:56

标签: mdx mondrian

这是一个初学者问题。在MDX查询中,如何返回维度属性?我找到的唯一方法是使用WITH MEMBER在列维上添加此别名。

WITH
MEMBER [Measures].[User Email] as [User].CurrentMember.Properties("Email")
SELECT {
    [Measures].[User Email],
    [Measures].[Total Fees Value]
} ON COLUMNS,
NON EMPTY {
    CrossJoin([Order].Children, [User].Children) 
} ON ROWS
FROM [LineItemFact]
WHERE ([DateOfSalePst.Days].[2013])

这看起来有点笨重。如果我想通过在行轴中添加([Order].[All], [User].[All])来显示总计,则会出现问题。它将尝试计算所有列的总和,并将返回User Email中的异常,因为它自然无法计算电子邮件字符串的总和。

在MDX中获取属性是否有更好的方法?

1 个答案:

答案 0 :(得分:2)

您可以使用DIMENSION PROPERTIES

返回属性
SELECT {
    [Measures].[Total Fees Value]
} ON COLUMNS,
NON EMPTY {
    CrossJoin([Order].Children, [User].Children) 
}

DIMENSION PROPERTIES [User].[Email]

 ON ROWS
FROM [LineItemFact]
WHERE ([DateOfSalePst.Days].[2013])

如何访问这些属性取决于用于访问属性的客户端工具。 E. g。在SQL Server Management Studio中,您可以双击行标题单元格以查看它们,Excel数据透视表将它们显示为工具提示,据我所知,OLAP4J还将它们作为行轴成员的属性提供。

但是像Reporting Services这样的工具不允许以这种方式访问​​属性,因此对于这些,您在问题中定义的解决方法 - 定义显示它们的计算成员 - 是访问它们的唯一方法。

关于聚合这些内容,只要该属性不可用,Analysis Services就会返回NULL并且不会生成错误。但是,我不确定蒙德里安是如何处理这个问题的。