数据模型编辑器
数据模型编辑器使您能够将来自多个数据集的数据合并到单个 XML 数据结构中。
来自多个数据源的数据集可以合并为顺序 XML,也可以在行级别合并,以创建单个组合的分层 XML。使用数据模型编辑器,您可以轻松合并数据集类型的数据。
数据模型编辑器设计为左侧的组件窗格和右侧的工作窗格。在左窗格中选择一个组件将在工作区中启动该组件的相应字段。
数据模型编辑器支持以下内容
-
组数据 - 创建组以组织报表中的列。组可以做两件事:将查询的数据分成集,以及筛选查询的数据。
创建查询时,数据引擎会创建一个组,其中包含查询选择的列;您可以创建组来修改数据模型中显示的数据的层次结构。组主要用于您希望以不同于其他列的方式处理某些列的情况。例如,创建组以生成分类汇总或创建中断。
-
链接数据 - 定义数据集之间的主从链接,以在多个级别对数据进行分组。
-
聚合数据 - 创建组级别总计和小计。
-
转换数据 - 修改源数据以符合业务条款和报告要求。
-
创建计算 - 计算报表所需的数据值,但在基础数据源中不可用。
数据模型编辑器提供元素级别、组级别和全局级别的功能。请注意,并非所有数据集类型都支持所有函数。有关限制,请参阅数据集类型随附的重要说明部分。下图突出显示了数据模型编辑器中提供的一些功能和操作。
启动数据模型编辑器
从标题或主页启动数据模型编辑器。
要启动数据模型编辑器,请执行以下操作:
- 使用以下方法之一:
-
单击“新建”,然后单击“数据模型”。
-
在“创建区域”下,单击“数据模型”。
-
关于数据模型编辑器工具栏
顶部的数据模型编辑器工具栏为您提供了管理私有数据源、查看数据、创建报表和保存数据模型的选项。
选择 | 描述 |
---|---|
驗證 | 验证用于数据集、LOV 和突发定义的查询。 |
查看数据 | 显示“数据”选项卡,您可以在其中查看和生成示例数据。 |
创建报告 | 使用此数据模型创建新报表。 |
保存/另存为 |
选择“保存”将正在进行的工作保存到现有数据模型对象,或选择“另存为”将数据模型另存为目录中的新对象。 如果创建数据模型,然后在不保存数据模型编辑器的情况下导航出数据模型编辑器,则草稿或临时数据模型条目可能会显示在主页的“最近”部分中。这些条目无法手动删除,但会在 24 小时后自动删除。 |
帮助 | 查看联机帮助。 |
关于界面
默认情况下,您创建的数据集在关系图视图中显示为单独的对象。
数据集结构构建器有三个视图:
-
关系图视图 - 关系图视图显示数据集,并允许以图形方式创建链接和筛选器、基于表达式添加元素、添加聚合函数和全局级函数、编辑元素属性以及删除元素。关系图视图通常是用于构建数据结构的视图。
-
结构视图 - 结构视图有两种模式:
表视图和输出
表视图显示表中的元素属性,并允许更新 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) 作为来自双重的 CURDATAREF
-
匿名块/存储过程
发布服务器支持执行 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 — 显示查询。
-
结果 — 显示查询结果。
-
使用查询生成器生成查询
您可以使用查询生成器构建查询。
使用查询生成器构建查询:支持的列类型
所有类型的列在“设计”窗格中显示为对象。不能为每个查询选择 60 个以上的列。
支持的列类型 限制 瓦尔查尔2,查尔 那 数 那 日期、时间戳 不支持数据类型。 TIMESTAMP WITH LOCAL TIMEZONE
二进制大型对象 (BLOB) BLOB 可以是图像、文本或 XML 数据。在查询生成器中执行查询时,BLOB 不会显示在“结果”窗格中;但是,当保存到数据模型编辑器时,查询会正确构造。由于 BIJDBC 驱动程序的限制,Oracle BI EE 数据源不支持 BLOB 数据。 如果要使用具有图像数据类型的 BLOB 数据列,请使用 RTF 模板。
字符大对象 (CLOB) 发布服务器不支持查询 Oracle BI EE 数据源中的 CLOB 列。 将对象添加到设计窗格
选择要添加到“设计”窗格的每个对象。
-
添加对象时,每个列名旁边都会显示一个表示数据类型的图标。
-
选择列时,该列将显示在“条件”选项卡上。“条件”选项卡上的“显示”复选框控制查询结果中是否包括列。默认为选中此复选框。
-
若要选择前 20 列,请单击对象左上角的小图标,然后选择“全部选中”。
-
您还可以通过按 CTRL + 输入 键来执行查询。
- 选择一个对象。
- 选中要包含在查询中的每个列的复选框。
- 若要执行查询并查看结果,请选择“结果”。
删除或隐藏设计窗格中的对象
可以在“设计”窗格中删除或隐藏对象。
要删除对象:
-
单击对象右上角的“删除”。
暂时隐藏对象中的列:
- 单击显示/隐藏列。
查询条件
条件使您能够筛选和标识要使用的数据。
选择对象中的列时,可以在“条件”选项卡上指定条件。您可以修改列别名、应用列条件、对列进行排序或应用函数。
条件属性 描述 条件
该条件修改查询的 WHERE 子句。指定列条件时,必须包括相应的运算符和操作数。支持所有标准 SQL 条件。例如:
>=10
='VA'
在(从部门选择dept_no)
在系统日期和系统日期之间 + 15
功能
指定函数。可用的参数函数包括:
-
数字列 — 计数、非重复计数、平均值、最大值、最小值、总和
-
VARCHAR2, CHAR 列 — 计数, 计数非重复, 初始化帽, 长度, 下, ltrim, rtrim, 修剪, 上
-
日期、时间戳列 - 计数、非重复计数
分组依据
指定使用聚合函数时用于分组的列。仅适用于输出中包含的列。
当您选择列并定义条件时,查询生成器会为您编写 SQL。若要查看基础 SQL,请选择“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 服务器创建数据集时,请记住以下几点:
-
使用 SQL 数据编辑器或查询生成器针对 Oracle BI 服务器创建 SQL 查询时,将生成逻辑 SQL,而不是像其他数据库源那样生成物理 SQL。
-
不支持分层列。始终返回最高级别。
-
在主题区域中,已经创建了表之间的连接条件; 因此,您不必在查询生成器中创建联接。查询生成器 不公开主键。
您可以使用数据模型编辑器的创建链接功能链接数据集。请参见创建元素级链接。对于从 Oracle BI 服务器创建的数据集,单个数据模型限制为两个元素级链接。
-
在查询生成器中,针对 Oracle BI 服务器的查询不支持“条件”选项卡上显示的“排序顺序”和“分组依据”函数。如果输入“排序顺序”或选中“分组依据”复选框,则查询生成器将构造 SQL,并将其写入“发布服务器 SQL 查询”文本框,但在尝试关闭“数据集”对话框时,查询将失败验证。
若要对 SQL 查询检索的数据应用分组,可以改用数据模型编辑器的分组依据函数。请参见创建子组。
-
如果将参数传递给 Oracle BI 服务器,并且为“可以全选”选择“传递的空值”,请确保处理 查询中的空值。
定义针对 Oracle BI 服务器的 SQL 查询
针对 Oracle BI 服务器启动查询生成器时,查询生成器将显示目录中的主题区域。您可以将主题区域拖动到“查询构建器”工作区以显示列。选择要包含在数据模型中的列。
要定义针对 Oracle BI 服务器的 SQL 查询:针对甲骨文的查询说明 融合云应用程序表
甲骨文的特殊注意事项 Fusion Cloud Applications 客户在针对 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 链接。“订单”数据集是“客户”数据集的子项。
该示例生成下图所示的数据结构。
数据集使用指南
建议在生成数据模型时遵循某些准则。
-
尽可能减少数据模型中的数据集或查询数量。通常,数据集和查询越少,数据模型的运行速度就越快。虽然多查询数据模型通常更易于理解,但单查询数据模型往往执行得更快。请务必了解,在父子查询中,对于每个父查询,都会执行子查询。
-
只应在以下情况下使用多查询数据模型:
-
执行查询类型(如 SQL 查询)不支持的功能 径直。
-
支持复杂视图,例如分布式查询或 GROUP BY 查询。
-
在没有视图或不想使用视图时模拟视图。
-
-