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

时间:2008-10-13 12:30:33

标签: sas olap mdx

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

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

  • 现有措施:“总流量”
  • 现有尺寸:“方向”(“In”或“Out”)
  • 我需要创建一个计算成员“Incoming traffic”,它等于“Total traffic”和一个额外的过滤器(Direction =“In”)

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

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

除了具有特定方向的细胞外,其中几乎可行:

example

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

[edit]我最终得到了

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

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

3 个答案:

答案 0 :(得分:8)

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

WITH MEMBER [Measures].[Incoming Traffic] AS
'([Measures].[Total traffic], [Direction].[(All)].[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。

答案 1 :(得分:1)

我认为您应该在总流量事实表中添加一列用于IN / OUT指示&为IN&创建一个Dim表。出价值。然后,您可以根据IN& amp;分析您的数据。出。

答案 2 :(得分:1)

另请查看this question,它描述了同样的问题,并在那里发布了不同的答案。