Oracle Business Intelligence Enterprise Edition(DataModel详解)
1. BI Publisher介绍
Oracle BI publisher,它的前身是oracle xml publisher。它是对一数据集(数据集简单说就是一张表)的展现定义多个模板。
业务用户可以通过使用通用桌面工具亲自构建报表的布局和规则。开发工人员可以专注于用最有效的方式提取数据。部署时间将缩短。而且,获得培训最少的业务用户也能够根据工程师提供的数据源来设计模板和报表,从而大大降低了拥有成本。
2.基本工具
Bipublisher本地运行环境:
1.先安装jdk,保证自己jdk版本为1.8或以上,文件:
打开win+R,输入cmd,在控制台输入 java -version查看jdk版本
2.安装Office,版本Office2007以上(根据自己电脑位数)
3.安装BIPublisherDesktop64(根据自己电脑位数),文件:
重启office,即可在word或excel看见BIpubliser选项栏,导入xml数据文件即可本地化报表开发
3.创建DtatModel
4.接下来通过开发RTF、EXCEL、PDF模板来实现对数据的承接模板
数据模型编辑器#
数据模型编辑器使您能够将来自多个数据集的数据合并到单个 XML 数据结构中。
来自多个数据源的数据集可以合并为顺序 XML,也可以在行级别合并,以创建单个组合的分层 XML。使用数据模型编辑器,您可以轻松合并数据集类型的数据。
数据模型编辑器设计为左侧的组件窗格和右侧的工作窗格。在左窗格中选择一个组件将在工作区中启动该组件的相应字段。
数据模型编辑器支持以下内容
-
组数据 - 创建组以组织报表中的列。组可以做两件事:将查询的数据分成集,以及筛选查询的数据。
创建查询时,数据引擎会创建一个组,其中包含查询选择的列;您可以创建组来修改数据模型中显示的数据的层次结构。组主要用于您希望以不同于其他列的方式处理某些列的情况。例如,创建组以生成分类汇总或创建中断。
-
链接数据 - 定义数据集之间的主从链接,以在多个级别对数据进行分组。
-
聚合数据 - 创建组级别总计和小计。
-
转换数据 - 修改源数据以符合业务条款和报告要求。
-
创建计算 - 计算报表所需的数据值,但在基础数据源中不可用。
数据模型编辑器提供元素级别、组级别和全局级别的功能。请注意,并非所有数据集类型都支持所有函数。有关限制,请参阅数据集类型随附的重要说明部分。下图突出显示了数据模型编辑器中提供的一些功能和操作。
启动数据模型编辑器#
从标题或主页启动数据模型编辑器。
要启动数据模型编辑器,请执行以下操作:
- 使用以下方法之一:
-
单击“新建”,然后单击“数据模型”。
-
在“创建区域”下,单击“数据模型”。
-
数据集结构构建器有三个视图:
-
关系图视图 - 关系图视图显示数据集,并允许以图形方式创建链接和筛选器、基于表达式添加元素、添加聚合函数和全局级函数、编辑元素属性以及删除元素。关系图视图通常是用于构建数据结构的视图。
-
结构视图 - 结构视图有两种模式:
表视图和输出
表视图显示表中的元素属性,并允许更新 XML 元素别名、元素的表示名称、排序、空值和重置选项。下图显示了结构表视图。
“输出”视图提供生成的 XML 结构的清晰视图。无法更新“输出”视图。该图显示了“输出”视图。
-
代码视图 - 代码视图显示由数据引擎读取的数据结构生成器创建的数据结构代码。可以在代码视图中更新内容。该图显示了代码视图。
使用 SQL 查询创建数据集#
输入 SQL 查询#
使用以下步骤输入 SQL 查询。
要输入 SQL 查询:创建非标准 SQL 数据集#
除了使用基本 SQL 命令创建数据集外,还可以使用更复杂的命令创建数据集。
过程调用
使用此查询类型可以调用数据库过程。例如,Oracle PL/SQL 语句以 开头。使用此 SQL 数据类型时,数据模型结构选项卡上不会显示任何元数据,因此无法修改数据结构或数据字段。要使用过程调用构造 SQL,请直接在文本框中输入代码,或者从其他 SQL 编辑器复制并粘贴代码。不能使用查询生成器来修改或生成这些类型的查询。
BEGIN
非标准 SQL
使用此查询类型可以发出可包含以下内容的 SQL 语句:
-
返回嵌套结果集的游标语句
例如:
Ex:SELECT TO_CHAR(sysdate,'MM-DD-YYYY') CURRENT_DATE , CURSOR (SELECT d.order_id department_id, d.order_mode department_name , CURSOR (SELECT e.cust_first_name first_name, e.cust_last_name last_name, e.customer_id employee_id, e.date_of_birth hire_date FROM customers e WHERE e.customer_id IN (101,102) ) emp_cur FROM orders d WHERE d.customer_id IN (101,102) ) DEPT_CUR FROM dual
-
返回游标的函数
REF
例如:
create or replace PACKAGE REF_CURSOR_TEST AS TYPE refcursor IS REF CURSOR; pCountry VARCHAR2(10); pState VARCHAR2(20); FUNCTION GET( pCountry IN VARCHAR2, pState IN VARCHAR2) RETURN REF_CURSOR_TEST.refcursor; END;
create or replace PACKAGE BODY REF_CURSOR_TEST AS FUNCTION GET( pCountry IN VARCHAR2, pState IN VARCHAR2) RETURN REF_CURSOR_TEST.refcursor IS l_cursor REF_CURSOR_TEST.refcursor; BEGIN IF ( pCountry = 'US' ) THEN OPEN l_cursor FOR SELECT TO_CHAR(sysdate,'MM-DD-YYYY') CURRENT_DATE , d.order_id department_id, d.order_mode department_name FROM orders d WHERE d.customer_id IN (101,102); ELSE OPEN l_cursor FOR SELECT * FROM EMPLOYEES; END IF; RETURN l_cursor; END GET; END REF_CURSOR_TEST;
使用查询创建 SQL 数据集作为选择REF_CURSOR_TEST。GET(:P CNTRY,:P STATE) 作为来自双重的 CURDATA -
匿名块/存储过程
发布服务器支持执行 PL/SQL 匿名块。您可以在 PL/SQL 块中执行计算并返回结果集。发布者使用可调用语句来执行匿名块。
要求是:
-
PL/SQL 块必须返回游标类型的结果集
REF
-
必须使用名称 .如果未正确声明名称,则第一个绑定变量将被视为 out 变量类型并与游标绑定
xdo_cursor;
REF
-
使用 name 声明数据模型参数。此名称保留用于过程/匿名块的 out 变量类型。
xdo_cursor
例:
DECLARE type refcursor is REF CURSOR; xdo_cursor refcursor; empno number; BEGIN OPEN :xdo_cursor FOR SELECT * FROM EMPLOYEES E WHERE E.EMPLOYEE_ID = :P2; COMMIT; END;
-
-
如果使用 if-else 表达式,则可以执行条件查询。可以在单个数据集中定义多个 SQL 查询,但根据表达式值,在运行时只执行一个查询。该表达式验证并返回布尔值。如果值为 true,则执行 SQL 查询的该部分。
限制是:
-
支持以下语法来计算表达式:
$if{
$elseif{
$else{}}
-
表达式必须返回真、假
-
仅支持以下运算符:
== <= >= < >
Example: create sql dataset with following query $if{ (:P_MODE == PRODUCT) }$ SELECT PRODUCT_ID ,PRODUCT_NAME ,CATEGORY_ID ,SUPPLIER_ID ,PRODUCT_STATUS ,LIST_PRICE FROM PRODUCT_INFORMATION WHERE ROWNUM < 5 $elsif{(:P_MODE == ORDER )}$ SELECT ORDER_ID ,ORDER_DATE ,ORDER_MODE ,CUSTOMER_ID ,ORDER_TOTAL ,SALES_REP_ID FROM ORDERS WHERE ROWNUM < 5 $else{ SELECT PRODUCT_ID , WAREHOUSE_ID ,QUANTITY_ON_HAND FROM INVENTORIES WHERE ROWNUM < 5 }$ $endif$
-
使用非标准 SQL 语句创建数据集时,数据模型结构页签不显示元数据,因此无法修改数据结构或数据字段。不能使用查询生成器修改或生成这些类型的查询。
要为非标准 SQL 数据集定义 XML 行标记,请执行以下操作:
在数据模型定义中用于为非标准 SQL 查询数据集定义 XML 行标记。这允许您输入有效的标签名称。如果该属性为空,则在运行时默认为 ROW。
xmlRowTagName=""
数据集定义:
<dataSet name="Q1" type="simple"> <sql dataSourceRef="bipdev4-demo" nsQuery="true" xmlRowTagName=""> ,, </sql> </dataset>
使用 SQL 查询生成器#
使用查询生成器无需编码即可生成 SQL 查询。查询生成器使您能够以最少的 SQL 知识搜索和筛选数据库对象、选择对象和列、创建对象之间的关系以及查看格式化查询结果。
使用查询生成器生成查询#
您可以使用查询生成器构建查询。
使用查询生成器构建查询:编辑保存的查询#
将查询从查询生成器保存到数据模型编辑器时,您将 还可以使用查询生成器来编辑查询。
如果对查询进行了修改,或者未使用查询生成器 构造它,在启动查询生成器进行编辑时可能会收到错误 查询。如果查询生成器无法解析查询,您可以编辑语句 直接在文本框中。
不能使用查询生成器编辑自定义查询或高级查询。
编辑已保存的查询:
- 选择 SQL 数据集。
- 在工具栏上,单击“编辑所选数据集”以启动“编辑数据集”对话框。
- 单击“查询生成器”将查询加载到查询生成器。
- 编辑查询,然后单击保存。
向查询添加绑定变量#
向 SQL 查询添加词法引用#
可以使用词法引用来替换出现在 SELECT、FROM、WHERE、GROUP BY、ORDER BY 或 HAVING 之后的子句。
如果希望参数在运行时替换多个值,请使用词法引用。您还可以使用词法引用在查询中包含弹性字段。仅在针对 Oracle 应用程序的查询中支持词法引用。
使用以下语法在 SQL 查询中创建词法引用:
¶metername
- 在创建查询之前,请在 PL/SQL 默认包中为查询中的每个词法引用定义一个参数。数据引擎使用这些值来替换词法参数。
- 在数据模型编辑器的“属性”页上,指定 Oracle DB 默认包。
- 在数据模型编辑器中,创建“数据之前”事件触发器以调用 PL/SQL 包。
- 创建包含词法引用的 SQL 查询。
- 单击“确定”关闭 SQL 查询时,系统会提示您输入参数。
例如,创建一个名为 的包。在包中,定义一个名为 的参数:
employee
employee
where_clause
Package employee AS where_clause varchar2(1000); ..... Package body employee AS ..... where_clause := 'where DEPARTMENT_ID=10'; .....
在 SQL 查询中引用词法参数,您希望将参数替换为包中定义的代码,例如:
select "EMPLOYEES"."EMPLOYEE_ID" as "EMPLOYEE_ID", "EMPLOYEES"."FIRST_NAME" as "FIRST_NAME", "EMPLOYEES"."LAST_NAME" as "LAST_NAME", "EMPLOYEES"."SALARY" as "SALARY", from "OE"."EMPLOYEES" "EMPLOYEES" &where_clause
在“创建 SQL 数据集”对话框中单击“确定”时,词法引用对话框会提示您输入在 SQL 查询中输入的词法引用的值,如下图所示。输入在 PL/SQL 包中定义的词法引用的值。
在运行时,数据引擎将替换为包中定义的内容。
&where_clause
where_clause
关于定义针对 Oracle BI 服务器的 SQL 查询#
定义针对 Oracle BI 服务器的 SQL 查询#
针对 Oracle BI 服务器启动查询生成器时,查询生成器将显示目录中的主题区域。您可以将主题区域拖动到“查询构建器”工作区以显示列。选择要包含在数据模型中的列。
要定义针对 Oracle BI 服务器的 SQL 查询:针对Oracle的查询说明 融合云应用程序表#
-
不能使用 返回月份名称。此函数返回月份数。若要显示月份名称,请使用以下解决方案之一:
sysdate
to_char(sysdate,"mon")
-
使用以下语法设置布局中日期字段的格式:
<?format_date:fieldname;MASK)?>
-
若要根据月份编号显示月份名称,请在布局中使用以下语法:
<?xdoxslt:month_name(month, [abbreviate?], $_XDOLOCALE)?>
其中是月份的数值(一月 = 1),并且
month
[abbreviate?]
值 0 表示不缩写,1 表示缩写。例如:
<?xdoxslt:month_name(1, 0, $_XDOLOCALE)?>
返回一月
-
若要在数据模型中添加表达式,请使用以下表达式:
Format_date(date, format_String)
例如:
SUBSTRING(FORMAT_DATE(G_1.SYSDATE,MEDIUM),0,3)
返回 11 月(当当前为 11 月时)
SYSTDATE
-
使用数据模型#
数据模型关系图可帮助您快速轻松地为基于多个数据集的报表定义数据集、中断组和总计。
关于多部分不相关数据集#
关于多部分相关数据集#
为数据集或查询的一部分提取的数据可以由为另一部分提取的数据确定。结果通常称为大纲/详细信息或父/子关系,该关系通过两个数据集或查询之间的数据链接定义。
运行大纲/细节数据模型时,主(或父)查询的每一行都会对详细信息(或子项)执行查询,以仅检索匹配的行。
在下面的示例(下图)中,两个数据集通过元素客户 ID 链接。“订单”数据集是“客户”数据集的子项。
该示例生成下图所示的数据结构。
执行全局级函数#
使用全局级别函数,可以在顶级报表级别向报表数据集中添加元素。
您可以将以下类型的元素添加为顶级数据:
- 基于聚合函数的元素
- 基于表达式的元素
- 基于 PL/SQL 语句的元素(用于 Oracle 数据库数据源)
确保对全局级函数进行正确排序。全局级函数按顺序执行。
如果为任何计算元素和表达式选择数据类型 Integer 返回分数,数据不会被截断。全球一级 函数对象如下所示。基于聚合添加元素 函数,将元素拖到“拖放到此处以获取聚合函数”空间 对象。要添加基于表达式或 PL/SQL 的元素,请单击“菜单”,然后选择相应的操作。
通过表达式添加组级别或全局级别元素#
通过 PL/SQL 添加全局级元素#
PL/SQL 函数必须返回 VARCHAR 数据类型。
添加新参数#
通过为其分配名称和其他属性来创建参数。
您选择的参数名称不得超过数据库允许的标识符的最大长度。有关标识符长度限制,请参阅数据库文档。
使用布局编辑器设计报表布局时,报表输出的预览将使用参数的默认值。
您可以在报表级别配置行放置。报表定义支持参数的其他显示选项。
添加新参数:
创建文本参数#
文本类型参数提供一个文本框,提示用户输入要作为参数传递给数据源的文本条目。
要创建文本参数:创建菜单参数#
菜单类型参数向用户显示值列表。
必须先定义值列表。菜单类型参数仅支持字符串和整数的数据类型。
要创建菜单参数:
自定义菜单参数的显示#
报表中菜单参数的显示可以在报表定义中进一步自定义。
菜单类型参数支持将附加显示选项作为复选框或单选按钮的静态列表。
定义日期参数#
Date 类型参数提供了一个日期选取器,用于提示用户输入要作为参数传递给数据源的日期。
- 从“参数类型”列表中选择“日期”。下部窗格显示适合您选择的字段。
- 输入显示标签。显示标签是在用户查看报表时向用户显示的标签。例如:雇用日期。
- 输入文本字段大小作为整数。此字段确定用户可以在日期输入的文本框中输入的字符数。例如:10。
- 可选:如果要以 UTC 显示日期参数值,请选择忽略用户时区。
- 输入日期格式字符串。格式必须是 Java 日期格式,例如 MM-dd-yyyy。
- 可选:输入开始日期和结束日期。此处输入的日期定义日期选取器向用户显示的日期范围。例如,如果输入“日期开始日期”作为 01-01-1990,则日期选取器不允许用户选择 01-01-1990 之前的日期。将“日期留空”以启用所有将来的日期。
创建搜索参数#
您可以使用搜索类型参数提供一个用于输入搜索文本的框和一个搜索图标来搜索和列出与搜索匹配的值,以便用户可以选择。
使用搜索类型参数可在一长串值中查找值。在定义搜索类型参数之前,必须为参数创建 LOV。
要创建搜索类型参数,请执行以下操作:
- 在“数据模型组件”窗格中,单击“参数”,然后单击“创建新参数”。
- 输入参数的名称,从“数据类型”列表中选择“字符串”,然后输入参数的默认值。
- 从“参数类型”列表中选择“搜索”。
- 在“显示标签”字段中输入参数的标签。
- 从“值列表”列表中选择参数的 LOV。
- 可选:选择更改时刷新其他参数。
添加值列表#
您可以创建 SQL 查询或固定数据值的列表。
从 SQL 查询创建列表#
数据引擎需要值查询列表中的(显示)名称/值对。在值选择语句列表中,第一个列出的列用作显示名称,第二个列用于数据引擎传递给数据集查询中的参数的值。
如果查询仅返回一列,则相同的列值将用作向用户显示的值列表显示名称以及传递给参数的值。
- 从列表中选择数据源。
- 在下部窗格中,如果要为报表会话缓存查询结果,请选择“缓存结果(推荐)”。
- 输入 SQL 查询或使用查询生成器。下图显示了值的 SQL 查询类型列表。
下面显示的 SQL 查询仅从“部门”表中选择DEPARTMENT_NAME列。在这种情况下,值列表既在列表中显示查询结果,又将相同的值传递给数据集中的参数。下图显示了值显示条目的列表以及传递给数据集的值。菜单项和为P_DEPT显示的值是DEPARTMENT_NAME值。
如果要将DEPARTMENT_ID传递给数据集中的参数,并在列表中显示DEPARTMENT_NAME,请按如下所示构造 SQL 查询:
Select "DEPARTMENTS"."DEPARTMENT_NAME" as "DEPARTMENT_NAME", "DEPARTMENTS"."DEPARTMENT_ID" as "DEPARTMENT_ID" from "DEMO"."DEPARTMENTS" "DEPARTMENTS
下图显示了值显示条目的列表以及传递给数据集的值。菜单列出了DEPARTMENT_NAME,而P_DEPT显示的值是DEPARTMENT_ID值。
从固定数据集为每个所需的标签-值对创建列表。
创建标签-值对时,将在列表中向用户显示标签。该值将传递到数据引擎。
- 在下部窗格中,单击创建新的值列表图标以添加标签和值对。
- 对所需的每个标签值对重复此操作。
下图显示了值的固定数据类型列表。
创建计划触发器#
计划在计划运行报表作业时触发计划触发器。计划触发器的类型为 SQL 查询。
当计划运行报表作业时,计划触发器将执行为触发器定义的 SQL 语句。如果返回数据,则提交报表作业。如果未从触发器 SQL 查询返回数据,则会跳过报表作业。
与报表作业关联的计划触发器可以驻留在目录中的任何数据模型中。您无需在要为其执行触发器的报表的数据模型中创建计划触发器。可以在多个报表作业中重复使用计划触发器。
添加关键弹性字段#
您可以使用键弹性字段引用来替换出现在 SELECT、FROM、WHERE、ORDER BY 或 HAVING 之后的子句。
如果希望参数在运行时替换多个值,请使用弹性字段引用。数据模型编辑器支持以下弹性字段类型:
-
其中 - 这种类型的词汇用于 声明。使用它来修改 WHERE 子句,以便 SELECT 语句可以根据关键 Flexfield 段数据进行筛选。
-
排序依据 - 这种类型的词汇在 ORDER BY 中使用 部分。使用它来获取列表达式的列表,以便 生成的输出可以按弹性段值排序。
-
选择 - 这种类型的词汇用于 声明。使用它来检索和处理关键弹性场 (kff) 代码 基于词汇定义的组合相关数据。
-
过滤器 - 这种类型的词汇用于 声明。使用它来修改 WHERE 子句,以便 SELECT 语句可以根据从 Oracle 企业版传递的筛选器 ID 进行筛选 调度服务。
-
段元数据 - 使用它来检索与弹性字段相关的 元数据。您无需编写 PL/SQL 代码即可检索此元数据。 相反,定义一个虚拟的 SELECT 语句,然后使用此词法来获取 元数据。此词法应返回一个常量字符串。
设置数据模型的弹性字段组件后,使用以下语法在 SQL 查询中创建弹性字段词法引用:
&LEXICAL_TAG ALIAS_NAME
例如:
&FLEX_GL_BALANCING alias_gl_balancing
输入 SQL 查询后,单击“确定”
将参数传递给突发查询#
您可以使用数据模型中定义的参数传递突发 XML 元素的值。
例如,如果您希望能够在提交时选择模板,则可以在数据模型中定义参数并在查询中使用语法。以下示例演示了突发查询中参数的此用例。
:parameter_name
假定报表定义包含三种布局:布局 1、布局 2 和布局 3。在提交时,您希望选择要使用的布局(或 TEMPLATE,如突发查询中定义)。
将参数传递给突发查询:
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix