Loading

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。使用数据模型编辑器,您可以轻松合并数据集类型的数据。

数据模型编辑器设计为左侧的组件窗格和右侧的工作窗格。在左窗格中选择一个组件将在工作区中启动该组件的相应字段。

数据模型编辑器支持以下内容

  • 组数据 - 创建组以组织报表中的列。组可以做两件事:将查询的数据分成集,以及筛选查询的数据。

    创建查询时,数据引擎会创建一个组,其中包含查询选择的列;您可以创建组来修改数据模型中显示的数据的层次结构。组主要用于您希望以不同于其他列的方式处理某些列的情况。例如,创建组以生成分类汇总或创建中断。

  • 链接数据 - 定义数据集之间的主从链接,以在多个级别对数据进行分组。

  • 聚合数据 - 创建组级别总计和小计。

  • 转换数据 - 修改源数据以符合业务条款和报告要求。

  • 创建计算 - 计算报表所需的数据值,但在基础数据源中不可用。

数据模型编辑器提供元素级别、组级别和全局级别的功能。请注意,并非所有数据集类型都支持所有函数。有关限制,请参阅数据集类型随附的重要说明部分。下图突出显示了数据模型编辑器中提供的一些功能和操作。


xdo11g_dm_viewactionsmenu.gif说明如下

启动数据模型编辑器

从标题或主页启动数据模型编辑器。

要启动数据模型编辑器,请执行以下操作:

  • 使用以下方法之一:
    • 单击“新建”,然后单击“数据模型”。

    • “创建区域”下,单击“数据模型”。


xdo11g_dse_2a.gif说明如下

