表示变量实现提示器级联关系实例一则

浏览: 2291

   早几天有个朋友在群里讨论需要实现一这样一个需求:

     在提示里做两个时间选项,第二个时间要大于第一个时间,且不包含第一个时间所选值。

  我的想法是通过表示变量写限制条件,实现这个需求,但是和提问人沟通的时候,因为我没环境,拿着个手机在打字,描述不清楚,他不是很理解我的做法,于是回来把实现过程写下来。

   首先BIEE实现级联提供了通过限制所选依据实现,如果两个级联关系字段来自同一个表,BIEE发出sql大概是

    select B from table where A=xxx。

如果级联的两个字段是来自两个不同的表,BIEE发出的sql大概是这样:

      select  t2.B from t1,t2,fact where fact.id1=t1.id1 and fact.id2=t2.id2  and t1.A=XXX  ,

一言蔽之,两个不同表级联关系勾选上的话,会随便走他们有共同关联的一张事实表。我们实现两个字段来自不同表的级联的时候当然不希望它走事实表,因为碰巧这个表没数或者数据量特别大的话,这个提示就出不来了。所以这种情况我们一般用变量来实现级联。

    问题里的两个时间可能是来自一个表,可以是来自两个表的,做例子的时候,我为了方便我拿一个字段来处理;  创建第一个提示;

Clipboard Image.png

 并设置该字段的表示变量:
Clipboard Image.png

创建第二个提示:

Clipboard Image.png

因为我是用同一个字段做处理的,所以要拼一个字符,提问者可以用自己需要的那个提示字段。

按题者的意思,不会存在@{PV_M}有多值的情况,所以直接写入sql限制。

SELECT "Time"."Per Name Month" FROM "Sample Sales Lite"  where  "Time"."Per Name Month">'@{PV_M}'

Clipboard Image.png


   写成上面,然后问题应该ok了,于是一测试,发现情况如下;

Clipboard Image.png

并不生效,要选应用这才生效。这个又是为什么呢?因为选了月1的时候,变量并没有传递到月2里面,而我们又需要不点应用,让提示生效,吧啦吧啦地可以继续选其他的提示。

这时,我们可以添加一个伪字段,来帮助我们刷新页面变量的值,让它传递到月2里面去。

Clipboard Image.png



现在的效果如下,生效了,设置伪列的目的是让月1更改的时候,伪列的值依赖它更改,同时会刷新页面的参数值。我这个是Oracle Business Intelligence 11.1.1.6.0版本,高级的版本可以把这个伪列设置显示名称(红框处)为空白的,和提问想要的的效果一样,Done!。



Clipboard Image.png



好了,啰啰嗦嗦写完了。实际上用变量去做级联大体可以用以上方法,但这种方法也不大好,变量在处理特殊字符并有多个值的情况,不好处理,当然也可以处理,在这就不一一细说了。

 

 

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

2 个评论

很不错,写的给力。
这个很不错啊。

要回复文章请先登录注册