Cognos计算方差交叉表(维度)

时间:2015-04-17 18:51:51

标签: crosstab cognos cognos-10 cognos-bi

这与Cognos Calculate Variance Crosstab (Relational)非常相似,但我的数据源是维度。

我有一个简单的交叉表,例如:

          | 04-13-2013 | 04-13-2014  
---------------------------------------
Sold      |   75         |  50   
Purchased |   10         |  15   
Repaired  |   33         |  44  
  • 过滤器:用户选择1个日期,然后我们将该日期加1年前。
  • 维度:日期是YQMD层次结构中的日期级别。
  • 措施:我们正在从Measure Dimension中展示各种措施。
    • 已售出
    • 购买
    • 修复

以下是报告工作室的内容:

                  | <#Day#>   | <#Day#> 
---------------------------------------
   <#Sold#>       |  <#1234#> |  <#1234#> 
   <#Purchased#>  |  <#1234#> |  <#1234#> 
   <#Repaired#>   |  <#1234#> |  <#1234#> 

我希望能够将这种方差计算为每个度量的两个时间段之间的百分比。

          | 04-13-2013 | 04-13-2014  |  Var. %
-----------------------------------------------
Sold      |   75         |  50       |  -33%
Purchased |   10         |  15       |   50%
Repaired  |   33         |  44       |   33%

我在&lt;#Day#&gt;右侧添加了一个查询表达式。如下所示,但我无法使方差计算起作用。

                  | <#Day#>   | <#Variance#> 
---------------------------------------
   <#Sold#>       |  <#1234#> |  <#1234#> 
   <#Purchased#>  |  <#1234#> |  <#1234#> 
   <#Repaired#>   |  <#1234#> |  <#1234#> 

这些是我尝试的表达方式和我得到的结果:

硬编码的表达式有效,但仅适用于该1个度量:

total(case when [date] = 2014-04-13 then [Sold] end)
/
total(case when [date] = 2013-04-13 then [Sold] end)
-1

我认为 CurrentMember PrevMember 可能会有效,但它会产生空白单元格:

CurrentMember( [YQMD Hierarchy] ) 
/
prevMember(CurrentMember([YQMD Hierarchy]))
-1

我认为这是因为 prevMember 会产生空白。

prevMember(CurrentMember([YQMD Hierarchy]))

仅使用 CurrentMember 会同时显示两列:

CurrentMember([YQMD Hierarchy]) 

我可以使用什么表达式来利用我的维度模型并添加一个包含%variance的列?

这些是我用于研究的页面:

1 个答案:

答案 0 :(得分:0)

我希望有更好的方法来做到这一点。我终于找到了一个描述这个问题的方法的资源。使用函数,我们可以到达第一个和最后一个句点,从而计算%方差。

item(tail(members([Day])),0)
/
item(head(members([Day])),0)
-1

这个想法来自IBM Cognos BI – Using Dimensional Functions to Determine Current Period

  

示例2 - 通过过滤测量数据来查找当前周期

     

如果OLAP或DMR数据源已填入未来的时间段(例如年末或未来年份),则当前时段的计算更复杂。但是,仍然可以通过查找具有给定度量数据的最新时段来确定。

item(tail(filter(members([sales_and_marketing].[Time].[Time].[Month]),
 tuple([Revenue], currentMember([sales_and_marketing].[Time].[Time]))
 is not null), 1), 0)