1

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

这是我尝试过的查询:

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 做些什么吗?我错过了什么?这是由蒙德里安执行的。

4

1 回答 1

1

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

All Questions
    > Id 
        > Name

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

您做错的是您正在创建一个包含两个级别(Id 和 Caption)的所有成员的集合。通常,较高级别的成员(例如 [Question].[13])会有汇总的度量值,但因为每个 Id 只有一个 Caption,所以两个级别的平均评分相同。

一种解决方案是不使用 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. 您可以将其他在层次结构中没有意义的有用属性添加到此级别(通过架构中的属性标记)。

然后您可以通过 Caption as 选择一个问题[Question].[the caption here],您可以通过 Id as 选择它[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 中。

于 2013-01-10T00:01:50.283 回答