我需要在 MDX 中定义一个计算成员(这是 SAS OLAP,但我很感谢使用不同 OLAP 实现的人员提供的答案)。
新度量的值应通过应用附加过滤条件根据现有度量计算得出。我想通过一个例子会更清楚:
- 现有衡量标准:“总流量”
- 现有维度:“方向”(“入”或“出”)
- 我需要创建一个计算成员“传入流量”,它等于带有附加过滤器的“总流量”(方向 =“In”)
问题是我不了解 MDX,而且我的日程安排非常紧张(很抱歉提出一个新手问题)。我能想到的最好的办法是:
([Measures].[Total traffic], [Direction].[(All)].[In])
除了具有特定方向的单元格之外,这几乎有效:
所以看起来方向上的“固有”过滤器被我自己的过滤器覆盖了)。我需要“内在”过滤器和我自己的过滤器的交集。我的直觉是这与相交有关[Direction].[(All)].[In]
正在评估细胞的内在坐标,但如果不先阅读该主题,就很难知道我需要什么:)
[update]我最终得到
IIF([Direction].currentMember = [Direction].[(All)].[Out],
0,
([Measures].[Total traffic], [Direction].[(All)].[In])
)
..但至少在 SAS OLAP 中,这会导致对基础数据集执行额外的查询(以计算 [in] 的值),所以我最终没有使用它。
首先,您可以在 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])
)'
要查看维度是否正在使用,我们检查当前单元格是否正在使用 OUT。如果是这样,我们可以按原样返回总流量。如果没有,我们可以告诉它在我们的元组中使用 IN。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)