0

这是一个初学者的问题。在 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 中的属性吗?

4

1 回答 1

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])

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

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

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

于 2013-10-24T19:24:21.477 回答