如何编写MDX查询以返回具有ID和名称的成员?

时间:2013-01-09 04:34:41

标签: mdx mondrian

我尝试编写一个MDX查询,该查询返回的结果包括成员列表,其ID和度量值。在这个例子中,我有一个事实表来评估调查的价值。每个评级值都有一个具有Id和Name列的Question维度的外键。我想要的信息是每个问题的ID和名称以及总平均评分。到目前为止,我可以获得身份和评级,或者姓名和评级,但我不确定如何获得这两者。

以下是我尝试的查询:

SELECT
NON EMPTY {[Measures].[Rating]} ON COLUMNS,
NON EMPTY {[Question].[Question Id].Members, 
           [Question].[Question Caption].Members} ON ROWS
FROM [Ratings]

它几乎可以工作,除了我得到重复的值,这是一个示例结果:

[Question].[10]                             3.5
[Question].[11]                             4.2
[Question].[12]                             4.9
[Question].[13]                             4.0
[Question].[10].[blar abc]                  3.5
[Question].[11].[blar def]                  4.2
[Question].[12].[blarrr]                    4.9
[Question].[13].[something else]            4.2

您可以看到问题10显示两次,评级为3.5,一次没有名称,一次没有。

我想用MDX做什么?我错过了什么?这是由蒙德里安执行的。

1 个答案:

答案 0 :(得分:1)

这取决于如何设置问题维度的层次结构。我将在这里假设层次结构是

All Questions
    > Id 
        > Name

(这可能不是设置此层次结构的最佳方式,因为Caption只是给定Question成员的属性,而不是级别,但我离题了)。

你做错了是你正在创建一个包含来自两个级别(Id和Caption)的所有成员的集合。通常情况下,较高级别的成员(例如[问题]。[13])会有累计测量值,但由于每个Id只有一个标题,因此两个级别的平均评分相同。

一种解决方案是不使用Id级别,并从Caption成员的UniqueName中提取Id。

SELECT
NON EMPTY {[Measures].[Rating]} ON COLUMNS,
NON EMPTY {[Question].[Question Caption].Members} ON ROWS
FROM [Ratings]

如果您确实希望将Id作为结果中的单元格,则可以使用“计算成员”来保存该值:

WITH MEMBER [Measures].[QuestionId] AS Iif(
        Not IsEmpty([Measures].[Rating]), 
        [Question].CurrentMember.Parent.Name, 
        NULL
    )
SELECT
NON EMPTY {[Measures].[QuestionId], [Measures].[Rating]} ON COLUMNS,
NON EMPTY {[Question].[Question Caption].Members} ON ROWS
FROM [Ratings]

Iif函数确保在没有评级时我们有一个NULL成员,否则无论如何你都会得到一行。


编辑: 您可以使用All Questions > Question的单级层次结构(如果您有任何其他分析上有用的问题分类,则可以在其间添加其他级别)。

问题级别代表一个问题实例,所以你可以做很多事情:

  1. 将此级别的“唯一标识符”(成员密钥,由模式中的column值给出)作为问题ID。
  2. 制作“用户标识符”(由架构中的nameColumn值指定)问题标题。
  3. 您可以将层次结构中没有意义的其他有用属性添加到此级别(通过架构中的Property标记)。
  4. 然后,您可以按标题[Question].[the caption here]选择问题,您可以按ID选择[Question].&[Id here]。如果要检索属性,可以这样做:

    SELECT
    NON EMPTY {[Measures].[Rating]} ON COLUMNS,
    NON EMPTY {[Question].[Question].Members} 
        DIMENSION PROPERTIES [Question].Key, [Question].[other property name] ON ROWS
    FROM [Ratings]
    

    在生成的CellSet中将属性添加为元数据。