MDX计算会员总数

时间:2015-07-08 11:17:47

标签: mdx calculated-columns totals

我正在使用“上一期”的计算成员:

Case
// Test for current coordinate being on (All) member.
When [<<Target Dimension>>].[<<Target Hierarchy>>].CurrentMember.Level Is
     [<<Target Dimension>>].[<<Target Hierarchy>>].[(All)]

Then "NA"

Else ( 
       ParallelPeriod
       (
          [<<Target Dimension>>].[<<Target Hierarchy>>].[<<Target Level>>],
          <<Number of Periods>>,
          [<<Target Dimension>>].[<<Target Hierarchy>>].CurrentMember
       ),
       [Measures].[<<Target Measure>>] 
     )
End

// This expression evaluates the difference between the value of the numeric
// expression in the previous period and that of the current period.

(直接取自微软建议的片段代码)

它按预期工作,但在呈现总计时,我得到全年总计,即使在行上选择了几个月。

所以,如果我选择说2015年,1月到6月,我会得到2014年的6个正确值,但是2014年的总数而不是6个呈现值的总和。

任何获得“正确”总和值的方法?正确我指的是所选行的总和。

编辑添加实际代码:

Case
When [Dim Time].[Calendar].CurrentMember.Level Is [Dim Time].[Calendar].[(All)]
Then "NA"
Else (ParallelPeriod([Dim Time].[Calendar].[Year],
      1,
      [Dim Time].[Calendar].CurrentMember),[Measures].[Sales])
End

My Dim Time.Calendar以年 - 月 - 日为级别。很容易:)

在选择某些月份时,年份总数是一年中的总计,而不是所选月份的总数。 选择某些天时,月总数是该月的总计,而不是所选天数的总和。

编辑添加示例:

Year    Month   Day Sales previous year Sales
2015    04      03      74,154.56 €     135,156.41 €
    Total 04         2,617,045.75 €     135,156.41 €
Total 2015          37,696,665.69 €     135,156.41 €

2 个答案:

答案 0 :(得分:0)

(不确定我是否应该发布答案,因为它尚未解决,但似乎我找到了正确的方向)

使用建议here我定义了动态集(使用MS SAS在多维数据集定义时):

CREATE DYNAMIC SET CURRENTCUBE.[DynSet] AS [Dim Time].[Calendar]

和一个Calculated成员(在Excel上,更容易测试不同的语法):

count([DynSet])

现在我在所有行,单个,小计,总计...上得到1作为值,而不是所选月份的预期天数和总和。

也许具有更好MDX知识的人可以进一步发展它。

我还使用帖子计数的例子添加了CM(后代和计数(现有的(原来的[Dim Temps]。[日历] ...)这就是我得到的:

    Year    Month   Day Previous sales  Sales          CountExisting    CountDescendants    CountDays
    2015    04      03      74,154.56 € 135,156.41 €      1   1 1
                    04     132,992.88 € 152,179.24 €      1   1 1
                    05     130,651.80 € 128,971.65 €      1   1 1
    Total 04             2,617,045.75 € 416,307.30 €     31  31 1
Total 2015              37,696,665.69 € 416,307.30 €    365 365 1

我无法理解如何使用新的动态集,因为我无法访问其组件,我期望[DynSet]。[Year] [Month]和[Day]存在所以我可以使用它们我以前的表达方式,但他们没有,所以不确定如何将它用于我的目的。

THKS

<强>编辑:

试图定义

CREATE DYNAMIC SET CURRENTCUBE.[DynSet] AS [Dim Time].[Calendar].[Day]

现在我的最后一列,即count([DynSet]),所有行的值都为3。

仍然不知道如何使用[DynSet]级别......

答案 1 :(得分:0)

我花了差不多两个星期,大量的搜索时间和十几个不同的论坛,但最后我得到了一个解决问题的不错的答案。

看看here

简而言之,添加一个命名计算(不是计算成员)并调整公式范围

$assets2012Q4 = $xpath->query("/xbrli:xbrl/us-gaap:Assets[@unitRef='usd'][@contextRef='FI2012Q4']");

一旦你知道它就够了!