我需要在MDX中定义一个计算成员(这是SAS OLAP,但我很感激那些使用不同OLAP实现的人的答案).
应通过应用额外的过滤条件,从现有度量计算新度量值.我想通过一个例子会更清楚:
现有措施:"总流量"
现有尺寸:"方向"("In"或"Out")
我需要创建一个计算成员"Incoming traffic",它等于"Total traffic"和一个额外的过滤器(Direction ="In")
问题是我不知道MDX,而且我的日程安排非常紧张(很抱歉新手问题).我能想到的最好的是:
([Measures].[Total traffic], [Direction].[(All)].[In])
哪个几乎有效,除了具有特定方向的细胞:
所以看起来像Direction上的"内在"过滤器被我自己的过滤器覆盖了.我需要一个"内在"过滤器和我自己的过滤器.我的直觉是它与[Direction].[(All)].[In]
被评估的细胞的内在坐标相交有关,但是如果没有首先阅读这个主题就很难知道我需要什么:)
[编辑]我最终得到了
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])'
无论何时在报表上显示新度量,它都会表现得好像它上面有一个"Direction> In"过滤器,无论是否完全使用Direction维度.
但是在你的情况下,你希望Direction维度在使用时具有优势....所以事情变得有点混乱.您必须检测此维度是否正在使用,并采取相应措施:
WITH MEMBER [Measures].[Incoming Traffic] AS 'IIF([Direction].currentMember = [Direction].[(All)].[Out], ([Measures].[Total traffic]), ([Measures].[Total traffic], [Directon].[(All)].[In]) )'
要查看Dimension是否正在使用,我们检查当前单元格是否正在使用OUT.如果是这样,我们可以按原样返回总流量.如果没有,我们可以告诉它在我们的元组中使用IN.