MDX:按度量的表值过滤成员集

Posted

技术标签:

【中文标题】MDX:按度量的表值过滤成员集【英文标题】:MDX: Filtering a member set by a measure's table values 【发布时间】:2010-10-05 15:25:56 【问题描述】:

我在事实表中有一些数字,并生成了一个使用 SUM 聚合器汇总数字的度量。但问题是我只想对高于 10 的数字求和。我尝试在度量定义中使用通用表达式,这当然有效,但问题是我需要能够动态设置该值,因为它并不总是 10,这意味着用户应该能够自己选择它。

更具体地说,我当前的 MDX 如下所示:

和 SET [Email measure] AS '[Measures].[Number of Answered Cases], [Measures].[Max Expedition Time First In Case], [Measures].[Avg Expedition Times First In Case], [措施].[收到的电子邮件请求数],[措施].[案例中的平均电子邮件数量], [Measures].[Avg Expedition Times Total],[Measures].[已回复的传入电子邮件数]' 将 [组织] 设置为 '[Organization.Id].[860]' SET [Operators] AS '[Operator.Id].[3379],[Operator.Id].[3181]' 将 [电子邮件帐户] 设置为 '[电子邮件帐户.Id].[6]' 成员 [Time.Date].[Date Period] AS 聚合([Time.Date].[2008].[11].[11] :[Time.Date].[2009].[1].[2] ) 成员 [Email.Type].[Email Types] 作为聚合 ([Email.Type].[0]) SELECT [Email measure] ON 列, [运算符] ON 行 来自 [Email_Fact] WHERE([时间.日期].[日期期间])

现在,有问题的成员是计算出的成员 [Avg Expedition Times Total]。该成员采取两项措施; [Sum Expedition Times] 和 [Nr of Expedition Times] 并在另一个上拆分以获得平均值,所有这些目前都有效。但是,我希望 [Sum Expedition Times] 仅汇总我/用户希望的参数之上或之下的值。

如何过滤 [Sum Expedition Times] 迭代的数字,而不是过滤该度量最终给我的总和?

【问题讨论】:

我现在意识到我可能无法直接通过 MDX 做我想做的事情,因为它的运行水平比我需要的更高。我通过在多维数据集中创建几个度量来解决它,这些度量根据用户的输入单独使用。这样,MDX 仅控制要使用的度量。 正是我要建议的! 【参考方案1】:

您可以将成员移动到 MDX 查询中,而不是将其放入多维数据集中。然后你会得到类似......

WITH
MEMBER [Avg Expedition Times Total] AS
SUM(
    FILTER([Your Dimension],
        [Measure you want to filter] > 10),
    [Measure you want to sum])

我不确定您要过滤和求和的具体维度和度量,但我认为这是朝着正确方向迈出的一步。如果您的用户无法修改 MDX(或不想!),那么创建多个度量也是一个非常可靠的解决方案。

【讨论】:

【参考方案2】:

您需要有一个具有此度量的不同值的维度(如果不同值的数量太高,那么可能是某种范围)。然后你把这个维度加入到事实中。连接应该很简单。 Measure 列也将成为关键列。现在您只需要引用维度成员。

【讨论】:

以上是关于MDX:按度量的表值过滤成员集的主要内容,如果未能解决你的问题,请参考以下文章

SSAS MDX WHERE 子句语法 - 从同一层次结构中过滤多个值

MDX - 过滤的 CROSSJOIN 计数 - 性能问题

如何在 MDX 中对同一维度进行分组和过滤

MDX Excel 中的 IIF + 过滤器 + inst 函数

维度成员作为 MDX 中的计算度量

MDX 获取层次结构值