我尝试编写一个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做什么?我错过了什么?这是由蒙德里安执行的。
答案 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
的单级层次结构(如果您有任何其他分析上有用的问题分类,则可以在其间添加其他级别)。
问题级别代表一个问题实例,所以你可以做很多事情:
column
值给出)作为问题ID。nameColumn
值指定)问题标题。然后,您可以按标题[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中将属性添加为元数据。