報表也可以根據單元格計算後結果進行排序

2022-08-10 04:39:12 字數 2110 閱讀 8212

熟悉報表的人都知道,報表中實現資料排序通常有三種方法:

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])+1,統計 e3 擴充套件出來的列中大於當前 e3 單元格的數量加 1,即為當前 e3 的排名。

好,現在排名生成了,看下如何基於排名重新對資料進行排序。

在報表第一列前插入一列,下邊追加一行,在 a4 單元格中寫入表示式:=to(1,count(b3{})),根據擴充套件區域重新模擬出一片擴充套件,如下圖:

接下來就可以使用報表的動態格間計算功能,根據 g3(排名)和 a4 關聯,重新在第四行取出想要的資料,在 b4 單元格中寫入表示式:=b3,該表示式含義為在 b4 單元格中取出排名(g3)和當前行相同的 b3 的值,並將 b3 單元格的擴充套件方向設定「縱向擴充套件」,報表預覽如下:

可以看到,在 b 列中能夠取到相應的 id 值,其中,排名 6 和 8 都有兩條記錄,這是因為運貨費單元格有相同的值,所以排名相同。

b 列中取出了訂單 id 的值,剩餘單元格使用資料集. 欄位名取數就可以了,如下圖:

而原來的第三行資料作為中間資料,可以隱藏掉,同時將 a 列和 g 列也隱藏掉。

因為有相同資料,所以同乙個排名會出現多條,相應的,有的名次下就會有空資料,例如因為有兩個第 6 名,所以沒有就沒有第 7 名,為此我們在 b4 單元格的隱藏行表示式中寫入:value()==null。剩下就可以根據實際需要設定報表樣式了,最終展示結果如下:

可以看到,報表已經按照實際運費列的順序從大到小排序了。

總結:

本文的例子中,首先根據單元格的順序生成排名,然後在通過 to 函式模擬出一片資料進行擴充套件,再根據排名的名次重新獲取需要的資料,這樣就可以按照在單元格中經過複雜運算後的結果進行排序了。在實際應用中,還可以在表頭中增加超連結,控制公升序或者降序排序,具體的做法只需要在點選時控制 to 函式是從小到大還是從大到小擴充套件就可以了。

更多報表樣式類問題請看:報表樣式分類導航

* 按段分組報表製作

* 如何開發主從報表

* 報告式報表的製作

* 報表中如何實現不規則布局

* 報表工具輕鬆搞定卡片式報表

根據條件合併單元格

於是有了如下 樣式自己去寫哦baby html col0 col1 col2 col3 suzhou 11111 22222 suzhoucity suzhou 33333 222221 suzhoucity suzhou 55555 66666 suzhoucity shanghai 77777 ...

RDLC報表縱向合併單元格。

在做rdlc報表時發現居然沒有縱向合併單元格,震驚!網上查了一些資料,有些方法很可愛,採用去除邊框法,但是用這種方法如果要求文字屬性居中的話那則達不到美觀效果,還有些複雜一點的方法,我都沒耐心看,然後大致看了這一篇最終很簡單就做出來了 其實很簡單的,首先選中資料行,新增父級。選擇分組依據 確定之後就...

cognos 報表,某一單元格單獨計算,單項

cognos存在這種情況,一張報表,但是某乙個單元格的計算方式不同於其他字段,這時候需要用 單項 去實現該功能 做法如下 以交叉表為例 1.選中某一單元格,在屬性中將定義內容置為 是 2.解鎖交叉表,從工具箱拖乙個 單項 到該單元格,預設新建乙個查詢 3.在新的查詢中計算好資料項,將該資料項拖到報表...