我想创建一个计算成员并按维度过滤它。这是工作示例:
(
[Policy].[Policy Status].&[Void],
[Policy].[Tran Type].&[Renewal],
[Measures].[FK Policy Distinct Count]
)
但如果我想像这样过滤它
(
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy],
[Measures].[FK Policy Distinct Count]
)
比它不起作用。它表示在元组中多次显示相同的层次结构。
另一件事是,如何排除行?这是想法......
(
![Policy].[Policy Status].&[Void],
![Policy].[Policy Status].&[Policy],
[Measures].[FK Policy Distinct Count]
)
答案 0 :(得分:46)
首先,了解MDX语法以及它与tuples, members and sets的概念的关系非常重要。
使用括号表示元组:
(
[Policy].[Policy Status].&[Void],
[Policy].[Tran Type].&[Renewal],
[Measures].[FK Policy Distinct Count]
)
元组只能包含任何层次结构中的单个成员。
要从同一层次结构中的多个成员检索结果,您必须查询一个集合。 MDX集由大括号表示:
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
一组是,by definition,
零个,一个或多个元组的有序集合。
因此,如果您希望针对这两个成员查询[FK Policy Distinct Count]
度量,则每个集合的元组都必须包含度量:
{
( [Policy].[Policy Status].&[Void], [Measures].[FK Policy Distinct Count] ),
( [Policy].[Policy Status].&[Policy], [Measures].[FK Policy Distinct Count] )
}
为简化此表达式,可以crossjoin两组不同的维度:
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy],
[Policy].[Policy Status].&[Something],
[Policy].[Policy Status].&[Something else],
[Policy].[Policy Status].&[Yet another member]
}
*
{
[Measures].[FK Policy Distinct Count]
}
现在我们可以定义集合了,是时候从一个成员中删除一些成员了。在您的示例中,听起来您想要从一个级别开始(对于MDX引擎,它只是多维数据集中的预定义集合,其中包括层次结构的该级别的每个成员),并且排除某些成员。 MDX有很多在集合上运行的函数,我们将使用EXCEPT
。
EXCEPT
函数takes two parameters,第一个是要删除的集合,第二个是应该从第一个中移除的集合。它返回一个集合。
在此示例中,我将假设[Policy].[Policy Status]
是属性层次结构,并且其唯一级别的唯一名称为[Policy].[Policy Status].[Policy Status]
。
EXCEPT(
[Policy].[Policy Status].[Policy Status],
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
)
这将返回[Policy].[Policy Status].[Policy Status]
级别的所有成员,[Policy].[Policy Status].&[Void]
和[Policy].[Policy Status].&[Policy]
除外。
为了获得有用的结果,我们可以通过度量交叉连接结果:
EXCEPT(
[Policy].[Policy Status].[Policy Status],
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
)
*
{
[Measures].[FK Policy Distinct Count]
}
集合很好,但有时我们想要的就是将它们视为单个成员,就像计算出的成员要求一样。为此,我们需要使用聚合函数。聚合函数接受一个集合并返回表示整个集合的成员。
有很多这样的,正确的使用取决于您的多维数据集中存储的数据:MIN
,MAX
,COUNT
和SUM
是其中一些(有关更完整的列表,请参阅the MDX Function reference中的“数字函数”)。在这个例子中,我将假设你的维度聚合使用SUM:
SUM(
EXCEPT(
[Policy].[Policy Status].[Policy Status],
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
),
[Measures].[FK Policy Distinct Count]
)
在这里,我已将要聚合的度量作为第二个参数传递给SUM。
MDX是一种复杂的语言,支持许多常见和不常见的设置操作。如果你还没有,我建议花时间阅读在线提供的文档,或者给自己拿一本好的MDX书。有很多要知道:)
< 3
答案 1 :(得分:2)
试试这个语法:
SUM({[Policy].[Policy Status].&[Void], [Policy].[Policy Status].&[Policy]}, [Measures].[FK Policy Distinct Count])