数据集结构构建器有三个视图:

  • 关系图视图 - 关系图视图显示数据集,并允许以图形方式创建链接和筛选器、基于表达式添加元素、添加聚合函数和全局级函数、编辑元素属性以及删除元素。关系图视图通常是用于构建数据结构的视图。

  • 结构视图 - 结构视图有两种模式:

    表视图和输出

    表视图显示表中的元素属性,并允许更新 XML 元素别名、元素的表示名称、排序、空值和重置选项。下图显示了结构表视图。


    xdo11g_dme_struct_view3.gif说明如下

    输出”视图提供生成的 XML 结构的清晰视图。无法更新“输出”视图。该图显示了“输出”视图。


    xdo11g_dme_struct_output1.gif说明如下

  • 代码视图 - 代码视图显示由数据引擎读取的数据结构生成器创建的数据结构代码。可以在代码视图中更新内容。该图显示了代码视图。


    xdo11g_dme_codeview1.gif说明如下
     

    使用 SQL 查询创建数据集

    输入 SQL 查询

    使用以下步骤输入 SQL 查询。

    要输入 SQL 查询:
    1. 单击“新建数据集”,然后单击“SQL 查询”。
    2. 在创建新数据集的对话框中,输入数据集的名称。
    3. 数据源默认为您在“属性”页上选择的默认数据源。如果不使用此数据集的默认数据源,请从列表中选择“数据源”。

      还可以将专用数据源连接用作 SQL 查询数据集的数据源。

    4. 从 SQL 类型下拉列表中选择标准 SQL。标准 SQL 用于解释为理解数据库模式的普通 SELECT 语句。
    5. 输入 SQL 查询或单击查询构建器以启动查询构建器页面。
    6. 如果在查询中使用弹性字段、绑定变量或其他特殊处理,请编辑查询生成器返回的 SQL 代码以包含所需的语句。

      如果为嵌入在 SELECT 语句中的文本包含词法引用,则必须替换值才能获得有效的 SQL 语句。

    7. 输入查询后,单击“确定”进行保存。对于标准 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 知识搜索和筛选数据库对象、选择对象和列、创建对象之间的关系以及查看格式化查询结果。

    使用查询生成器生成查询

    您可以使用查询生成器构建查询。

    使用查询生成器构建查询:
    1. 选择一个架构。

      “架构”列表显示数据源中的所有可用架构。您可能无权访问该列表中的所有架构。

    2. 将对象添加到“设计”窗格并选择列。

      “对象选择”窗格列出了所选架构中的表、视图和实例化视图。对于 Oracle 数据库,该窗格还会列出同义词。从列表中选择对象时,该对象将显示在“设计”窗格中。使用“设计”窗格可以指定如何在查询中使用所选对象。

      您可能需要使用“搜索”字段输入搜索字符串。如果数据源包含的表超过 100 个,请使用搜索功能查找和选择对象。

    3. 可选:在对象之间建立关系。
    4. 为任何重复列添加唯一的别名。
    5. 可选:创建查询条件。
    6. 执行查询并查看结果。

     

    手动联接对象

    通过在“设计”窗格中选择“联接”列手动创建联接。

    手动联接对象:

    1. 从“对象选择”窗格中,选择要联接的对象。
    2. 确定要联接的列。

      通过选择列名称旁边的“联接”列来创建联接。“联接”列显示在数据类型的右侧。当光标位于适当位置时,将显示以下帮助提示:

      单击此处选择要加入的列

    3. 为第一个对象选择适当的“联接”列。

      选中后,“联接”列将变暗。要取消选择“联接”列,只需再次选择它或按 ESC 键。

    4. 为第二个对象选择适当的“联接”列。

      连接时,线连接两列。下面显示了一个示例。


      xdosa_querybuilder4.gif说明如下

    5. 选择要包含在查询中的列。通过将光标放在连接线上,可以查看由连接生成的 SQL 语句。
    6. 单击“结果”以执行查询。

    保存查询

    在生成查询后保存查询。

    生成查询后,单击“保存”返回到数据模型编辑器。查询将显示在“SQL 查询”框中。单击“确定”保存数据集。


    dm_sql2.gif说明如下

    编辑保存的查询

    将查询从查询生成器保存到数据模型编辑器时,您将 还可以使用查询生成器来编辑查询。

    如果对查询进行了修改,或者未使用查询生成器 构造它,在启动查询生成器进行编辑时可能会收到错误 查询。如果查询生成器无法解析查询,您可以编辑语句 直接在文本框中。

    不能使用查询生成器编辑自定义查询或高级查询。

    编辑已保存的查询:

    1. 选择 SQL 数据集。
    2. 在工具栏上,单击“编辑所选数据集”以启动“编辑数据集”对话框。
    3. 单击“查询生成器”将查询加载到查询生成器。
    4. 编辑查询,然后单击保存。

    向查询添加绑定变量

    创建查询后,您可能希望用户能够将参数传递给查询以限制结果。

    向查询添加绑定变量:

    1. 在查询构建器中,单击条件选项卡。
    2. 对于要添加绑定变量的列,请按以下格式输入参数名称:
      in (:PARAMETER_NAME)

      编辑查询后,查询生成器无法再对其进行解析。您必须手动进行任何其他编辑。

    例如,在员工列表中,您希望用户选择特定部门。

    该图显示了部门表中的列。


    xdo11g_dme_bindvar2.gif说明如下

    使用文本编辑器添加绑定变量

    使用数据模型编辑器更新 SQL 查询。

    1. 在编辑数据集文本框中,通过在查询中的 where 子句后添加以下内容来更新 SQL 查询:

      and "COLUMN_NAME" in (:PARAMETER_NAME)

      例如:

      and "DEPARTMENT_NAME" in (:P_DEPTNAME)

      其中 是为参数选择的名称,如下所示。 P_DEPTNAME


      sqlbind_dm.gif说明如下

    2. 单击保存。
    3. 在数据模型编辑器中,创建您使用绑定变量语法输入的参数,如图所示。

      sqlbind_ask2.gif说明如下

    4. 选择参数,然后单击“确定”以启用数据模型编辑器为您创建参数条目。

    向 SQL 查询添加词法引用

    可以使用词法引用来替换出现在 SELECT、FROM、WHERE、GROUP BY、ORDER BY 或 HAVING 之后的子句。

    如果希望参数在运行时替换多个值,请使用词法引用。您还可以使用词法引用在查询中包含弹性字段。仅在针对 Oracle 应用程序的查询中支持词法引用。

    使用以下语法在 SQL 查询中创建词法引用:

    &parametername

    1. 在创建查询之前,请在 PL/SQL 默认包中为查询中的每个词法引用定义一个参数。数据引擎使用这些值来替换词法参数。
    2. 在数据模型编辑器的“属性”页上,指定 Oracle DB 默认包。
    3. 在数据模型编辑器中,创建“数据之前”事件触发器以调用 PL/SQL 包。
    4. 创建包含词法引用的 SQL 查询。
    5. 单击“确定”关闭 SQL 查询时,系统会提示您输入参数。

    例如,创建一个名为 的包。在包中,定义一个名为 的参数:employeeemployeewhere_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 包中定义的词法引用的值。

    lexival_diag2.gif说明如下

    在运行时,数据引擎将替换为包中定义的内容。 &where_clausewhere_clause

    关于定义针对 Oracle BI 服务器的 SQL 查询

    定义针对 Oracle BI 服务器的 SQL 查询

    针对 Oracle BI 服务器启动查询生成器时,查询生成器将显示目录中的主题区域。您可以将主题区域拖动到“查询构建器”工作区以显示列。选择要包含在数据模型中的列。

    要定义针对 Oracle BI 服务器的 SQL 查询:
    1. 在数据模型编辑器中,单击新建数据集,然后单击 SQL 查询。
    2. 输入数据集的名称。
    3. 从“数据源”列表中,选择 Oracle BI Server 连接,通常显示为 Oracle BI EE。
    4. 单击“查询生成器”以启动“查询生成器”页面。

      您也可以在“SQL 查询”文本框中手动输入 SQL 语法,但必须使用 Oracle BI 服务器使用的逻辑 SQL 语法。

    5. 从目录下拉列表中,选择一个主题区域,如下所示。该列表显示在 Oracle BI 服务器中定义的主题区域。

      dm_bisvr.gif说明如下

    6. 为查询选择表和列。
    7. 单击保存。
    8. 单击“确定”返回到数据模型编辑器。这 生成的 SQL 是遵循星型架构的逻辑 SQL(也就是说,它不是 物理 SQL)。
    9. 保存对数据模型所做的更改。

    针对Oracle的查询说明 融合云应用程序表

    • 不能使用 返回月份名称。此函数返回月份数。若要显示月份名称,请使用以下解决方案之一:sysdateto_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

    使用数据模型

    数据模型关系图可帮助您快速轻松地为基于多个数据集的报表定义数据集、中断组和总计。

    关于多部分不相关数据集

    如果不链接数据集(或查询),数据引擎将生成一个不相关的多部分查询数据集。

    例如,在数据模型中,如下图所示,一个查询选择产品,另一个查询选择客户。产品和产品之间没有关系客户。


    xdo11g_dme_prod_cust3.gif说明如下

    结果显示在数据结构中,如下图所示。


    xdo11g_dme_prod_cust4.gif说明如下

    关于多部分相关数据集

    为数据集或查询的一部分提取的数据可以由为另一部分提取的数据确定。结果通常称为大纲/详细信息或父/子关系,该关系通过两个数据集或查询之间的数据链接定义。

    运行大纲/细节数据模型时,主(或父)查询的每一行都会对详细信息(或子项)执行查询,以仅检索匹配的行。

    在下面的示例(下图)中,两个数据集通过元素客户 ID 链接。“订单”数据集是“客户”数据集的子项。


    xdo11g_dme_cust_ords3.gif说明如下

    该示例生成下图所示的数据结构。


    xdo11g_dme_cust_ords4.gif说明如下

     

     

    执行全局级函数

    使用全局级别函数,可以在顶级报表级别向报表数据集中添加元素。

    您可以将以下类型的元素添加为顶级数据:

    • 基于聚合函数的元素
    • 基于表达式的元素
    • 基于 PL/SQL 语句的元素(用于 Oracle 数据库数据源)

    确保对全局级函数进行正确排序。全局级函数按顺序执行。

    如果为任何计算元素和表达式选择数据类型 Integer 返回分数,数据不会被截断。全球一级 函数对象如下所示。基于聚合添加元素 函数,将元素拖到“拖放到此处以获取聚合函数”空间 对象。要添加基于表达式或 PL/SQL 的元素,请单击“菜单”,然后选择相应的操作。

    xdo11g_dse_15a.gif说明如下

    添加全局级聚合函数

    可用功能如下:

    • 计数

    • 平均

    • 第一

    • 最后

    • 最大

    • 最低

    • 总结

    1. 将数据元素从数据集拖放到全局级别函数对象的聚合功能区域的“拖放到此处”。

      例如,下图显示了基于 Salary 元素创建全局级别聚合函数。

      xdo11g_dme_gl_ag1.gif说明如下

    2. 释放鼠标时,数据模型编辑器会为聚合元素分配默认名称,并将 Count 指定为默认函数。

      下图显示了CS_1从计数修改为平均值的新全局级别元素的函数。

      xdo11g_dme_gl_ag_func1.gif说明如下

    3. 单击新元素名称左侧的函数图标,然后从列表中选择函数。
    4. 要更改默认名称,请单击元素名称右侧的操作图标,然后单击属性以启动编辑属性对话框。

    通过表达式添加组级别或全局级别元素

    1. 要添加组级别元素,请在组对象上单击菜单,然后选择按表达式添加元素。

      xdo11g_dme_glob_addelem_ex1.gif说明如下

    2. 在“按表达式添加元素”对话框中,输入字段和运算符。

      xdo11g_dme_elem_exp1.gif说明如下

    3. 在“显示名称”字段中,输入对业务用户有意义的名称。
    4. 可选:选择数据类型。
    5. 使用快速箭头将表达式所需的数据元素从“可用”框移动到“表达式”框。
    6. 单击运算符以将其插入“表达式”框中,或从函数列表中进行选择。
    7. 单击验证表达式以验证表达式。

    通过 PL/SQL 添加全局级元素

    PL/SQL 函数必须返回 VARCHAR 数据类型。

     
    1. 在“属性”页上,在数据模型属性中将 PL/SQL 包指定为 Oracle 数据库默认包。.
    2. “全局级别函数”对象上,单击“菜单”,然后单击“按 PL/SQL 添加元素”。
    3. 在“通过 PL/SQL 添加元素”对话框中,输入以下字段:
      • 名称 - 为元素输入有意义的名称。
      • 显示名称 - 输入显示名称。这将显示在报表设计工具中。输入对业务用户有意义的名称。
      • 数据类型 - 选择“字符串”。

      xdo11g_dme_addplsql3.gif说明如下

    4. 从“可用”框中选择 PL/SQL 包,然后单击快速按钮将函数移动到“组筛选器”框。

    添加新参数

    通过为其分配名称和其他属性来创建参数。

    您选择的参数名称不得超过数据库允许的标识符的最大长度。有关标识符长度限制,请参阅数据库文档。

    使用布局编辑器设计报表布局时,报表输出的预览将使用参数的默认值。

    您可以在报表级别配置行放置。报表定义支持参数的其他显示选项。

    添加新参数:

    1. 在“数据模型组件”窗格中,单击“参数”,然后单击“创建新参数”。
    2. 输入参数的名称。
      该名称必须与数据集中对此参数的任何引用匹配。
    3. 从列表中选择数据类型。日期数据类型仅支持日期参数类型。
    4. 输入参数的默认值。建议这样做以防止长时间运行的查询。
    5. 选择参数类型。
    6. 若要将参数标记为必需参数,请选择“必需”。
      如果不为必需参数提供值,则无法使用“查看数据”选项测试报表、联机运行报表或计划报表。
    7. “行放置”设置中,配置用于显示参数的行数以及将每个参数放置在哪一行中。

      例如,如果报表有六个参数,则可以将每个参数分配给单独的行 1 - 6,其中一个是顶行;或者,您可以为第 1、2、3 行分别分配两个参数。默认情况下,所有参数都分配给第 1 行。

    创建文本参数

    文本类型参数提供一个文本框,提示用户输入要作为参数传递给数据源的文本条目。

    要创建文本参数:
    1. 从“参数类型”列表中选择“文本”。
    2. 输入显示标签。例如,部门。
    3. 输入文本字段大小作为整数。此字段 确定字段的大小(宽度),但不限制字段的数量 用户可以在文本框中输入的字符。
    4. 如果需要,请启用以下选项:
      • 文本字段包含逗号分隔值 - 使用户能够为此参数输入多个逗号分隔的值。数据源中的参数必须定义为支持多个值。

      • 更改时刷新其他参数 - 执行部分页面刷新以刷新其值取决于此参数值的任何其他参数。

    创建菜单参数

    菜单类型参数向用户显示值列表。

    必须先定义值列表。菜单类型参数仅支持字符串和整数的数据类型。

    要创建菜单参数:

    1. 从“参数类型”列表中选择“菜单”。下部窗格显示相应的字段。
    2. 在“数据类型”中,选择“字符串”或“整数”。
    3. 输入显示标签。显示标签是在用户查看报表时向用户显示的标签。例如:部门。
    4. 选择为此参数定义的值列表。
    5. 输入要在列表中显示的值数。如果列表中的值数超过此字段中的条目,则用户必须单击“搜索”以查找未显示的值,如下图所示。此字段默认为 100。
      xdo11g_search_ex.gif说明如下

    6. 如果需要,请启用以下选项:
      • 多项选择 - 允许用户从列表中选择多个条目。数据源必须能够支持参数的多个值。支持多项选择的菜单参数的显示方式不同。请参阅下面的两个数字。
      • 可以全选 - 在列表中插入“全部”选项。

        当用户 从值列表中选择“全部”, 可以为参数或所有列表值传递 null 值。 选择“空值传递”或“全部” 传递的值。

        使用 * 传递 null,因此您必须处理数据源中的 null。一种方法 处理空将是标准的 Oracle NVL 命令,用于 示例:其中是值 从值列表中传递,当用户选择“全部”时,它将传递一个 null 值。where customer_id = nvl(:cstid, customer_id)cstid

      • 更改时刷新其他参数 — 执行部分页面刷新以刷新其值取决于此参数值的任何其他参数。

    下图显示了在未启用多项选择时如何向报表使用者显示“部门”菜单类型参数。

    xdo11g_dm_parm_menu2a.gif说明如下

    下图显示了启用多项选择时如何向报表使用者显示“部门”菜单类型参数。

    xdo11g_dm_parm_menu_mult1.gif说明如下

    自定义菜单参数的显示

    报表中菜单参数的显示可以在报表定义中进一步自定义。

    菜单类型参数支持将附加显示选项作为复选框或单选按钮的静态列表。

    定义日期参数

    Date 类型参数提供了一个日期选取器,用于提示用户输入要作为参数传递给数据源的日期。

    1. 从“参数类型”列表中选择“日期”。下部窗格显示适合您选择的字段。
    2. 输入显示标签。显示标签是在用户查看报表时向用户显示的标签。例如:雇用日期。
    3. 输入文本字段大小作为整数。此字段确定用户可以在日期输入的文本框中输入的字符数。例如:10。
    4. 可选:如果要以 UTC 显示日期参数值,请选择忽略用户时区。
    5. 输入日期格式字符串。格式必须是 Java 日期格式,例如 MM-dd-yyyy。
    6. 可选:输入开始日期和结束日期。此处输入的日期定义日期选取器向用户显示的日期范围。例如,如果输入“日期开始日期”作为 01-01-1990,则日期选取器不允许用户选择 01-01-1990 之前的日期。将“日期留空”以启用所有将来的日期。

    该图显示了“雇用日期”参数如何向报表使用者显示。


    xdo11g_dm_parm_date2a.gif说明如下

    创建搜索参数

    您可以使用搜索类型参数提供一个用于输入搜索文本的框和一个搜索图标来搜索和列出与搜索匹配的值,以便用户可以选择。

    使用搜索类型参数可在一长串值中查找值。在定义搜索类型参数之前,必须为参数创建 LOV。

    要创建搜索类型参数,请执行以下操作:

    1. 在“数据模型组件”窗格中,单击“参数”,然后单击“创建新参数”。
    2. 输入参数的名称,从“数据类型”列表中选择“字符串”,然后输入参数的默认值。
    3. “参数类型”列表中选择“搜索”。
    4. “显示标签”字段中输入参数的标签。
    5. “值列表”列表中选择参数的 LOV。
    6. 可选:选择更改时刷新其他参数。

    添加值列表

    您可以创建 SQL 查询或固定数据值的列表。

    1. 在“数据模型组件”窗格中,单击“值列表”,然后单击“创建新的值列表”。

      xdo11g_dm_parm_lov1a.gif说明如下

    2. 输入列表的名称,然后选择类型。

    从 SQL 查询创建列表

    数据引擎需要值查询列表中的(显示)名称/值对。在值选择语句列表中,第一个列出的列用作显示名称,第二个列用于数据引擎传递给数据集查询中的参数的值。

    如果查询仅返回一列,则相同的列值将用作向用户显示的值列表显示名称以及传递给参数的值。

    1. 从列表中选择数据源。
    2. 在下部窗格中,如果要为报表会话缓存查询结果,请选择“缓存结果(推荐)”。
    3. 输入 SQL 查询或使用查询生成器。下图显示了值的 SQL 查询类型列表。

    xdo11g_dm_parm_lov2a.gif说明如下

    下面显示的 SQL 查询仅从“部门”表中选择DEPARTMENT_NAME列。在这种情况下,值列表既在列表中显示查询结果,又将相同的值传递给数据集中的参数。下图显示了值显示条目的列表以及传递给数据集的值。菜单项和为P_DEPT显示的值是DEPARTMENT_NAME值。


    lov_sql1a.gif说明如下

    如果要将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值。


    lov_sql2a.gif说明如下

    从固定数据集为每个所需的标签-值对创建列表。

    创建标签-值对时,将在列表中向用户显示标签。该值将传递到数据引擎。

    1. 在下部窗格中,单击创建新的值列表图标以添加标签和值对。
    2. 对所需的每个标签值对重复此操作。

    下图显示了值的固定数据类型列表。


    xdo11g_dm_parm_lov3.gif说明如下

    创建计划触发器

    计划在计划运行报表作业时触发计划触发器。计划触发器的类型为 SQL 查询。

    当计划运行报表作业时,计划触发器将执行为触发器定义的 SQL 语句。如果返回数据,则提交报表作业。如果未从触发器 SQL 查询返回数据,则会跳过报表作业。

    与报表作业关联的计划触发器可以驻留在目录中的任何数据模型中。您无需在要为其执行触发器的报表的数据模型中创建计划触发器。可以在多个报表作业中重复使用计划触发器。

    1. 在数据模型编辑器任务窗格中,单击“事件触发器”。
    2. “事件触发器”窗格中,单击“新建”图标。
    3. 为触发器输入以下内容:
      • 名称 - 输入触发器的名称。

      • 类型 - 选择计划。

      • 语言 - 接受默认值 SQL 查询。

    4. 在下部窗格中,输入以下内容:
      • 选项 - 选中此复选框可缓存触发器查询的结果。

      • 数据源 - 选择触发器查询的数据源。

      • SQL 查询 - 在文本区域中输入查询,或单击查询生成器以使用该实用程序构造 SQL 查询,

        可以在触发器查询中包含参数。在与触发器相同的数据模型中定义参数。在计划报表作业时输入参数值。

        计划触发器查询不支持多选参数。如果查询需要一组值,请修改查询。

      如果 SQL 查询返回任何结果,则执行计划的报告作业。下图显示了一个计划触发器,用于根据可在运行时输入的参数值测试库存水平。


      sched_trigger1.gif说明如下

    添加关键弹性字段

    您可以使用键弹性字段引用来替换出现在 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 查询后,单击“确定”

    • 输入以下内容:
      • 词法名称 - 输入弹性字段组件的名称。

      • 弹性场类型 - 选择键弹性场。

      • 词法类型 - 从列表中选择类型。您在此处的选择决定了所需的其他字段

      • 应用程序短名称 - 输入拥有此弹性字段的 Oracle 应用程序的短名称,例如 GL。

      • 弹性字段代码 - 输入为此弹性字段定义的弹性字段代码。在 Oracle 电子商务套件中,此代码在“注册密钥弹性字段”窗体中定义,例如 GL#。

      • ID 弹性编号 - 输入包含弹性字段结构信息的源列或参数的名称。例如:101。若要使用参数,请在参数名称前面加上冒号,例如 :P ARAM_STRUCT_NUM。


        flexfield的描述.gif如下

    将参数传递给突发查询

    您可以使用数据模型中定义的参数传递突发 XML 元素的值。

    例如,如果您希望能够在提交时选择模板,则可以在数据模型中定义参数并在查询中使用语法。以下示例演示了突发查询中参数的此用例。:parameter_name

    假定报表定义包含三种布局:布局 1、布局 2 和布局 3。在提交时,您希望选择要使用的布局(或 TEMPLATE,如突发查询中定义)。

    将参数传递给突发查询:

    1. 在数据模型中,使用布局名称定义值列表。

      xdo11g_dme_burstparm_a.gif说明如下

    2. 创建菜单类型参数。输入 P1 作为名称,然后从值列表中选择布局列表。
    3. 在突发查询中,使用 :P 1 将参数值传递给 TEMPLATE 字段,如下图所示:

      xdo11g_dme_burstparm3a.gif说明如下

     

posted @ 2023-02-03 10:23  网格像素技术  阅读(135)  评论(0编辑  收藏  举报