如何编写MDX查询以返回ID和名称为的成员?
我正在尝试编写一个MDX查询,该查询返回一个结果,其中包括成员列表、成员Id和度量值。在本例中,我有一个事实表,用于对调查中的值进行评级。每个评级值都有一个问题维度的外键,该维度包含Id和Name列。我想要的信息是每个问题的Id和名称以及总平均评分。到目前为止,我可以获得Id和评级,或者姓名和评级,但我不知道如何获得两者 以下是我尝试过的查询:如何编写MDX查询以返回ID和名称为的成员?,mdx,mondrian,Mdx,Mondrian,我正在尝试编写一个MDX查询,该查询返回一个结果,其中包括成员列表、成员Id和度量值。在本例中,我有一个事实表,用于对调查中的值进行评级。每个评级值都有一个问题维度的外键,该维度包含Id和Name列。我想要的信息是每个问题的Id和名称以及总平均评分。到目前为止,我可以获得Id和评级,或者姓名和评级,但我不知道如何获得两者 以下是我尝试过的查询: SELECT NON EMPTY {[Measures].[Rating]} ON COLUMNS, NON EMPTY {[Question].[Qu
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做的事情可能吗?我错过了什么?这是由Mondrian执行的。这取决于问题维度的层次结构是如何设置的。在这里,我假设层次结构是
All Questions
> Id
> Name
(这可能不是建立层次结构的最佳方式,因为标题只是给定问题成员的属性,不是级别,但我离题了)
您所做的错误在于,您正在创建一个集合,其中包含来自两个级别(Id和标题)的所有成员。通常,较高级别的成员(例如[Question][13])会汇总度量值,但由于每个Id只有一个标题,因此两个级别的平均评分相同
一种解决方案是不使用Id级别,而是从标题成员的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函数确保在没有评分时有一个空成员,否则不管怎样,每个问题都会有一行
编辑: 您可以使用一个级别层次结构,即
All Questions>Question
(如果您有任何其他分析有用的问题分类,您可以在这两者之间添加其他级别)
问题级别代表一个问题实例,因此您可以做很多事情:
列值给出)作为问题ID
name列
值给出)作为问题标题[question]。[此处的标题]
,您可以按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]
属性作为元数据添加到结果单元格集中。这取决于问题维度的层次结构的设置方式。在这里,我假设层次结构是
All Questions
> Id
> Name
(这可能不是建立层次结构的最佳方式,因为标题只是给定问题成员的属性,不是级别,但我离题了)
您所做的错误在于,您正在创建一个集合,其中包含来自两个级别(Id和标题)的所有成员。通常,较高级别的成员(例如[Question][13])会汇总度量值,但由于每个Id只有一个标题,因此两个级别的平均评分相同
一种解决方案是不使用Id级别,而是从标题成员的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函数确保在没有评分时有一个空成员,否则不管怎样,每个问题都会有一行
编辑: 您可以使用一个级别层次结构,即
All Questions>Question
(如果您有任何其他分析有用的问题分类,您可以在这两者之间添加其他级别)
问题级别代表一个问题实例,因此您可以做很多事情:
列值给出)作为问题ID
name列
值给出)作为问题标题[question]。[此处的标题]
,您可以按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]
属性作为元数据添加到生成的单元集中。非常感谢!第一个SELECT有效,我没有意识到我正在将ID作为完整成员名的一部分取回。您提到标题可能只是一个属性。如果这更有意义的话,我可以更新我的模式,但我不确定如何在查询中使用它来获取所需的信息。您是否有机会分享一些关于如何更好地建模和选择数据的信息?非常感谢,这非常有帮助!我现在有大约10天的MDX经验,所以这是非常好的信息,正如你所描述的那样有效。非常感谢!第一个SELECT有效,我没有意识到我正在将ID作为完整成员名的一部分取回。您提到标题可能只是一个属性。如果这更有意义的话,我可以更新我的模式,但我不确定如何在查询中使用它来获取所需的信息。您是否有机会分享一些关于如何更好地建模和选择数据的信息?非常感谢,这非常有帮助!我现在有大约10天的MDX经验,所以这是非常好的信息,正如您所描述的那样有效。