3

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

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

  • 现有度量:“总流量”
  • 现有维度:“方向”(“In”或“Out”)
  • 我需要创建一个计算成员“传入流量”,它等于带有附加过滤器的“总流量”(Direction = “In”)

问题是我不了解 MDX,而且我的日程安排非常紧张(对于新手问题,我深表歉意)。我能想到的最好的是:

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

这几乎可以工作,除了具有特定方向的单元格:

例子

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

[更新]我结束了

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

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

4

2 回答 2

8

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

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

每当您在报表上显示新度量时,无论是否使用了“方向”维度,它都会表现得好像它有一个“方向 > 在”过滤器。

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

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

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

于 2008-10-14T12:16:59.803 回答
1

我认为您应该在总流量事实表中放置一列以指示输入/输出,并为输入和输出值创建一个 Dim 表。然后,您可以根据 IN & Out 分析您的数据。

于 2011-01-12T09:55:55.757 回答