RS使用和转换Cube相对时间类别

浏览: 3132

一、前言

  根据8月份帖子问题的总结,Cube的维度处理问题成为了论坛朋友关注的焦点,尤其是当要计算同比、环比问题需要用到时间维度的相对时间层处理。  鄙人也私下研究了此问题,同比、环比运算运用非常频繁,至少目前国内企业项目的报表开发。

二、目的

 演示在 Report Studio 提示中使用Transformer的相对时间类别的方法。如何创建默认值为相对时间类别的提示,同时允许用户使用任何其他时间类别, 如下图所示

Clipboard Image.png

三、案例

  月份环比计算将会用到相对时间(Relative Time)[CurrentMonth],但是我们在开发时候遇到一个棘手问题“CurrentMonth”所在的hierarchy和真实时间所在 的hierarchy不同,如下列表达式:

  if (?P_ChosenMonth? = "Current") then
    ([sales_and_market].[Years].[Current Month].[Current Month]->:[PC].[@MEMBER].[Current Month])
  else
    ([sales_and_market].[Years].[Years].[Month]->?P_ChosenMonth?)

  编译表达式肯定无法通过,因为if else语句要求处理的数据项必须在同一个hierarchy,  那么该怎么处理呢?

四、步骤

1、定义ValuePrompt“值提示”,如下图中所示:

    使用值 是“Month MUN”;输入 一个静态值 “Current”,默认值=Current

Clipboard Image.png


2、将一个数据项添加到查询中,名称为[CurrentMonthToRealMonth]表达式定义为:

  linkmember(  firstchild(  [sales_and_market].[Years].[Current Month].[Current Month]->:[PC].[@MEMBER].[Current Month] ),[sales_and_market].[Years].[Years].[Month])

  linkmember是Cube库函数,返回某个成员在其它hierarchy相同值的成员,这也是解决该问题的关键突破点。firstChild可以用item([Current Month],0)代替,因为Current Month只有一个成员。如下图:

Clipboard Image.png


3、将另一个数据项添加到查询中,名为 [ChosenedMonth],表达式定义为: 

  if ( ?P_ChosenMonth?= 'Current'  )  then (  [CurrentMonthToRealMonth] )
   else 
  (#substitute('Current','[2004/Jan]', prompt( 'P_ChosenMonth','token','Current') ) #) 

 //[2004/Jan]是任意该层的成员,实际上用不到它,因为当选择值为Current时返回 [CurrentMonthToRealMonth]。如下图

Clipboard Image.png

4、将另一个数据项添加到查询中名为 [PreviousMonth],表达式定义为:

   prevMember([ChosenedMonth])

  现在,我们可以随意选择月份,通过这个通用表达式,均可得到正确的结果。展示结果如下

Clipboard Image.png


相信已经解决了你的问题,有时一些idea实践起来就遇到很多困难。欢迎留言和鄙人一起讨论!

推荐 0
本文由 贝克汉姆 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册