部署回写

利用回写功能,用户可以从分析更新数据。

主题:

关于管理员可用的回写功能

利用回写功能,用户可以直接从仪表盘和分析更新数据。

具有回写到数据库权限的用户在分析中看到的回写字段为可编辑字段。他们输入的值将保存到数据库中。没有回写到数据库权限的用户看到的回写字段为只读字段。

如果用户在可编辑字段中键入值并单击回写按钮,则应用程序将运行回写模板中定义的 insertupdate SQL 命令。如果命令成功,则新值将更新到分析中。如果读取模板或运行 SQL 命令时出错,则会显示错误消息。

当不存在记录且用户向表中输入新数据时,将运行 insert 命令。在这种情况下,用户键入了原始值为空的表记录。用户修改现有数据时,将运行 update 命令。要显示物理表中还不存在的记录,可以创建另一个类似的表。使用此类似表可显示用户可以修改的占位符记录。

注:

在创建回写模板时,必须包括 insert 命令和 update 命令,即使不同时使用这两个命令也是如此。例如,如果仅执行 insert,也必须包括一个空 update 语句 <update></update>,如以下 XML 代码中所示:

以下示例回写 XML 文件包含两个 insert 命令和两个空 update 语句。要进一步了解如何创建和构造回写 XML 文件,请参见创建回写模板文件
<?xml version="1.0" encoding="utf-8" ?>
<WebMessageTables xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="oracle.bi.presentation/writebackschemas/v1">
<WebMessageTable lang="en-us" system="WriteBack" table="Messages">
   <WebMessage name="SetQuotaUseID">
      <XML>
         <writeBack connectionPool="Supplier">
            <insert>INSERT INTO regiontypequota VALUES(@{c5f6e60e1d6eb1098},@{c5d7e483445037d9e},'@{c3a93e65731210ed1}','@{c6b8735ea60ff3011}',@{c0432jkl53eb92cd8})</insert>
            <update></update>
         </writeBack>
      </XML>
   </WebMessage>
<WebMessage name="SetForecastUseID">
      <XML>
         <writeBack connectionPool="Supplier">
            <insert>INSERT INTO regiontypeforecast VALUES(@{c83ebf607f3cb8320},@{cb7e2046a0fba2204},'@{c5a93e65d31f10e0}','@{c5a93e65d31f10e0}',@{c7322jkl93ev92cd8})</insert>
            <update></update>
         </writeBack>
      </XML>
   </WebMessage>
</WebMessageTable>
</WebMessageTables>

在分析和仪表盘中启用回写

