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

Nic*_*lay 2 olap mdx sas

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

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

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

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

([Measures].[Total traffic], [Direction].[(All)].[In])
Run Code Online (Sandbox Code Playgroud)

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

例

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

[编辑]我最终得到了

IIF([Direction].currentMember = [Direction].[(All)].[Out],
    0,
    ([Measures].[Total traffic], [Direction].[(All)].[In])
)
Run Code Online (Sandbox Code Playgroud)

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

Mag*_*ith 8

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

WITH MEMBER [Measures].[Incoming Traffic] AS
'([Measures].[Total traffic], [Direction].[(All)].[In])'
Run Code Online (Sandbox Code Playgroud)

无论何时在报表上显示新度量,它都会表现得好像它上面有一个"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])
)'
Run Code Online (Sandbox Code Playgroud)

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