如何在WITH MEMBER计算MDX中获取当前行值?

问题描述:

我想根据当前行计算度量值。 问题是我找不到在WITH MEMBER部分中获取当前行的方法。如何在WITH MEMBER计算MDX中获取当前行值?

WITH MEMBER [Measures].[Test] AS AVG(
    NonEmptyCrossJoin(
       FILTER(DESCENDANTS([Exigences].[ENVGR], [Levier], SELF), 
         [Exigences].CurrentMember.Name = 'Chemicals'), 
       DESCENDANTS([Organization].[Valeo].[Powertrain Systems], [entity], SELF)), 
    [Measures].[ProgressLevel]) 

SELECT {[Measures].[ProgressLevel], [Measures].[Test]} ON COLUMNS, 
DESCENDANTS([Exigences].[ENVGR].[ENVGR-01.001], [Levier], SELF) ON 
ROWS FROM [Exigences] 

化学物质目前为硬编码。这是例子。 我想用'化学物'代替当前的行数。

因此,假设这些值是行将返回'化学物质','药房','测试',我想[度量]。[测试]计算改变。

MDX能做到吗?如果是这样,我怎么能得到当前值。

我试过[Levier] .CurrentMember.Name,但我认为它与[Exigences] .CurrentMember.Name冲突。

任何人有一个想法?

谢谢

+0

不知道理解,你是什么意思到当前行。底层表的行?如果是,哪一个? (这不是非常OLAP得到rowid :-)) – ic3

+0

在ON ROWS选择上,我做了一个DESCENDANTS,它会给我一组[Levier]成员。现在在顶部的WITH MEMBER中,您可以看到硬编码的'Chemicals'字符串。我想这个字符串是我的[Levier] .CurrentMember.Name值。但由于[Exigences]维上的过滤我有冲突,[Exigences] .CurrentMember.Name和[Levier] .CurrentMember.Name之间的平等测试将始终为真,因此,过滤器将不会过滤任何内容。 – Spredzy

+0

我看到你的问题,棘手的问题之一。 icCube OLAP服务器支持功能语言来解决问题。对不起,我没有看到如何解决你的问题,除非在Axis()上做些什么或使用重复的层次结构。你需要为这个标准的MDX su..s创建一个变量uff。 – ic3

这已采取努力一点,但是这就是优势,拥有一个漂亮的金色徽章。我们使用的MDX Generate功能和命名集(myCellSet在link & 2D为例):

不知道这是要为你的供应商工作,但你可以试试这个:

WITH MEMBER [Measures].[Test] AS AVG(
NonEmptyCrossJoin(
      Generate({[Exigences].CurrentMember} as MyCellSet, 
       FILTER(DESCENDANTS([Exigences].[ENVGR], [Levier], SELF), 
        [Exigences].CurrentMember.Name = MyCellSet.CurrentMember.Name) 
      ) 
      , 
      DESCENDANTS([Organization].[Valeo].[Powertrain Systems], [entity], SELF)), 
[Measures].[ProgressLevel]) 
+0

感谢您的帮助。我明白为什么Generate做以及为什么我们在这里使用它,但是AS MyCellSet是使用Generate的标准方式。我无法找到关于它的任何文档。而且这似乎是什么试图实现这个时候不起作用。题外话:你有什么意思“拥有一个漂亮的金徽章”? – Spredzy

+0

928点意味着你一直在帮助别人,所以这是公平的,我们也一样 – ic3

+0

ahha谢谢。我只是通过复制维度来做到这一点。我不喜欢这个解决方案,但它会为我赢得一些空闲时间来找到更好的解决方案。我将尝试挖掘更多关于生成函数的信息。感谢icCube提供一些帮助。非常感激。 – Spredzy