反饋已提交

網絡繁忙

樹資料集實現組織樹報表

一、概述

  1. 組織樹報表 中由 ID 與父 ID 來實現組織樹報表,若層級數較多時,對每個儲存格設定過濾條件和形態會比較繁瑣,因此 FineReport 提供了一種特殊的資料集——樹資料集,只需要簡單的設定就能自動遞迴出層級,方便的實現如下圖組織樹報表:圖一:縱向組織樹;圖二:橫向組織樹。

 

二、構建樹資料集

  1. 一般分兩步構建樹資料集:1)新增帶有層次關系的普通資料集;2)基於普通資料集構建樹資料集。

1
新增普通資料集
  1. 新增資料集 ds1 取出原始資料,SQL 語句為:【SELECT * FROM 公司部門】。

2
構建樹資料集-根據父欄位構建樹。
  1. 使用情形:原始表結構中符合 ID、parentID 結構,我們可以透過父 ID 這個欄位生成樹,新增樹資料集,如下圖。

  2. 需要特別強調的是,此種情況,需要有唯一根節點(就是下圖 parentID 為空的節點)。如果沒有,那麼構建樹時會無法正常建立索引,最後在前臺使用下拉樹元件時容易出現一些功能問題,比如元件不能給預設值、比如不能模糊搜尋等。

 

3
構建樹資料集-根據資料長度構建樹。
  1. 使用情形:原始表結構中所有ID都在一欄中,且沒有父 ID 欄位,但是 ID 是有規律的,每組的長度相同,且子級的前N位就是父級編號,新增樹資料集,如下圖。

 

4
樹資料集預覽
  1. 預覽樹資料集,可看到已自動生成遞迴樹資料,【FR_GEN_0】為最高層,依次往下,如下。

 

三、範例一:縱向組織樹

1
範本設計
  1. 按照下圖所示將對應的資料欄拖入到儲存格中,預設儲存格縱向擴展並設定左父格:A2 儲存格的左父格設定為 A1,A3 儲存格的左父格設定為 A2,如下圖所示。

 

2
條件屬性隱藏空白列
  1. 有上面預覽資料可以看到從二層 【FR_GEN_1】 開始,就會有空白資料,這是因為資料庫中儲存的資料有上一級部門本身的部門名稱和部門 ID,其上一級部門的部門級數會低一級,比如說上述資料的第一列為總部,雖然總部下面有子部門,但是資料庫中還是要儲存總部這個部門的部門名稱和部門ID的,總部對應的級數為一級,那麼其對應的資料記錄列裏面就只有【FR_GEN_0】 層,下面的【 FR_GEN_1】和【FR_GEN_2 】這兩層就會沒有資料,顯示為空白。

  2. 在範本製作過程中,從第二層級開始就會有空白資料,需要將空白資料隱藏掉,選中 A2 和 A3 儲存格,新增條件屬性,當資料為空時隱藏該列,如下圖。

 

注:如果組織結構的層級結構不確定,即有的層級有子層,有的層級沒有子層時,其組織樹報表的實現方式請查看:不規範組織樹報表

3
其他設定
  1. 由於自動生成的欄位是編碼,可以使用資料字典將其轉為對應的部門名稱,如下圖。

 

4
效果預覽。
  1. PC 端:如概述中圖一所示。

  2. 行動端:App 與 HTML5 端均支援。

5
範本下載
  1. 已完成的範本,可參見【%FR_HOME%\webroot\WEB-INF\reportlets\doctw\Advanced\GroupReport\樹資料集組織樹報表.cpt】。

  2. 點選下載範本:樹資料集組織樹報表.cpt

四、範例二:橫向組織樹

1
範本設計
  1. 按照下圖所示將對應的資料欄拖入到儲存格中,設定儲存格橫向擴展並設定父格:B1 儲存格的左父格設定為 A1,C1 儲存格的左父格設定為 B1,如下圖所示。

 

2
條件屬性隱藏空白欄
  1. 有上面預覽資料可以看到從二層 【FR_GEN_1】 開始,就會有空白資料,這是因為資料庫中儲存的資料有上一級部門本身的部門名稱和部門 ID,其上一級部門的部門級數會低一級,比如說上述資料的第一欄為總部,雖然總部下面有子部門,但是資料庫中還是要儲存總部這個部門的部門名稱和部門ID的,總部對應的級數為一級,那麼其對應的資料記錄欄裏面就只有【FR_GEN_0】 層,下面的 【FR_GEN_1】和【FR_GEN_2】 這兩層就會沒有資料,顯示為空白。

  2. 在範本製作過程中,從第二層級開始就會有空白資料,需要將空白資料隱藏掉,選中 B1 和 C1 儲存格,新增條件屬性,當資料為空時隱藏該欄,如下圖。

 

注意因為是橫向的,所以應該是欄寬而不是欄高!

3
其他設定
  1. 由於自動生成的欄位是編碼,可以使用資料字典將其轉為對應的部門名稱,如下圖。

 

4
效果預覽。
  1. PC端:如概述中圖二所示。

  2. 行動端:App 與 HTML5 端均支援。

五、範例三:儲存過程建立樹資料集

1
建立資料集
  1. 建立資料庫查詢資料集 ds1,然後資料集 ds1 裏 “call 儲存過程名 儲存過程參數”,再用 ds1 生成樹資料集 。

  2. 具體操作步驟如下:建立一個資料庫查詢,輸入:【{call username.package.procedure('${p1}','${p2}','${p3}',?)}】,然後設定下參數的初值,這樣就産生了一個普通的資料集 ds1。再透過資料集 ds1,設定樹資料集就好了,此時就可以正常生成樹資料集了,如圖。

 

注:若是呼叫資料庫儲存過程取數,官方只支援查詢語句 select 進行取數,其他寫法(例如下面的寫法), 傳回的結果不能保證,不建議使用 。

2
注意事項。
  1. 儲存過程直接生成樹資料集無效,如圖。

 

六、未知層級的情況

  1. 評論中很多人問到了層級未知的情況。我們不妨用遞迴的思路來梳理一下什麼是組織樹:資料之間是有明顯父子關系的。

  2. 從某個層級開始假如我們向上遞迴尋找,總能找到有限的父層級,這時候不存在層級未定,我們以最大的父層級作為層級數。

  3. 假如我們向下遞迴尋找,實際情況當中子層級也是有限的,假如出現子層級不斷增長的情況,無論增長到多少級,最終也能找到最深的那個子層級。

附件列表


主題: 報表應用
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

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

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

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