gpt4 book ai didi

filter - MDX 计算成员按维度属性过滤

转载 作者:行者123 更新时间:2023-12-03 21:02:14 24 4
gpt4 key购买 nike

我想创建一个计算成员并按维度过滤它。这是工作示例:

(
[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]
)

最佳答案

首先,了解 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 ,

an ordered collection of zero, one or more tuples.



所以,如果你想查询 [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

关于filter - MDX 计算成员按维度属性过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8582473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com