當前為10.0版本文檔,更多實例內容將在最新幫助文檔中展現,點選跳轉至 最新版幫助文檔

分組内排序互不幹擾

1. 概述

1.1 應用場景

如下圖所示:當點擊華東的銷量時,華東的銷量排序,華北的銷量不受到影響。當點擊華北的銷量時,華北的銷量排序,華東的不受到影響。
222

1.2 實現思路

1)定義一個數組,用數組裏的元素存儲對應分組的升降序(正數爲升,負數爲降)。

2)當點擊銷量時,修改數組對應下标的值。

3)根據數組各個下标的值對各分組進行排序。

2. 示例

1)新建數據集 ds1,寫入 SQL 語句:SELECT * FROM 銷量 where 産品='蘋果汁' order by 地區,銷量

Snag_88e8ec6.png

2)如下圖設計報表的樣式:

222

3)選中并右鍵 D2 單元格,添加超級鏈接-動态參數,添加參數 a,其值爲:JOINARRAY(ADD2ARRAY(REMOVEARRAY(IF(LEN($a) = 0, RANGE(COUNT(A1[!0;!0])), SPLIT($a, ",")), &A1, 1), IF(INDEXOFARRAY(SPLIT($a, ","), &A1) = -1, 1, -1), &A1),",")

Snag_8930eff.png

公式解析:

  • 定義數組:IF(LEN($a) = 0, RANGE(COUNT(A1[!0;!0])), SPLIT($a, ",")) 

初始化報表時,參數 a 爲空,因此我們要根據分組的長度定義一個同等長度的數組 RANGE(COUNT(A1[!0;!0])),當點擊過一次之後,參數 a 就被賦予了值,這時我們直接取參數 a 即可,由於參數在傳遞過程中被自動處理成了字符串,所以這裏還要使用 split 來分割參數 a。

接下來是修改數組對應下标的值,由於沒有相應的公式,這裏先删除對應下标的值,然後再在對應下标添加新的值。

  • 删除相應點擊位置對應數組下标的值:REMOVEARRAY(上一步結果, &A1, 1)

這裏使用 &A1 獲取相應點擊的分組的位置,然後從上一步結果的數組中在該位置删除一個值。

  • 判斷原數組對應下标的值,然後添加相反值到相應點擊位置對應數組下标下:ADD2ARRAY(上一步結果, IF(INDEXOFARRAY(SPLIT($a, ","), &A1) = -1, 1, -1), &A1)

這裏使用 IF 來判斷,由於定義的數組一開始是 range(分組數量),所以判斷條件寫爲等於 -1,所以每個分組點擊第一次的時候必不成立,從而将本是正數的值變成 -1,達到變換順序的目的。

  • 10.0動态參數不能返回數組類型的數組,需要使用到數組函數JOINARRAY(array,sepa)

4)選中 A3 單元格,設置擴展後排序,排序公式爲:D3 * INDEXOFARRAY(split($a, ","), &A1)

Snag_89bd0e1.png

3. 效果預覽

1)PC端:

222

2)移動端:

222

4. 已完成模板

已完成模板可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Advanced\Cacuate_Between_Cells\分組内排序互不幹擾.cpt

點擊下載模板:分組内排序互不幹擾.cpt

附件列表


主題: 原簡體文檔
  • 有幫助
  • 沒幫助
  • 只是瀏覽

文 檔回 饋

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

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

不再提示

9s後關閉

反饋已提交

網絡繁忙