Oracle Apex:聚合显示为顶行

Oracle Apex: Aggregate show as top row

目前我使用的是Oracle Apex的交互式报表

    Column1    Column2
A1     1          2
A2     2          3
A3     3          4
A4     4          5
----------------------
       10         14

显示数据后,我使用 交互式报表的聚合函数 SUM 进行一些计算,例如对 Column1、Column2 求和

但是结果显示为报告的最后一行,所以我必须滚动才能看到结果

如何将结果显示为报告的第一行

    Column1    Column2
       10         14
----------------------
A1     1          2
A2     2          3
A3     3          4
A4     4          5

问题是总计可能会或可能不会呈现在页面上,具体取决于页面大小和结果集中的记录数 - 因此对于交互式报表,除非您强制它始终显示所有记录, 页面甚至可能无法使用 JS 技巧将摘要行移动到顶部。

在这种情况下,我的偏好是根据简单的 SQL 查询向页面添加一个单独的区域。它将显示在交互式报告上方。不幸的是,这些列不会对齐。

我找到了解决方案

  1. 添加子查询计算总和
  2. 与现有结果合并
  3. 使用高亮功能补新行

这可以使用 JavaScript/jQuery 来完成(当然这只是许多方法中的一种,但它确实有效)。

用于创建报告的 SQL 语句以及所有过滤器和搜索信息存储在 WWV_FLOW_WORKSHEETtables

创建一个数据库包以生成 SQL 并将您想要的列和 return 相加为 XML。

从 jQuery AJAX 调用中调用该数据库包,然后解析 XML 并使用 jQuery 在顶部添加一行(如果你愿意,可以在底部添加一行)工作表 table 并将结果放在那里。

应该从相关工作表的刷新后动态操作调用 JavaScript/jQuery 函数。

function htmldbIRTotals(worksheet,columnList) {
    sessionId   = $("#pInstance").val();
    worksheetId = $(worksheet.triggeringElement).find(".a-IRR-table:last").attr("id");
    baseReportId=parseInt("0"+$("#"+worksheetId+"_rpt_saved_reports").val());

    u="'||pkg||'.getTotals?p_worksheet_id="+worksheetId+"&p_base_Report_Id="+baseReportId+"&p_session_id="+sessionId+"&p_columns="+columnList;

    $.post(u,function(data) {
        var xml = $.parseXML(data);
    });         

使用 sessionId、worksheetId 和 baseReportId,您可以检索所需的所有信息

columnList 是您要合计的列的冒号分隔列表

您甚至可以更喜欢并添加不同的聚合(即 AVG、MIN、MAX 等)

下面 link 中的示例。

http://apps.htmldb.com/apps/f?p=htmldb:knowledgebase:::NO:RP:P5_ID:84315