168大数据

标题: webi报表中的上下文计算 [打印本页]

作者: 乔帮主    时间: 2014-11-26 16:58
标题: webi报表中的上下文计算
如有转载请注明出处:http://blog.csdn.net/donkey2004112103/archive/2010/12/13/6074276.aspx
webi报表中通常使用In,ForEach,ForAll来计算上下文,不过理解这些公式最好还是通过例子,而不是看文档。我就把这些公式通过例子好好的给大家讲解一下。以下的例子我就以island resorts marketing这个universe为例。

1. IN operator
in是非常好理解的一个公式它指明了计算公式的上下文包含哪些,什么意思了?比如下图:


如果我添加一列,想要得到country中每年的汇总金额,那该怎么做了?这就要用到in了,通过如下公式即可解决:

=Sum([Revenue] In ([Country];[Quarter];[Year])) In ([Year];[Country])
这个如果用到了forall会更简单,不过为了演示in的作用,先这么写了。下面将有更好的方式。这段公式的含义是对(country,quarter,year)这三个维度下按照year,country的分类进行求和。你可以测试下,比如换成如下这样:
=Sum([Revenue] In ([Country];[Quarter];[Year])) In ([Year])
就会发现现在是按照year维度进行的分类汇总。即每年有一个汇总值,而不是按照country何quater了。

2. ForEach
还是上面这张表,如果我只是想实现一下每个季度下最大的那个revenue是多少怎么办了?如下图:


右边是quarter,左边这列式每个季度下最大的金额。公式如下:
=Max([Revenue] ForEach ([Country]))
猜到foreach的作用了吗?本来次table默认的上下文维度是quarter,但是通过forEach可以增加一个维度country,这样我们实际的效果是
=MAX([Revenue] in ([Country];[Quarter])) in ([Country])

这就是ForEach。

3. ForAll
ForAll和ForEach相对,ForEach是增加维度到上下文中,而ForAll是在默认的上下文中减去一个维度。回到1中的那个问题,如何用ForAll来解决了?先想想,对了就是这样:
=Sum([Revenue] ForAll ([Quarter]))
本来默认的上下文是country,quarter,year,只需要删除quarter这个维度即可。现在应该对webi中的上下文了解了吧。so easy。excel可没有这样的功能。







欢迎光临 168大数据 (http://www.bi168.cn/) Powered by Discuz! X3.2