由于项目原因要经常使用Merge Dimension, 今天抽空把其中的道道复习了一下。
为了方便描述, 依然沿用BO 自带的 Island Resort Marketing作为Universe。
分别创建两个Data Providers,
如下所示,
[Year 1998]:
[Year 1998 1999]:
运行查询, 结果如图,
现在将Year, Resort两个Dimension Merge起来,拖出的报表如下所示:
可见, 现在的报表显示样式是根据Merge之后的Dimension叠加而来。
如果我如果想使用DP1中的Dimension作为Driving Value,该怎么做呢?
OK, 打开Merge之后的Dimension, 选择第一个DP中的Dimension.
拖入报表, 这样, 报表后面的值就是根据第一个DP中的Dimension值而来。
同理, 可以将DP2中的值作为Driving value.
另: Document的Properties中有一个选项叫: Extended Merged Dimension Values,这个是干什么用的?
简单实验:勾选这个选项,然后将DP1中的Year拖入报表空白处,DP1.Year 明明只有一个值,但是报表却会显示两个值,可见所谓的”Extended”就是将被Merge的子dimension值Extend到该Dimension Merge后的所有值。
即:
Extended_Dimension_dim1.value:=
select dim1 from t1
union
select dim1 from t2
…
换句话说, 如果勾选了这个选项, 不管使用哪个DP,哪怕使用Merge后的Dimension作为Driving Value,结果都是一样的。
注意: 这个Extended Merged Dimension Values选项适用于整个Document,而不是单独一个报表
关于Merged Dimension还有一点比较蹊跷的地方在于, 如果把一个Merged的Dimension拖到Report Filter上, 那么无论拖的是Merged Dimension还是子Dimension, 列表值都将是Extend后的值。
如下图:
有的时候,我们的报表上面并不会包含所有Merge过的Dimension,如果要使用那些没有Merge过的Dimension,这样就会造成问题。
比如:
DP1: Year, Country, Resort, Revenue
DP2: Year, Resort, Number of Guests
Merge: Year, Resort.
如果将Year, Country,Revenue和[Number of Guests]拖入报表, 由于[Number of Guests]并不和Country在一个DP中, 需要关联的信息(Resort)又不在Calculation Context中,这样Webi会根据在Calculation context中能匹配到的Dimension(Year)自动sum(或其他的默认Aggregate function)DP2中的Guest, 并且apply到每一行。
如下图所示:
好在Webi为我们提供了ForceMerge函数来解决这样的问题:
新建一个Variable,V_Guest
=ForceMerge([Number of guests])
关于ForceMerge的用途, 官方文档解释得很清楚:
ForceMerge: Forces Web Intelligence to account for synchronized dimensions in measure calculations when the synchronized dimensions do not appear in the calculation context of the measure