在實際應用中,組織樹報表除了使用到的比較規範的組織結構,即,除了最後一層,所有其他層的結構都是子層,還有很多組織結構並不是這麼的規範,有的層級結構下面沒有子層,有的層級結構下面則有子層,即層級結構不確定,下面就通過報表開發軟件FineReport來介紹一下。
工具/原料
報表開發軟件FineReport
大小:148.2M 適用平臺:windows/linux
方法/步驟
數據準備
新建內置數據集ds1:,如下圖:
注:內置數據集中第二層級結構中有一個結構沒有子層,其他的結構有子層。
模板製作
由於上面準備數據是不規範的組織結構,我們按照組織樹報表中的方法來實現組織樹,即不使用樹數據集,模板效果如下圖:
單元格設置如下表:
在添加過濾條件時,需要去掉將父格子作為過濾條件前面的勾選,如下圖A2單元格的過濾條件:
效果查看
此時保存模板,可以看到如下圖效果,沒有子層的層級結構並沒有合併單元格,其子層單元格還在,但是沒有數據顯示:
合併單元格
從效果圖上可以看到沒有下層的層級結構應該合併單元格顯示,即未歸集舊數據應該合併單元格至最下層。
由於FineReport不支持自動合併單元格,只能手動合併,未歸集舊數據所在層級為第二層,第二層數據所在單元格為第二行,最後一層在第三行,所以合併A2後面的單元格至第三行,即合併B2和B3單元格,A1單元格是第一層數據,故需要將其顯示在所有數據上面,需要合併A1和B1單元格。
回到模板設計界面,按照上述描述再操作模板,拖曳id列至B2單元格中,設置擴展為橫向擴展,其父格為A2,使數據擴展時,每個第二層級數據後面都跟了一個合併的單元格 ,且顯示對應層級數據,並設置其形態為:實際值為ds1的name字段,結果如下圖:
此時,點擊分頁預覽,效果如下圖:
過濾條件
為剛剛合併的B2單元格添加過濾條件,B2單元格只顯示沒有子層的第二層結構數據,即只顯示A3單元格為空的數據,添加過濾條件len(A3)==0,如下圖:
此時,再次預覽模板,如下圖,有子層的層級數據後面都有一個合併的單元格,因為其對應的A3單元格不為空,故沒有數據過濾過來,顯示為空:
條件屬性
上面效果圖中,沒有子層的層級數據的子層顯示為空白,有子層結構的層級數據後面的合併單元格顯示為空白,通過條件屬性,將空白列隱藏,如下圖,同時選中A2、A3和B2單元格,為其添加條件屬性:
其他設置
按照效果圖中設置單元格樣式,並將untils數據列拖曳至第4行單元格中,如下圖:
如果組織結構有4層,那麼其模板樣式如下圖
效果查看
保存模板,點擊分頁預覽,效果下圖。