首页 文章

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

提问于
浏览
1

这与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%

我在<#Day#>的右边添加了一个Query Expression,如下所示,但是我无法使方差计算起作用 .

| <#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

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

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

我认为这是因为 prevMember 产生了空白 .

prevMember(CurrentMember([YQMD Hierarchy]))

仅使用 CurrentMember 总共提供两列:

CurrentMember([YQMD Hierarchy])

我可以使用什么表达式来利用我的维度模型并添加具有%方差的列?

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

1 回答

  • 0

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

    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)
    

相关问题