通过过滤度量值来定义MDX中的计算成员

3

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

新度量值应该从现有度量值通过应用额外的过滤条件来计算。我想通过一个例子更清晰地说明:

  • 现有度量值:“总流量”
  • 现有维度:“方向”(“进”或“出”)
  • 我需要创建一个名为“进入流量”的计算成员,它等于“总流量”加上一个附加过滤器(方向=“进”)

问题是我不知道MDX,而且时间非常紧张(对于初学者的问题,我很抱歉)。我能想到的最好的方法是:

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

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

example

因此,看起来“内在”方向过滤器被我自己的过滤器覆盖了。我需要一个“内在”过滤器和我的过滤器的交集。我的直觉是将[Direction].[(All)].[In]与正在评估的单元格的内在坐标相交,但在没有先阅读相关主题之前很难知道我需要什么 :)

[更新] 我最终得到了:

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

但至少在SAS OLAP中,这会导致额外的查询操作(计算底层数据集中[in]的值),因此最终我没有使用它。

2个回答

8

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

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

无论是否使用Direction维度,每当您在报表中显示新的度量时,它将表现得好像已经应用了“Direction > In”的过滤器。但是在您的情况下,当使用Direction维度时,您希望其优先级更高...这样就有点麻烦了。您需要检测该维度是否被使用,并相应地采取措施。
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。


除了输入流量 [out] = 0 之外,所以我使用了“0”代替“([Measures].[Total traffic])”。非常感谢! - Nickolay
请注意,MS docs on Equals 表示:要比较对象,请使用 IS(MDX) 运算符。例如,在检查查询轴上的当前成员是否为特定成员时,请使用 IS 运算符。 - Nickolay

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接