管理员可以允许用户在分析和仪表盘中编辑数据。

  1. 设置语义模型。

    注:

    如果您使用模型管理工具来开发语义模型,请执行以下步骤。如果使用语义建模器,请参见

    启用列回写 .

    1. 在模型管理工具中,打开语义模型(.rpd 文件)。
    2. 在物理层中,双击包含要为其启用回写的列的物理表。
    3. 物理表对话框的一般信息选项卡上,确保未选择可高速缓存。取消选择此选项可确保 Presentation Services 用户可以立即看到更新。
    4. 业务模型和映射层中,双击对应的逻辑列。
    5. 逻辑列对话框中,选择可写,然后单击确定
    6. 表示层中,双击对应于已为其启用回写的逻辑列的列。
    7. 表示列对话框中,单击权限
    8. 为相应的用户和应用程序角色选择读/写权限。
    9. 保存所做的更改。
  2. 使用回写模板创建 XML 文档。请参见创建回写模板文件

    您的 XML 文档可以包含多个模板。以下示例显示了包含两个模板(SetQuotaUseIDSetForecastUseID)的 XML 文档。

    <?xml version="1.0" encoding="utf-8" ?>
    <WebMessageTables xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="oracle.bi.presentation/writebackschemas/v1">
    <WebMessageTable lang="en-us" system="WriteBack" table="Messages">
       <WebMessage name="SetQuotaUseID">
          <XML>
             <writeBack connectionPool="Supplier">
                <insert>INSERT INTO regiontypequota VALUES(@{c5f6e60e1d6eb1098},@{c5d7e483445037d9e},'@{c3a93e65731210ed1}','@{c6b8735ea60ff3011}',@{c0432jkl53eb92cd8})</insert>
                <update>UPDATE regiontypequota SET Dollars=@{c0432jkl53eb92cd8} WHERE YR=@{c5f6e60e1d6eb1098} AND Quarter=@{c5d7e483445037d9e} AND Region='@{c3a93e65731210ed1}' AND ItemType='@{c6b8735ea60ff3011}'</update>
             </writeBack>
          </XML>
       </WebMessage>
    <WebMessage name="SetForecastUseID">
          <XML>
             <writeBack connectionPool="Supplier">
                <insert>INSERT INTO regiontypeforecast VALUES(@{c83ebf607f3cb8320},@{cb7e2046a0fba2204},'@{c5a93e65d31f10e01}','@{c5a93e65d31f10e0}',@{c7322jkl93ev92cd8})</insert>
                <update>UPDATE regiontypeforecast SET Dollars=@{c7322jkl93ev92cd8} WHERE YR=@{c83ebf607f3cb8320} AND Quarter=@{cb7e2046a0fba2204} AND Region='@{c5a93e65d31f10e01}' AND ItemType='@{c5a93e65d31f10e0}'</update>
             </writeBack>
          </XML>
       </WebMessage>
    </WebMessageTable>
    </WebMessageTables>
    :必须包括一个 <insert> 元素和一个 <update> 元素,即使不同时使用这两个元素也是如此。例如,如果仅执行 insert,也必须包括一个空 update 语句 <update></update>
  3. 将包含回写模板的 XML 文档复制到剪贴板。
  4. 在 Oracle Analytics 中应用回写模板:
    1. 依次单击控制台高级系统设置
    2. 回写模板 XML 中,粘贴在步骤 3 中复制的回写模板。
  5. 授予使用回写代码的权限:
    1. 导航到经典主页,然后单击管理
    2. 安全下,单击管理权限,导航到回写
    3. 已验证的用户授予回写到数据库权限。
    4. BI 服务管理员授予管理回写权限。
  6. 要在列中启用回写,请执行以下操作:
    1. 在分析编辑器中,显示要对其启用回写的列的“列属性”。
    2. 在“列属性”对话框中,单击回写选项卡。
      如果已在语义模型中为列启用回写功能,则启用回写框将可用。
    3. 选择启用回写选项。
    4. 指定其他选项的值(如果要更改默认值)。
    5. 保存所做的更改。
    已在包含此列的任何分析中为列启用回写功能。
  7. 要在表视图中启用回写,请执行以下操作:
    1. 在分析编辑器中,打开表视图进行编辑。
    2. 单击视图属性
    3. 表属性对话框中,单击回写选项卡。
    4. 选择启用回写选项。
    5. 选择模板名称框,指定在步骤 2 中指定的回写模板中的 "WebMessage name=" 的值。
      例如,步骤 2 中示例模板的模板名称为 'SetQuotaUseID'。
    6. 保存所做的更改。

回写限制

用户可以回写到任何允许从 Oracle Analytics 执行 SQL 查询的数据源。

