Webi 中的 Merge Dimensions

由于项目原因要经常使用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

Leave a Reply

Your email address will not be published. Required fields are marked *