報表也可以根據單元格計算後結果進行排序
熟悉報表的人都知道,報表中實現資料排序通常有三種方法:
1、 在 sql 語句中增加 order by,如 order by id asc
2、 select 函式取數時,指定排序欄位,如 ds1.select(name:-1),或者按照其他欄位排序,如 ds1.select(EMPID, ,,;NAME:1) 按照 NAME 欄位升序排序
3、 還可以按照某欄位彙總後的結果進行排序,如:ds1.group(省份; 省份:1; ds1.sum( 工業產值):-1),對資料集 ds1 按照省份進行分組,分組後求出每組的 sum( 工業產值),然後按照這個彙總值對組進行逆序排列
可以看到,這三種方式有一個共性,排序欄位的資料都儲存在資料庫中。但是,在實際使用中,資料經常會在報表單元格中進行運算(比如單元格資料乘以一個係數然後再和其他單元格資料相加等),而此時如果要根據計算後的單元格資料進行排序,上述三種方法就無法做到了。
下面,我們就介紹一下如何實現這種需求,基於單元格計算後的資料進行排序。
思路:
我們首先分析一下排序操作是怎麼做的:按照某列資料排序,實際上是先算出該資料的“排名”,然後根據排名的“順序”對資料進行重新排序。因此主要有兩部分操作,一是如何生成排名,二如何根據排名重新對資料排序。
下面就按照這個思路實現一個實際例子。
首先,按照使用者需求先將資料取出來以網格式方式展現,設計後的模板如下:
前幾列按照實際需要將相應欄位拖拽到單元格中即可,在 E3 單元格中,對運貨費進行了單元格間的計算操作,需要解決的問題就是根據 E3 單元格資料進行排序。
接下來先生成 E3 的排名,排名寫法比較固定,在報表後追加一列,在 F3 單元格中寫入表示式:=count(E3[`0]{E3>$E3})+1,統計 E3 擴充套件出來的列中大於當前 E3 單元格的數量加 1,即為當前 E3 的排名。
好,現在排名生成了,看下如何基於排名重新對資料進行排序。
在報表第一列前插入一列,下邊追加一行,在 A4 單元格中寫入表示式:=to(1,count(B3{})),根據擴充套件區域重新模擬出一片擴充套件,如下圖:
接下來就可以使用報表的動態格間計算功能,根據 G3(排名)和 A4 關聯,重新在第四行取出想要的資料,在 B4 單元格中寫入表示式:=B3{G3==$A4},該表示式含義為在 B4 單元格中取出排名(G3)和當前行相同的 B3 的值,並將 B3 單元格的擴充套件方向設定“縱向擴充套件”,報表預覽如下:
可以看到,在 B 列中能夠取到相應的 ID 值,其中,排名 6 和 8 都有兩條記錄,這是因為運貨費單元格有相同的值,所以排名相同。
B 列中取出了訂單 ID 的值,剩餘單元格使用資料集. 欄位名取數就可以了,如下圖:
而原來的第三行資料作為中間資料,可以隱藏掉,同時將 A 列和 G 列也隱藏掉。
因為有相同資料,所以同一個排名會出現多條,相應的,有的名次下就會有空資料,例如因為有兩個第 6 名,所以沒有就沒有第 7 名,為此我們在 B4 單元格的隱藏行表示式中寫入:value()==null。剩下就可以根據實際需要設定報表樣式了,最終展示結果如下:
可以看到,報表已經按照實際運費列的順序從大到小排序了。
總結:
本文的例子中,首先根據單元格的順序生成排名,然後在透過 to 函式模擬出一片資料進行擴充套件,再根據排名的名次重新獲取需要的資料,這樣就可以按照在單元格中經過複雜運算後的結果進行排序了。在實際應用中,還可以在表頭中增加超連結,控制升序或者降序排序,具體的做法只需要在點選時控制 to 函式是從小到大還是從大到小擴充套件就可以了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69957599/viewspace-2669218/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- NC65對單表單據查詢的結果進行排序排序
- JavaScript 根據物件鍵值進行排序JavaScript物件排序
- Laravel 根據 relation sum 結果排序的小技巧Laravel排序
- 二維陣列根據欄位進行排序陣列排序
- 二維陣列根據鍵的值進行排序陣列排序
- 運算元據庫表
- JS 根據彙總結果過濾JS
- ORDER對查詢結果進行排序排序
- 皕傑報表單元格空格
- 根據公曆計算農曆
- List根據時間排序排序
- js根據時間排序JS排序
- SAP RETAIL 如何根據分配表查到根據它建立的採購訂單?AI
- 如何透過報表單元格右鍵控制報表跳轉到不同連結地址
- 根據我們自己的網站進行計劃和設計網站
- 根據emp,dept,salgrade表進行的sql查詢語句(1)SQL
- wps/excel計算單元格內的算式Excel
- onethink裡自己匯入新的資料表,無法進行運算元據表怎麼辦?
- java 根據經緯度計算圓周Java
- 【轉載】SAP ABAP ALV報表控制編輯行,編輯單元格
- 根據數字二進位制下 1 的數目排序排序
- 使用什麼工具可以快速分類檔案 根據名稱進行分類
- python selenium 框架,加了 if 後面的語句後執行沒報錯,也沒結果,求指導Python框架
- 根據年月份分表
- iOS根據圖片比例計算顯示大小iOS
- Python 如何根據給定模型計算權值Python模型
- Python如何根據給定模型計算權值Python模型
- 實時計算Flink>獨享模式>Batch(試用)>建立結果表——建立CSV結果表模式BAT
- 填報表中也可以新增 html 事件HTML事件
- SqlServer根據特定欄位分組後,對需要欄位進行分組拼接SQLServer
- vxe-table grid 分享實現單元格編輯表格表尾合計實時計算
- Mysql利用Like支援根據匹配度進行查詢MySql
- 力扣 根據數字二進位制下1的數目排序力扣排序
- GaussDB(for MySQL) :Partial Result Cache,通過快取中間結果對運算元進行加速MySql快取
- python根據字典內的值實現排序Python排序
- php 陣列根據元素從小到大排序PHP陣列排序
- 運算元據庫
- python運算元據Python