在配置回写时,请注意以下限制:

  • 数字列只能包含数字。不得包含任何数据格式字符,如美元符号 ($)、井号或哈希符号 (#)、百分号 (%) 等。

  • 文本列只能包含字符串数据。

  • 如果登录用户正在查看的仪表盘中包含分析,而分析中的数据已使用回写功能进行修改,则这些数据不会在仪表盘中自动刷新。要查看更新的数据,用户必须手动刷新仪表盘。

  • 模板机制只能用于表视图,而且只能用于单值数据。数据透视表视图或任何其他类型的视图、多值数据或者包含单值数据的下拉列不支持模板机制。

  • 回写列中的所有值都是可编辑的。可编辑字段在非打印机友好环境中显示时,显示效果与用户拥有回写到数据库权限时的效果相同。但是,当逻辑列映射到可能更改的物理列时,逻辑列会返回多级交叉点的值。这种情况可能会导致出现问题。

  • 分析中的任何字段都可以标记为回写字段,即使它并非派生自您创建的回写表。但是,如果表没有启用回写功能,您便无法成功运行回写操作。内容设计者负责正确标记字段。

  • 模板可以包含 insertupdate 以外的 SQL 语句。回写功能会将这些语句传递给数据库。但是,Oracle 不支持也不建议使用 insertupdate 以外的任何语句。

  • Oracle Analytics 只对数据输入执行最低限度的验证。如果字段为数字类型,而用户输入了文本数据,那么 Oracle Analytics 会检测到这一点,并阻止无效数据进入数据库。但是,它不会检测其他形式的无效数据输入(值超出范围、文本和数字混用等)。当用户单击回写按钮并运行 insert 或 update 语句时,无效数据会导致数据库返回错误消息。然后用户可以更正错误的输入。内容设计者可以在回写分析中加入帮助用户输入的文本,例如,“不允许在数字数据字段中输入字母数字混用的值”。

  • 模板机制不适合用于输入任意新记录。换句话说,不要将它用作数据输入工具。

  • 创建表进行回写时,请确保至少具有这样一列:不包含回写功能,但所含的值非空并且在每一行中都是唯一的。

  • 回写分析不支持细化。由于细化会修改表结构,因此回写模板将无法正常工作。

    注意:

    模板机制获取用户输入并将其直接写入数据库。物理数据库的安全性由您自己负责。为了实现最佳安全性,请将回写数据库表存储在单独的数据库实例中。

创建回写模板文件

回写模板文件是一个 XML 格式的文件,其中包含一个或多个回写模板。

回写模板由以下项组成:指定模板名称的 WebMessage 元素、连接池,以及在创建的回写表与列中插入和更新记录所需的 SQL 语句。当内容设计者启用表视图进行回写时,他们必须指定用于在表视图中插入和更新记录的回写模板的名称。

回写模板要求

回写模板必须满足以下要求:

  • WebMessage:您必须使用 WebMessage 元素中的 name 属性来指定回写模板的名称。

    为了使回写正常工作,在启用表视图进行回写后,内容设计者必须指定用于在视图中插入和更新记录的回写模板的名称。

    以下示例显示了名为 SetQuotaUseID 的回写模板。

    <WebMessage name="SetQuotaUseID">
    
  • connectionPool:为满足安全要求,您必须在指定连接池的同时指定用于插入和更新记录的 SQL 命令。这些 SQL 命令会引用回写方案中传递的值,以生成用于修改数据库表的 SQL 语句。

  • VALUES:列值可通过列 ID列位置引用。首选方式是使用列 ID。

    字符串和日期值应使用单引号括起来。数字值不需要加单引号。

    • 列 ID — 每个列 ID 都是随机生成的字母数字。您可以在分析的 XML 定义中找到列 ID;XML 定义位于分析编辑器的高级选项卡。例如 @{c5f6e60e1d6eb1098}@{c3a93e65731210ed1}'@{c6b8735ea60ff3011}',这些都是列 ID 值。

      当使用列 ID 时,即使列的顺序发生变化,回写也能继续正常工作。

      分析编辑器的“高级”选项卡中的 XML

    • 列位置 — 列位置从 1 开始编号。例如 @1@3'@5',这些都是列位置值。

      当列的顺序发生变化时,回写无法再正常工作,这就是首选使用列 ID 的原因。

  • 必须在模板中包含 <insert><update> 元素。如果您不想在元素中包含 SQL 命令,那么您必须在开始标记和结束标记之间插入一个空格。例如,您必须按如下方式输入元素:

    <insert> </insert>
    

    而不是:

    <insert></insert>
    

    如果您省略了空格,则会看到回写错误消息,例如“系统无法读取回写模板 'my_template'”。

  • 如果参数的数据类型不是整数或实数,则应使用单引号将其括起来。如果数据库不自动提交,则可以在 insertupdate 节点后添加可选的 postUpdate 节点,以强制提交。postUpdate 节点通常如以下示例所示:

    <postUpdate>COMMIT</postUpdate>
    

使用列 ID 语法的回写模板文件示例

通过列 ID 引用值的回写模板文件可能如以下示例所示:

<?xml version="1.0" encoding="utf-8" ?>
<WebMessageTables xmlns:sawm="com.siebel.analytics.web/message/v1">
<WebMessageTable lang="en-us" system="WriteBack" table="Messages">
   <WebMessage name="SetQuotaUseID">
      <XML>
         <writeBack connectionPool="Supplier">
            <insert>INSERT INTO regiontypequota VALUES(@{c5f6e60e1d6eb1098},@{c5d7e483445037d9e},'@{c3a93e65731210ed1}','@{c6b8735ea60ff3011}',@{c0432jkl53eb92cd8})</insert>
            <update>UPDATE regiontypequota SET Dollars=@{c0432jkl53eb92cd8} WHERE YR=@{c5f6e60e1d6eb1098} AND Quarter=@{c5d7e483445037d9e} AND Region='@{c3a93e65731210ed1}' AND ItemType='@{c6b8735ea60ff3011}'</update>
         </writeBack>
      </XML>
   </WebMessage>
</WebMessageTable>
</WebMessageTables>

使用列位置语法的回写模板文件示例

通过列位置引用值的回写模板文件可能如以下示例所示:

<?xml version="1.0" encoding="utf-8" ?>
<WebMessageTables xmlns:sawm="com.siebel.analytics.web/message/v1">
<WebMessageTable lang="en-us" system="WriteBack" table="Messages">
   <WebMessage name="SetQuota">
      <XML>
         <writeBack connectionPool="Supplier">
            <insert>INSERT INTO regiontypequota VALUES(@1,@2,'@3','@4',@5)</insert>
            <update>UPDATE regiontypequota SET Dollars=@5 WHERE YR=@1 AND Quarter=@2 AND Region='@3' AND ItemType='@4'</update>
         </writeBack>
      </XML>
   </WebMessage>
</WebMessageTable>
</WebMessageTables>