條件屬性實現摺疊樹

1. 概述

1.1 問題描述

現有的 動態摺疊樹 報表只能在「資料分析」預覽模式下才能生效,如果想要在其他預覽模式下也能使用摺疊樹,該如何實現呢?效果如下圖所示:

1722842281946269.gif

1.2 解決思路

利用「超級連結>動態參數」結合「條件屬性>列高」來實現。

將要點選的分組序號存入動態參數,再判斷參數中是否有該分組來實現「列高」的顯示與隱藏。

2. 範例一

2.1 資料準備

建立資料集 ds1,資料庫查詢語句為:SELECT * FROM 銷量

2024-08-05_14-49-01.jpg

2.2 設計報表

設計表格樣式如下圖所示:

1722840688447565.jpg

儲存格具體設定如下表所示:

儲存格
資料欄資料設定擴展方向左父格上父格
A1
銷售員分組縱向預設預設
B2產品類型列表縱向A1預設
C2產品分組縱向預設預設
D2銷量分組縱向預設預設

2.3 設定動態參數

選中 A1 儲存格,點選右側屬性面板「超級連結」,新增一個「動態參數」,參數名為 a ,參數值為「公式」,公式為:IF(LEN($a) = 0, &A1, if(inarray(&A1, split($a, ",")) > 0, joinarray(GREPARRAY(split($a, ","), item != &A1), ","), $a + "," + &A1))

公式整體說明:初始化時,將 &A1 即要點選的分組序號指派給動態參數 a,點選某個分組時,傳回該分組序號在 a 中的位置,然後將該分組序號從 a 中過濾掉,再次點選時,a 中則沒有該分組序號,那麼就會傳回 0。根據傳回的值是否為 0,在條件屬性中設定列高進行展開和摺疊即可。

公式分解說明如下表:


公式
說明
LEN($a) = 0初始化時,a 為空,即長度為 0,將 &A1 存入動態參數中
&A1 獲取 A1 儲存格擴展後每個值對應的序號
split($a, ",")傳回由逗號分割 a 組成的字串陣列
inarray(co,array)傳回 co 在陣列 array 中的位置,如果 co 不在 array 中,則傳回 0
GREPARRAY(array,item != &A1)

在 array 陣列中過濾掉 &A1,形成一個新陣列

JOINARRAY(array,",")傳回一個由逗號作為分隔符的字串
$a + "," + &A1動態參數 a 連接逗號和 &A1 組成一個字串

步驟如下圖所示:

QQ图片20240805150344.png

2.4 設定條件屬性

選中 B2 儲存格,點選右側屬性面板「條件屬性」,新增兩個條件屬性,並重新命名為「展開」和「摺疊」。如下圖所示:

QQ图片20240805150548.png

「展開」屬性:滿足公式條件inarray(&A1, split($a, ",")) > 0時,即點選的分組序號在動態參數 a 中時,列高為 5 公釐。如下圖所示:

1722841609290519.jpg

「摺疊」屬性:滿足公式條件inarray(&A1, split($a, ",")) = 0時,即點選的分組序號不在動態參數 a 中時,列高為 0 公釐。如下圖所示:

1722841663212963.jpg

2.5 效果預覽

2.5.1 PC 端

儲存報表,點選分頁預覽,效果如下圖所示:

1722842259816971.gif

2.5.2 行動端

App 端和 HTML5 端均支援,效果如下圖所示:

1722842588547679.gif

2.6 一鍵摺疊/展開功能

1)在範例一的基礎上,若想增加一件摺疊和一鍵展開功能,在第一列插入一列空白列,然後在 A1 儲存格輸入文字:一鍵展開,在 B1 儲存格輸入文字:一鍵關閉,如下圖所示:

1722844089345673.jpg

2)A1 儲存格設定動態參數,參數名為 a,參數值為 joinarray(range(count(A2)), ","),B1 儲存格設定動態參數,參數名為 a,參數值為空即可,如下圖所示:

