【问题标题】:Define a calculated member in MDX by filtering a measure's value通过过滤度量值在 MDX 中定义计算成员
【发布时间】:2008-10-13 12:30:32
【问题描述】:

我需要在 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] 的值),所以我最终没有使用它。

【问题讨论】:

    标签: sas olap mdx


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 除了传入流量[out] = 0,因此我使用了“0”而不是“([Measures].[Total traffic])”。非常感谢!
    • 请注意MS docs on Equals 说:要比较对象,请使用IS (MDX) 运算符。例如,在检查查询轴上的当前成员是否为特定成员时使用 IS 运算符。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 2014-06-24
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多