BIEE 11g 新特性Double Colunm案例一则 动态切换金额显示单位
来源:互联网 发布:淘宝有哪些冷门的类目 编辑:程序博客网 时间:2024/06/08 11:28
2012/3/6更新,解决提示设置默认值之后报 [nQSError: 22023] 正在对非数值类型执行算术操作 的问题。
今天群里有人提出了一个需求,简单来说就是动态切换指标的显示单位,当从提示中选择“元”的时候,以元为单位显示金额;当提示选择“万元”的时候,以万元为单位显示金额(即原始值除以10000)。
最终效果如下:
另外还有一个情况就是,由于需要更改的报表大约有200张左右。
基于以上情况,我给出的方案是直接在RPD逻辑层采用变量,然后在前端使用提示来完成。
基本思路如下:
定义名为unit的session变量(必须为session变量);然后修改逻辑列映射,在原有映射基础上除以这个变量,然后在前端使用提示以便用户能改变变量值,
以达到切换单位的目的。
由于前端的提示呈现的是“元”、“万元”,而我们的变量需要参与运算,在10G中 我们只能把unit变量定义为字符型,通过case when来判断,当为“元”时,除以1,
当为“万元”时除以10000。很明显这个方法的拓展性不高,一旦以后新增加单位(如 千万) 那我们必须得更改逻辑层的case when句话,加入新的判断条件。
现在,在11G中,我们有了更为灵活的办法,那就是使用11G的新特性---------Double Colunm
该特性简单来说就是可以做到提示在显示的时候显示说明性的文字(比如 上面的“万元”),而实际参与运算的则是数值型(如对应的10000)。
另外,这个解决方案中还需要用到的是请求变量(这也就是为什么前面必须定义session变量的原因)
注:所谓请求变量就是与会话变量同名的变量,用于在请求过程中“更改”会话变量的值,当请求结束后,会话变量仍旧是原值。由于其生命周期是在整个请求期间,
故被称为请求变量。会话变量的生命周期则是在整个会话期间。
介绍了背景知识,下面让我们来一步一步实现这个方案吧!
一、设置Double Colun
首先在DB中创建一张表,用于存放单元描述及其对应值,并填充数据
- create table unit
- (
- unit_value int primary key,
- unit_name varchar2(10)
- );
- insert into unit values(1,'元');
- insert into unit values(10000,'万元');
接下来将该表导入RPD物理层,新建一个命为Parameter的逻辑业务模型,生成两张以unit为来源的逻辑表,并建立关联,如下图所示:
注:之所以要建两张逻辑表是为了通过一致性检查,因为逻辑层至少需要两张表,我们实际上只会使用UNIT这张逻辑表。
双击UNIT的UNIT_NAME列,把“描述符ID列”设置为UNIT_VALUE
注:这一步就是在设置Double Colunm,在前端用UNIT_NAME建立提示,实际参加运算的则为UNIT_VALUE
最后在展现层建Parameter主题域,将UNIT逻辑表拖过去即可。
二、创建变量
接下来创建名为unit的session变量,设置好相关的初始化块,并设置默认值为1,详细步骤略。
接下来创建名为unit的session变量,设置好相关的初始化块,并设置默认值为'1',详细步骤略。
2012/3/6修改 注:之前默认值是设置为1,即为整型,后来在使用过程中发现有小问题,详情请见文末。
三、修改指标映射
将之前的"Sample App Lite Data"."".""."F10 Revenue Facts (Order grain)"."Revenue"
修改为 "Sample App Lite Data"."".""."F10 Revenue Facts (Order grain)"."Revenue" /VALUEOF(NQ_SESSION."unit")
修改为 "Sample App Lite Data"."".""."F10 Revenue Facts (Order grain)"."Revenue" /CAST(VALUEOF(NQ_SESSION."unit") as INTEGER)
2012/3/6修改 注:之前默认值是设置为1,即为整型,后来在使用过程中发现有小问题,详情请见文末。
四、创建仪表盘提示
创建列提示,选择Parameter主题的UNIT表,UNIT_NAME列
如下图所示
然后设置“请求变量”,变量名一定要和前面的session变量名相同!
保存!最终效果参见文章起始处。
2012/3/6修改
今天网友反映,按照之前的办法(unit设为整型,默认值为1),当他给提示设置默认值的时候,比如万元,报表在第一次访问时会报错:
从 OBIS 返回消息。 [nQSError: 22023] 正在对非数值类型执行算术操作
经过仔细发现,当给double colunm提示设置默认值的时候,会给对应的ID列值加上引号,导致以上错误。
SET VARIABLE QUERY_SRC_CD='Report',SAW_DASHBOARD='/shared/demo/_portal/test',SAW_DASHBOARD_PG='t2',
SAW_SRC_PATH='/shared/demo/test',unit='10000';SELECT
注意红色部分,而当你通过下拉列表进行选择的时候,则如下:
SET VARIABLE QUERY_SRC_CD='Report',SAW_DASHBOARD='/shared/demo/_portal/test',SAW_DASHBOARD_PG='t2',
SAW_SRC_PATH='/shared/demo/test',unit=10000;SELECT
所以问题出在这里,变通的解决办法就是将unit的类型改为字符型,然后在计算列公式中cast成整型即可!
- BIEE 11g 新特性Double Colunm案例一则 动态切换金额显示单位
- BIEE 11g 新特性Double Colunm案例一则 动态切换金额显示单位
- BIEE 11g 关于动态切换金额显示单位 方案一
- BIEE 11g 关于动态切换金额显示单位 方案二(变量提示器+表示变量)
- 11g新特性
- 11g 新特性
- BIEE 11g 使用MDS XML来修改RPD内容实例一则
- 11g-新特性-动态视图-v$sql_hint
- BIEE 11g 动态数据源应用一例
- Oracle 11g 新特性
- Oracle 11g新特性
- oracle 11g 新特性
- ORACLE 11G新特性
- ORACLE 11g新特性
- ORACLE 11G新特性
- Oracle 11g新特性
- oracle 11g 新特性
- 【】oracle 11g 新特性
- Nutch命令
- JPetStore5.0——项目配置过程记录
- 总结:.Net的C#移植到Cocoa Touch的Objective-C
- 双点弦截法迭代程序
- 关于WinForm中的DataGridView控件显示数据字典的解决方案。
- BIEE 11g 新特性Double Colunm案例一则 动态切换金额显示单位
- Difference between MRP vs MPS
- json字符串转换为Array or List
- 十招教你从程序员转向企业家
- Spring MVC 拦截器
- BIEE叙述图导航实例
- 百度地图API中,有GPS坐标转百度坐标的功能
- 用jquery 绑定一个按钮click事件后,第一次点击后,一切正常,第二次点击,竟然执行两次,以后越来越多
- Android declare-styleable:自定义控件的属性(attr.xml,TypedArray)的使用