組織樹報表中由id與父id來實現組織樹報表,若層級數較多時,對每個單元格設定過濾條件和形態會比較繁瑣,因此FineReport提供了一種特殊的資料集——樹資料集,只要要簡單的設定就能自動遞迴出層級,方便的實現如下圖組織樹報表:
工具/原料
Java表格控制元件:FineReport實現組織樹報表
電腦
方法/步驟
新建報表,新增資料集
新建工作薄,新增資料集ds1取出原始資料,SQL語句為SELECT * FROM [公司部門]。
定義樹資料集
根據父欄位構建樹
使用情形:原始表結構中符合ID、parentID結構,我們可以通過父ID這個欄位生成樹,新增樹資料集,如下圖:
使用情形:原始表結構中所有ID都在一列中,且沒有父ID欄位,但是ID是有規律的,每組的長度相同,且子級的前N位就是父級編號,新增樹資料集,如下圖:
預覽資料
預覽樹資料集,可看到已自動生成遞迴樹資料,FR_GEN_0為最高層,依次往下,如下:
模板製作
按照下圖所示將對應的資料列拖入到單元格中,並將A2單元格的左父格設定為A1,A3單元格的左父格設定為A2:
條件屬性
有上面預覽資料可以看到從二層FR_GEN_1開始,就會有空白資料,這是因為資料庫中儲存的資料有上一級部門本身的部門名稱和部門ID,其上一級部門的部門級數會低一級,比如說上述資料的第一行為總部,雖然總部下面有子部門,但是資料庫中還是要儲存總部這個部門的部門名稱和部門ID的,總部對應的級數為一級,那麼其對應的資料記錄行裡面就只有FR_GEN_0層,下面的FR_GEN_1和FR_GEN_2這兩層就會沒有資料,顯示為空白。
在模板製作過程中,從第二層級開始就會有空白資料,需要將空白資料隱藏掉,選中A2和A3單元格,新增條件屬性,當資料為空時隱藏該行,如下圖:
其它設定
由於自動生成的欄位是編碼,可以使用資料字典將其轉為對應的部門名稱。