当前位置:  开发笔记 > 编程语言 > 正文

在MDX中定义计算成员 - 过滤度量值

如何解决《在MDX中定义计算成员-过滤度量值》经验,为你挑选了1个好方法。

我需要在MDX中定义一个计算成员(这是SAS OLAP,但我很感激那些使用不同OLAP实现的人的答案).

应通过应用额外的过滤条件,从现有度量计算新度量值.我想通过一个例子会更清楚:

现有措施:"总流量"

现有尺寸:"方向"("In"或"Out")

我需要创建一个计算成员"Incoming traffic",它等于"Total traffic"和一个额外的过滤器(Direction ="In")

问题是我不知道MDX,而且我的日程安排非常紧张(很抱歉新手问题).我能想到的最好的是:

([Measures].[Total traffic], [Direction].[(All)].[In])

哪个几乎有效,除了具有特定方向的细胞:

例

所以看起来像Direction上的"内在"过滤器被我自己的过滤器覆盖了.我需要一个"内在"过滤器和我自己的过滤器.我的直觉是它与[Direction].[(All)].[In]被评估的细胞的内在坐标相交有关,但是如果没有首先阅读这个主题就很难知道我需要什么:)

[编辑]我最终得到了

IIF([Direction].currentMember = [Direction].[(All)].[Out],
    0,
    ([Measures].[Total traffic], [Direction].[(All)].[In])
)

..但至少在SAS OLAP中,这会导致执行额外的查询(计算[in]的值)到底层数据集,所以我最后没有使用它.



1> Magnus Smith..:

首先,您可以在MDX中定义一个新的计算度量,并告诉它使用另一个度量的值,但应用了一个过滤器:

WITH MEMBER [Measures].[Incoming Traffic] AS
'([Measures].[Total traffic], [Direction].[(All)].[In])'

无论何时在报表上显示新度量,它都会表现得好像它上面有一个"Direction> In"过滤器,无论是否完全使用Direction维度.

但是在你的情况下,你希望Direction维度在使用时具有优势....所以事情变得有点混乱.您必须检测此维度是否正在使用,并采取相应措施:

WITH MEMBER [Measures].[Incoming Traffic] AS
'IIF([Direction].currentMember = [Direction].[(All)].[Out],
    ([Measures].[Total traffic]),
    ([Measures].[Total traffic], [Directon].[(All)].[In])
)'

要查看Dimension是否正在使用,我们检查当前单元格是否正在使用OUT.如果是这样,我们可以按原样返回总流量.如果没有,我们可以告诉它在我们的元组中使用IN.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有