BO报表技术入门.docx
《BO报表技术入门.docx》由会员分享,可在线阅读,更多相关《BO报表技术入门.docx(38页珍藏版)》请在冰豆网上搜索。
![BO报表技术入门.docx](https://file1.bdocx.com/fileroot1/2023-2/28/61ab4efb-0d76-4219-aafc-b7a7901be732/61ab4efb-0d76-4219-aafc-b7a7901be7321.gif)
BO报表技术入门
BO报表技术入门
第一章BO报表介绍:
1.什么是报表?
简单的说:
报表就是用表格、图表等格式来动态显示数据。
报表软件,它们需要有专门的报表结构来动态的加载数据,同时也能够实现报表格式的多样化。
BO就是这样一种报表软件。
BO报表全称是BusinessObject,BusinessObjects是全球领先的商务智能(BI)软件公司的产品套,2007年10月被SAP收购。
BusinessObjectsXI为报表、查询和分析、绩效管理以及数据集成提供了最完善、最可靠的平台。
本文中用的版本是BusinessObjectXIRelease2。
〔1〕BO的语义层设计
提供了创立和维护语义层的所有技术,让用户能很容易地创立、访问和运行报表。
⏹Designer简介
⏹根本操作
⏹插入表和连接
⏹定义类和对象
〔2〕BO的报表设计
让开发者掌握报表规划和制作的全面技能和深入知识,帮助分析和解释一些重要信息,以及完整的报表创立过程。
⏹制作一张简单的报表
⏹报表的处理〔1〕:
插入表和设置表格式
⏹报表的处理〔3〕:
独立单元格
⏹报表的处理〔4〕:
设置数字和日期格式
⏹报表的处理〔5〕:
使用节、拆分和排序
⏹报表的处理〔6〕:
过滤报表中显示的值
⏹报表的处理〔7〕:
使用标准计算
⏹报表的处理〔8〕:
使用报警器突出显示关键结果
⏹报表的处理〔9〕:
WebIntelligence函数
⏹处理查询:
构建根本查询
⏹处理文档〔1〕:
设置文档进行钻取分析
⏹处理文档〔2〕:
保存和删除WebIntelligence文档
语义层设计的学习,侧重于理论;报表设计的学习,侧重于操作。
本学习资料采用技术案例形式,【问题描述】是我们利用BO自带的数据库,编写了一个小的需求,引入具体的问题,【分析过程】具体讲解我们用到的技术知识,【解决途径】是我们以图示的方式,实现报表。
【经验总结】是我们自己在开发过程中,遇到的相似问题。
希望能有些拓展。
第二章语义层设计
第一节Designer简介
1.1概述
本节简要介绍了Designer这一用于构建Universe的工具。
我们从Universe是什么,如何创立Universe,以及Universe的作用分别阐述。
等你理解这些根本的概念之后,就会发现,制作报表只是力气活,但是universe的设计却是技术活。
所以在学习和开发的过程中,主要精力是要花在universe的设计上的。
1.2Designer和Universe根本原理
BusinessObjectsDesigner是一个软件工具,可创立Universe。
1.2.1什么是Universe?
Universe是一个包含以下内容的文件:
•一个或多个数据库中间件的连接参数。
•称为对象的SQL结构,映射到数据库中的实际SQL结构,如列、表和数据库函数。
对象按类分组。
WebIntelligence用户既可以看到对象,也可以看到类。
•在数据库中使用的表和连接的模式。
对象是通过您包括在模式中的数据库结构来构建的。
简单的来说,先了解下Universe是我们做报表的第一步要创立的文件,它主要是和底层数据库相对应,最直观的就是它是用来构建SQL查询的文件。
1.2.2Universe有何作用?
Universe的作用是为WebIntelligence的用户提供一个易于使用和理解的接口,使他们能依据数据库运行查询,以创立报表和执行数据分析。
因为Universe中的类和对象,让SQL的查询结果,以直观的方式显示给WebIntelligence的用户。
WebIntelligence是什么将在第三章报表设计里面解释。
在Universe中创立的对象必须与最终用户的业务环境和词汇相关。
这些对象的作用是将以业务为焦点的前端呈现为数据库中的SQL结构。
下列图显示了对象的作用,它用作数据库模式和WebIntelligence中的“查询〞工作区之间的映射层,而用户使用该工作区创立依据数据库表运行的查询。
1.2.3Universe包含什么?
等你创立一个新的Universe文件后,你看到的窗口如下:
你在两个白色区域分别右击,就会发现它们的功能区别,右面是引入表或者编辑派生表〔非物理表〕,左面是对象资源管理器视图,用以创立对象和类的。
〔1〕类
类是Universe中的对象的逻辑分组。
它表示对象的类别。
类的名称应指明类包含的对象的类别。
可以按层次将类划分为子类。
〔2〕对象
对象是映射到数据库中的数据或数据派生的命名Universe单元。
应根据目标用户组的业务词汇命名对象的名称。
例如,在产品经理所用的Universe中使用的对象可以是“Product〔产品〕〞、“LifeCycle〔生命周期〕〞或“ReleaseDate〔发布日期〕〞。
财务分析员使用的
Universe可以包含诸如“ProfitMargin〔利润〕〞和“ReturnonInvestment〔投资回报〕〞等对象。
〔3〕对象类型
在Designer中,对象被限定为三种类型之一:
维、明细或度量。
对象类型说明
维用于分析的参数。
维通常与诸如地理、产品或时间的层次相关。
例如,“City〞,“Yr〔年〕〞,“Qtr〔季度〕〞等。
明细提供维的说明,但并不是分析的焦点。
例如“MonthName〞
度量传递用于确定维对象数量的数值信息。
例如“SalesRevenue〔销售收入〕〞
设置方法
右击对象→对象属性,如图:
第二节根本操作
2.1概述
本章描述您在Designer中执行以创立、修改和更新Universe的基
本操作。
涵盖了以下主题:
•启动Designer
•创立Universe
•保存Universe
•导出Universe
•导入Universe
•设置Universe参数
•使用Designer用户界面
•使用“查找并替换〞
•组织表显示
•选择模式显示选项
2.2启动Designer
系统CMS效劳器的名称。
用户名您的资料库用户名。
密码您的资料库密码。
身份验证您的平安级别
登录成功后
2.3创立Universe
名称向WebIntelligence用户标识Universe。
描述说明Universe用途和内容的说明。
可选字段。
连接连接参数的命名集合,用于定义WebIntelligence如何访问数据库文件中的数据。
所有可用的连接均显示在“连接〞下拉列表框中。
也可以创立新的连接。
接下来按确定即可。
保存Universe
保存Universe
•从菜单栏中选择“文件〞>“保存〞
•单击“保存〞图标
•在键盘上按Ctrl+S
2.5导出Universe
将Universe保存到CMS〔中央管理系统:
统一管理Universe〕
点击浏览,可新建文件夹
2.6导入Universe
导入:
从CMS上获得Universe。
第三节插入表和连接
3.1概述
本章说明可以如何创立一个模式,该模式包含构建对象所需的所有SQL结构〔WebIntelligence用户使用这些对象来构建报表〕。
这些SQL结构包括表、列、连接和数据库函数。
构建正确的模式是构建满足所有其最终用户报告需求的Universe的根底。
直观的说,就是Designer工具中右边画布中编辑的内容。
3.2什么是模式?
模式是数据库结构的图形表示方式。
在Designer中,您为Universe表示的数据库局部创立模式。
模式包含表和连接。
表包含列,而您最终会将这些列映射到最终用户用于创立报表的对象。
连接链接表,以便为在多个表上运行的查询返回正确的数据。
您通过使用表浏览器从目标数据库中选择表,在“结构〞窗格中设计模式。
创立连接以链接表。
当您为Universe设计了模式时,可以使用自动完整性检查功能验证模式。
以下显示了Beach这一例如Universe的模式:
下列图指明了模式设计阶段出现在一个典型Universe开发周期的哪个位置:
3.3插入表
表浏览器是一个独立的窗口,它显示了目标数据库中的表和列的树形视图。
使用表浏览器可查看和选择想插入模式的数据库中的表。
3.4使用派生表
派生表是您在Universe模式中定义的表。
您在这些表上创立对象,就像在任何其他表上创立一样。
派生表由SQL查询在Universe级别定义,可用作Designer中的逻辑表。
派生表具有以下优点:
•减少了返回到文档供分析用的数据量。
可以在派生表中包含复杂的计算和函数。
这些操作在将结果集返回到文档之前执行,从而节省了时间和减少了在报表级别对大量数据进行
复杂分析的需求。
•减少了对数据库汇总表的维护。
有时,派生表可以取代保存复杂计算的结果的统计表〔通过使用聚合感知将这些结果合并到Universe中〕。
经常维护和刷新这些聚合表要付出很高的代价。
派生表可以返回相同的数据并提供实时数据分析。
派生表与数据库视图类似,并具有以下优势:
派生表的SQL可以包括提示。
SQL表达式就是我们编辑的区域。
3.5定义连接
在模式中插入了多个表后,必须在相关的表之间创立连接。
在模式中,连接和表一样重要,因为它们允许您通过一种有意义的方式组合多个表中的数据。
这里的连接和数据库中的SQL连接有相同的含义。
创立连接:
1.可以通过图形方式在表之间创立各个连接,方法是使用鼠标从一个表中的列向另一个表中的匹配列画一条线。
2.通过在“编辑连接〞对话框中直接定义连接属性来创立连接。
第四节定义类和对象
前面各节已经描述了如何规划Universe、创立包含Universe数据库结构〔表、列和连接〕的表模式。
WebIntelligence用户〔报表设计者〕看不到您创立的模式。
完成此数据库结构之后,您即可以建立类和对象,用户将在“Universe〞窗格中看到这些类和对象,并且将使用它们依据数据库结构运行查询,以便生成文档和报表。
什么是对象?
〔1〕什么是对象?
在BusinessObjects产品中,对象是Universe中一种命名的元素,它代表数据库中的一个列或函数。
对象以图标的形式显示在“Universe〞窗格中。
每个对象都代表最终用户业务环境中使用的一个有意义的实体、事实或计算。
您在Designer的“Universe〞窗格中创立的对象就是最终用户在报告工具中看到和使用的对象。
也可以创立仅供Designer中使用的对象,您可以在WebIntelligence用户看到的“Universe〞窗格中隐藏这些对象。
WebIntelligence用户将对象从“Universe〞窗格拖到“查询〞窗格即可运行查询,并使用返回的数据创立报表。
每个对象都映射到目标数据库中的一个列或函数,并且,当在“查询〞窗格中使用时,每个对象都会推导出一个Select语句。
当组合了多个对象时,Select语句依据包括SQL〔由每个对象推导出〕并应用缺省Where子句的数据库运行。
下列图显示了“Universe〞窗格中的对象,以及Designer“Universe〞窗格中的相同对象。
Designer“Universe〞窗格中的每个对象都映射为Universe模式中的一个列,并推导出一个Select语句〔在查询中使用时〕。
作为Universe设计员,您可以使用Designer来创立对象,WebIntelligence用户将这些对象包括在“查询〞窗格中,以便运行查询。
〔2〕对象类型
给你的对象分配角色,即对象类型。
〔3〕什么是类?
类是对象的容器。
类相当于Windows环境中的文件夹。
可以创立类来
容纳在Universe中具有共同用途的对象。
使用@函数
对象是可以编辑的,它对于列或者函数。
开发过程中,常见的就是使用这种@函数,例如中
case@Prompt('WD','A',,,)
when'1'then"TKMX".TKXZ_DM
when'2'then"TKMX".ZSXM_DM
end
含义是名为WD的变量值为‘1’,这个对象返回退库类型代码,‘2’那么返回征收工程代码,当你编辑完毕的时候,点击“分析〞,分析通过那么此对象符合规那么。
第三章报表设计
案例1:
制作一张简单的报表
一、【问题描述】
使用BusinessObjectXIRelease2〔简称BO〕制作一张简单的报表。
二、【分析过程】
第一步,根据业务逻辑进行语义层设计〔工具Designer〕;
第二步,根据业务展现需求进行报表设计〔登录到InfoView〕;
第三步,展现在jsp页面前台
三、【解决途径】
〔1〕SQL语句分析通过后,保存Universe并导出
〔2〕新建WebIntelligence文档,
(3)保存文档
〔5〕文档具体编辑
〔6〕获得文档的SI_CUID
四、【经验总结】
无
案例2:
插入表
一、【问题描述】
当您创立新文档时,WebIntelligence会生成一个带有垂直表和标准格式的新报表。
这个初始表中包含文档后面查询中的所有数据。
〔自动生成〕
您可以编辑表内容、个性化其格式或将该表转换为不同的表类型或统计图。
您还可以将多个表插入到同一报表中或同一文档内的新报表中。
〔自定义〕
二、【分析过程】
WebIntelligence报表中显示信息的不同表模板:
•垂直表〔数据展示方向是纵向的〕
•水平表〔数据展示方向是横向的〕
•交叉表〔联想到x,y轴〕
•表单〔还没有接触〕
三、【解决途径】
可以在交叉表中包括多个维。
例如,此交叉表显示两个维。
[销售收入]度量的值是每一行按季度列出的每个省/州的值。
注意,这种页眉中数据相同的不能合并单元格
四、【经验总结】
无
案例3:
设置表格式
一、【问题描述】
当您创立新文档时,WebIntelligence会生成一个带有垂直表和标准格式的新报表。
这个初始表中包含文档后面查询中的所有数据。
〔自动生成〕
您可以编辑表内容、个性化其格式或将该表转换为不同的表类型或统计图。
您还可以将多个表插入到同一报表中或同一文档内的新报表中。
〔自定义〕
二、【分析过程】
WebIntelligence报表中显示信息的不同表模板:
•垂直表〔数据展示方向是纵向的〕
•水平表〔数据展示方向是横向的〕
•交叉表〔联想到x,y轴〕
•表单〔还没有接触〕
三、【解决途径】
〔1〕可以在交叉表中包括多个维。
例如,此交叉表显示两个维。
[销售收入]度量的值是每一行按季度列出的每个省/州的值。
注意,这种页眉中数据相同的不能合并单元格
〔2〕给现有表应用不同的模板
四、【经验总结】
〔1〕拖放操作将行或列添加到表
〔2〕替换表列和表行
〔3〕通过移动表列或表行创立交叉表
〔4〕利用单元格之间的边框,背景颜色,宽度隐藏一列单元格
案例4:
独立单元格
一、【问题描述】
独立单元格是在报表中独立存在的单一的单元格。
您以使用独立单元格显示信息,为报表增加含义。
二、【分析过程】
三、【解决途径】
四、【经验总结】
无
案例5:
设置数字和日期格式
一、【问题描述】
可以从预定义的格式范围中选择格式或创立自己的定制格式。
二、【分析过程】
三、【解决途径】
四、【经验总结】
无
案例6:
使用节、拆分和排序
一、【问题描述】
如何对报表中显示的信息进行组织,使报表易于读取和导航。
二、【分析过程】
BO提供了有关以下各项的信息:
•使用节对报表上的数据进行分组
•使用拆分对表中的数据进行分组
•使用排序来组织表上的节和数据
三、【解决途径】
〔1〕创立节点
〔2〕可以在表或交叉表上插入一个或多个拆分。
您可以在显示维或明细的任意列或行上插入拆分。
注意:
您不能在显示度量的列或行上插入拆分。
四、【经验总结】
〔1〕下面显示了拆分和节的不同之处
〔2〕拆分是对维度或者明细拆分,不能对度量进行拆分:
•如果选定表是垂直表,那么所有拆分将应用于列。
这样的拆分称为“垂直拆分〞。
•如果选定表是水平表,那么所有拆分将应用于行。
这样的拆分称为“水平拆分〞。
•如果选定表是交叉表,那么拆分可以应用于行或列。
可以选择水平拆分和垂直拆分的优先级。
案例7:
过滤报表中显示的值
一、【问题描述】
如何过滤WebIntelligence报表中显示的数据,以便集中提供您因某种特定业务目的而关的信息。
可以通过应用报表过滤器来完成此操作。
二、【分析过程】
创立报表过滤器,需要指定三个元素:
•过滤的对象
•运算符
•值
三、【解决途径】
(1)给报表应用多个过滤器
(2)查看给报表应用的过滤器
四、【经验总结】
无
案例8:
使用标准计算
一、【问题描述】
如何插入标准业务计算
二、【分析过程】
使用标准计算
三、【解决途径】
四、【经验总结】
无
案例9:
使用报警器突出显示关键结果
一、【问题描述】
报警器使您能够采用能让结果在报表上突出显示出来的格式来突出显示特定的结果范围。
二、【分析过程】
需要指定五个元素:
•名称
•对象或单元格内容
•运算符
•操作数〔值或其他对象〕
•条件格式设置
三、【解决途径】
第1步:
启动“报警器编辑器〞并为新报警器命名
第2步:
定义条件
第3步:
使用报警器个性化单元格的格式设置
第4步:
添加子报警器〔可选〕
第5步:
保存报警器
第6步:
为整个文档更改报警器的优先级〔可选〕
四、【经验总结】
〔1〕您可以将报警器应用于表体单元格〔按列或行〕、节单元格、页眉单元格和自由单元格。
但是,不能将报警器应用于整个表或表单,或应用于统计图。
〔2〕区分报警器与报警器,报警器与子报警器之间的关系
〔3〕使用公式创立高级报警器
案例10:
WebIntelligence函数
一、【问题描述】
介绍WebIntelligence中提供的函数
二、【分析过程】
✓全部此表下面列出的所有类别的所有函数。
✓聚合聚合数据〔例如,通过对一组值求和或求平均值〕
✓字符处理字符串
✓日期和时间返回日期或时间数据
✓文档返回有关文档的数据
✓数据提供者返回有关文档数据提供者的数据
✓逻辑返回TRUE或FALSE
✓数字返回数字数据
✓其它不属上述任何类别的函数
三、【解决途径】
四、【经验总结】
〔1〕dateFormatDate(datedate_to_format;stringdate_format)
例如:
FormatDate([税费所属期起];"yyyy-MM-dd")
〔2〕stringSubStr(stringinput_string,integerstart,integerlength)
例如:
"支付时间段:
"+Substr([支付时间起];1;4)+"年"+Substr([支付时间起];6;2)+"月"+Substr([支付时间起];9;2)+"日-"+Substr([支付时间止];1;4)+"年"+Substr([支付时间止];6;2)+"月"+Substr([支付时间止];9;2)+"日"+"单位:
元"
〔3〕If(boolean_expr;value_if_true;value_if_false)
例如:
If([区分标记]="1";"城区小计";"县区小计")
〔4〕stringLeft(stringinput_string;integernumber_of_characters)
例如:
If(Left([行业代码];1)="1";1;0)
案例11:
报表的钻取
一、【问题描述】
比方说现在有一组数据如下:
区县
所
组
户数
玄武
玄武一所
玄武一组
100
玄武
玄武一所
玄武二组
200
玄武
玄武二所
玄武一组
200
玄武
玄武二所
玄武二组
300
玄武
玄武二所
玄武三组
100
白下
白下一所
白下一组
150
白下
白下一所
白下二组
100
白下
白下二所
白下一组
100
白下
白下三所
白下一组
200
需求要求,第一层展示区县机关的数据,第二层展示管理所的数据,第三层展示管理组的数据。
玄武
900
白下
550
点击【玄武】,下钻到所:
玄武一所
300
玄武二所
600
点击【玄武一所】,下钻到组:
玄武一组
100
玄武二组
200
这就需要何使WebIntelligence文档中的报表变得可钻取,了解每一步数据的汇总后的详细信息。
二、【分析过程】
首先介绍钻取的本质。
报表技术本身是对SQL的封装。
他的钻取功能类似于SQL中的GROUPBY。
第一层,相当于“select区县,sum(户数)fromtablegroupby区县〞;
第二层,相当于“select所,sum(户数)fromtablewhere区县=玄武groupby所〞;
第三层,相当于“select组,sum(户数)fromtablewhere区县=玄武and所=玄武一所groupby组〞。
其次,钻取顺序的问题。
钻取的顺序按上面的需求中设定的,并不是报表有默认的顺序。
另外,钻取的顺序是可以反过来,甚至可以没有特定的含义。
这么说,是因为之前我们在开发中,觉得只有数据有必然的上下级关系才能实现钻取。
事实和我们理解的完全相反,BO能在任何维度之间钻取。
比方说我数据中加一列
年份
区县
所
组
户数
2021
玄武
玄武一所
玄武一组
100
2021
玄武
玄武一所
玄武二组
200
2021
玄武
玄武二所
玄武一组
200
2021
玄武
玄武二所
玄武二组
300
2021
玄武
玄武二所
玄武三组
100
2021
白下
白下一所
白下一组
150
2021
白下
白下一所
白下二组
100
2021
白下
白下二所
白下一组
100
2021
白下
白下三所
白下一组
200
钻取顺序:
年份-所-区县-组,区县-年份-所-组…,所有可能的排列顺序。
所以实现钻取的时候,第一步,准备要钻取的维度,比方说年份-区县-所-组;
第二步,设定钻取维度的顺序;
第三步,启动钻取功能。
三、【解决途径】
〔1〕设定顺序
第一种,Universe中,使用层次编辑器
。
第二种,钻取的所有维度放在一个类中,会自动按照从上到下的顺序实现钻取
〔2〕启动钻取。
切换到钻取模式:
1当文档在WebIntelligenceJa