反饋已提交

網絡繁忙

當前為10.0版本文檔,更多實例內容將在最新幫助文檔中展現,點選跳轉至 最新版幫助文檔

解決動態欄的分組統計問題

一、概述

1
版本。
報表伺服器版本功能變更
11.0--

2
預期效果。
  1. 利用 資料集 或 函數 方式製作出來的動態欄預設是只能顯示固定的列欄位的,沒有動態分組統計的功能,如果報表需要使用動態欄,同時某個欄位又需要彙總,那麼原來的方法就不太適用了,必須進列改進。最終效果如下圖。

3
實現思路。
  1. 由於 FineReport 為普通欄提供的彙總不再適用於動態欄,要想實現【銷量】按前面的欄自動彙總的話,必須透過 SQL 進列處理,首先判斷動態欄是否選擇了【銷量】,然後把銷量欄位處理成彙總。

二、範例

1
準備範本。
  1. 開啟範本【%FR_HOME%\webroot\WEB-INF\reportlets\doctw\Parameterr\DynamicCol\資料集參數實現動態欄.cpt】。詳情可參見:資料集參數實現動態欄 。

  2. 將 A2-F2 儲存格的資料設定改由【欄表】改成【分組】,如圖1。

  3. 修改資料集 ds1 的 SQL 語句為:【SELECT ${if(len(col)=0,'*',replace(col,'銷量','sum(銷量)'))} FROM 銷量 ${if(len(col)<1,"","group by "+replace(col,',銷量',''))}】,可實現:

    參數為空時,查詢全部,按左父格分組顯示

    勾選參數但未包含【銷量】欄時,僅按左父格分組顯示

    勾選了參數且包含【銷量】欄時,【銷量】欄可按左父格分組彙總

  4. 語句說明如下表所示。

  5. 刪掉參數 【col】 的變數預設值,如下圖2所示。

公式
公式說明
${} 括號內可支援 FineReport 的內建公式。
if(len(col)=0,'*',replace(col,'銷量','sum(銷量)')) 表示參數【col】為空時,查詢全部;不為空時,可使用 replace  函式將查詢結果中【銷量】欄的值用【sum(銷量)】更換。
if(len(col)<1,"","group by "+replace(col,',銷量',''))

表示參數col為空時,執行空,相當於【SELECT ${if(len(col)=0,'*',replace(col,'銷量','sum(銷量)'))} FROM 銷量】。

不為空時,執行 【"group by "+replace(col,',銷量','')】,根據一個或多個欄對查詢結果進行分組。

"group by "+replace(col,',銷量','') 【group by】中不能出現銷量欄,所以如果勾選了【銷量】欄,則【銷量】欄用空更換。

注:',銷量' 中的逗號不能省略,因為用空值更換時,會出現 SQL 語句報錯。

2
效果預覽。
  1. PC 端:儲存範本,點選【分頁預覽】,效果如下圖1所示。

  2. 行動端:App 端及 H5 端均支援。

三、範本下載

  1. 已完成範本,可參見:【%FR_HOME%\webroot\WEB-INF\reportlets\doctw\Parameter\DynamicCol\動態欄的分組統計.cpt】。

  2. 點選下載範本:動態欄的分組統計.cpt

附件列表


主題: 11.0 新增文档
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤

文 檔回 饋

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