【问题标题】:How do I get dimension properties in MDX如何在 MDX 中获取维度属性
【发布时间】:2013-10-24 16:20:56
【问题描述】:

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

【问题讨论】:

    标签: mdx mondrian


    【解决方案1】:

    您可以使用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 并且不会生成错误。但是,我不确定蒙德里安是如何处理这个问题的。

    【讨论】:

    • 我正在使用 Mondrian 和 olap4j。当我在 Mondrian JPivot 上尝试时,您的查询似乎有效。但是当我通过 olap4j 尝试相同的查询时,我得到 java.lang.ClassCastException: mondrian.mdx.MemberExpr cannot be cast to mondrian.mdx.UnresolvedFunCall
    • 我在 Mondrian 上为此 jira.pentaho.com/browse/MONDRIAN-1768 创建了一个 JIRA 问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多