1722844170359356.jpg

3. 範例二

3.1 準備資料

建立一個內建資料集,如下圖所示:

1722844384121750.jpg

3.2 設計表格

1)設計表格,如下圖所示:

1722844456494387.jpg

2)設定各儲存格的擴展方向和左父格,如下表所示:

儲存格擴展方向左父格
B1、C1合併儲存格
不擴展預設
D1不擴展預設
A3不擴展C2
B2

縱向擴展

C2
C2縱向擴展預設
C3縱向擴展C2
D3縱向擴展預設

3.3 新增動態參數

在 B2 儲存格新增兩個動態參數類型的超級連結:

1)pre:if(find(C2, concatenate($pre, $cur)) > 0, replace(concatenate($pre, $cur), C2, ""), concatenate($pre, $cur))

以上 pre 參數函式內容是為了獲取上次點選的獲取的值。(但是如果上次已經點選過一次,則去除點選過的狀態)

2)cur:if(find(C2, concatenate($pre, $cur)) > 0, 1, if(C2 = $cur, 1, C2))

以上 cur 參數函式內容是為了獲取本次點選的獲取的值。concatenate 函式詳情請參見:字串連結函式

如下圖所示:

QQ图片20240805155837.png

3.4 新增條件屬性

在 A3 儲存格新增兩個條件屬性:

1)條件屬性 1:列高為 0:公式為 reverse(or($$$ = $cur, find($$$, $pre) > 0)) 此公式是為了判斷當前值如果不是本次或者上次點選的則隱藏起來。

2)條件屬性 2:欄寬為 0。

如下圖所示:

QQ图片20240805160038.png

3.5 新增箭頭圖示

找兩個小圖示,如下圖所示:

2024-08-05_16-05-35.jpg

2024-08-05_16-06-10.jpg

給 B2 儲存格新增兩個條件屬性:

條件屬性 1:背景選擇向下的圖片,公式為:reverse(or(C2 = $cur, find(C2, $pre) > 0))

reverse 函式詳情請參見:邏輯函式

1722845076161739.jpg

條件屬性2:背景為向上的圖片,公式為:or(C2 = $cur, find(C2, $pre) > 0)

1722845111521411.jpg

3.6 效果預覽

3.6.1 PC 端

儲存報表,點選「分頁預覽」,效果如下圖所示:

1722845753180800.gif

3.6.2 行動端

儲存報表,點選「行動端預覽」,同時支援 App 和 HTML5 端,效果如下圖所示:

1722845910668441.gif

4. 範本下載

1)範例一

點選下載範本:條件屬性實現摺疊樹.cpt

2)範例二

點選下載範本:動態參數實現二級下拉摺疊選單.cpt

另外附上三級下拉範本,原理同二級下拉一樣,只是父格擴展可能稍微比剛剛的複雜一些。

點選下載範本:动态参数实现三级下拉折叠菜单.cpt

5. 注意事項

1)範例一為針對資料庫中資料集的方式實現的,範例二為內建資料集的方式實現的,如果是使用 Oracle 資料集,可以用select distinct 大類別,小類別 from 表名 ,然後左聯接同一個表,獲取裏面需要的值資料,然後放置到需要的位置,可能需要配置下過濾等,整體的表就可以做出來了。

2)由於兩種方式均採用了動態參數,在資料過多出現自動的時候,點選摺疊/展開會出現自動跳轉至第一頁的情況,若希望避免此情況出現可以採用不分頁的顯示資料,詳情請參見:不分頁顯示資料

3)範例二的方法中的隱藏和顯示是按名稱來進行判斷的,名稱相同會歸成一類,需要注意區分。

附件列表


主題: 報表專題
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
中文(繁體)

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

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

不再提示

10s後關閉

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

反馈已提交

网络繁忙

反饋已提交

網絡繁忙