天天看點

FineReport中如何制作樹資料集來實作組織樹報表

1. 問題描述

圖一

FineReport中如何制作樹資料集來實作組織樹報表
FineReport中如何制作樹資料集來實作組織樹報表

2.1 建立報表,添加資料集

建立工作薄,添加資料集ds1取出原始資料,SQL語句為SELECT * FROM 公司部門。

2.2 定義樹資料集

1)根據父字段建構樹

使用情形:原始表結構中符合ID、parentID結構,我們可以通過父ID這個字段生成樹,添加樹資料集,如下圖:

FineReport中如何制作樹資料集來實作組織樹報表
FineReport中如何制作樹資料集來實作組織樹報表

2)根據資料長度建構樹

使用情形:原始表結構中所有ID都在一列中,且沒有父ID字段,但是ID是有規律的,每組的長度相同,且子級的前N位就是父級編号,添加樹資料集,如下圖:

FineReport中如何制作樹資料集來實作組織樹報表
FineReport中如何制作樹資料集來實作組織樹報表

2.3 預覽資料

預覽樹資料集,可看到已自動生成遞歸樹資料,FR_GEN_0為最高層,依次往下,如下:

FineReport中如何制作樹資料集來實作組織樹報表

3. 示例一縱向組織樹

按照下圖所示将對應的資料列拖入到單元格中,并将A2單元格的左父格設定為A1,A3單元格的左父格設定為A2:

FineReport中如何制作樹資料集來實作組織樹報表

3.1 條件屬性

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

在模闆制作過程中,從第二層級開始就會有空白資料,需要将空白資料隐藏掉,選中A2和A3單元格,添加條件屬性,當資料為空時隐藏該行,如下圖:

FineReport中如何制作樹資料集來實作組織樹報表

注:如果組織結構的層級結構不确定,即有的層級有子層,有的層級沒有子層時,其組織樹報表的實作方式請檢視不規範組織樹報表

3.2 其它設定

由于自動生成的字段是編碼,可以使用資料字典将其轉為對應的部門名稱,如下圖:

FineReport中如何制作樹資料集來實作組織樹報表

3.3 儲存與預覽

儲存模闆,點選分頁預覽,效果如圖一

按照下圖所示将對應的資料列拖入到單元格中,在右側單元格屬性表-擴充屬性中将B1、C1單元格的擴充方向設為橫向,

并将B1單元格的左父格設定為A1,C1單元格的左父格設定為B1:

FineReport中如何制作樹資料集來實作組織樹報表

4.1 條件屬性

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

在模闆制作過程中,從第二層級開始就會有空白資料,需要将空白資料隐藏掉,選中B1和C1單元格,添加條件屬性,當資料為空時隐藏該列,如下圖:

FineReport中如何制作樹資料集來實作組織樹報表

4.2 其它設定

FineReport中如何制作樹資料集來實作組織樹報表

4.3 儲存與預覽

儲存模闆,點選分頁預覽,效果如圖二。

5.1問題描述

存儲過程直接生成樹資料集無效,如圖:

FineReport中如何制作樹資料集來實作組織樹報表

5.2解決思路

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

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

具體操作步驟如下:

建立一個資料庫查詢,輸入:{call username.package.procedure('${p1}','${p2}','${p3}',?)},然後設定下參數的初值,這樣就産生了一個普通的資料集ds1,如圖:

FineReport中如何制作樹資料集來實作組織樹報表

再通過資料集ds1,設定樹資料集就好了,此時就可以正常生成樹資料集了,如圖:

FineReport中如何制作樹資料集來實作組織樹報表

其餘操作和本文描述一樣了,隻不過是通過存儲過程實作組織樹報表,需要增加調用存儲過程這步。