一般情況下,如果報表中存在很多格間計算(即單元格之間的關聯計算),那麼通常會影響報表效能。這是因為:
1、格間計算很難分步驟編寫,導致運算過程很難優化。
2、格間計算可能需要多次遍歷單元格集才能完成運算。
3、格間計算往往要利用較多隱藏格作為中間變數。而隱藏格除格值外,還記錄了很多與顯示相關的屬性值,比如:字型、顏色、顯示方式等。即便設定了單元格隱藏,但這些屬性還在,依然會占用記憶體,影響計算速度。
不過在潤幹報表的集算指令碼支援下,這個問題能夠得到很好的解決。下面我們就通過乙個典型的例子——《雇員銷售情況排名》報表,來看下傳統方式和潤幹報表的對比:
報表要求如下:
按照員工姓名排序,根據訂單總價計算排名,並且計算「和上一名的差距」。
一、傳統實現方式
1、首先定義 sql 資料集 ds1,其 sql 如下:
select employee.eid,max(employee.name) 姓名,sum(訂單明細. 數量 * 訂單明細. 單價) 訂單總價 from employee, 訂單, 訂單明細 where 訂單. 訂單 id = 訂單明細. 訂單 id and employee.eid = 訂單. 雇員 id group by employee.eid order by 姓名
可以看到,為了讓輸出結果要按姓名排序,sql 中要寫作「order by 姓名」。
2、報表設計
其中,雇員姓名、訂單總價:直接來自 sql。
排名:c2 單元格利用格間計算實現排名計算。計算當前訂單總價的排名時,需要先找出所有訂單總價中比本格值大的單元格,然後符合條件的單元格數加一就是排名。也就是說每計算乙個雇員的排名,就要遍歷一邊所有的訂單總價。
類似地,d2 計算「和上一名的差距」時還要再做一次按條件遍歷。這個遍歷還存在引用關係的處理,要等排名列計算完才能算差距列,但報表計算次序一般是從上到下的,中途處理引用關係會導致多次失敗的試算(試圖計算某格,如果發現該格引用的格未計算就要存放等待著下一輪再計算),失敗的試算會浪費大量時間。
上述格間計算對訂單總價遍歷了 n 次,n 是雇員個數,兩個格間運算的總體複雜度是 2*n*n。
二、潤幹報表方案
採用潤幹報表方案(結合集算器實現),可以編寫過程化的集算指令碼代替格間計算,從而提公升報表效能。
1、編寫集算器指令碼
對於本報表,編寫指令碼如下(儲存為 sales.dfx):a1
=connect(「demo」)
2=a1.query(「select employee.eid,max(employee.name) 姓名,sum(訂單明細. 數量 * 訂單明細. 單價) 訂單總價,null 排名,0 和上一名的差距 from employee, 訂單, 訂單明細 where 訂單. 訂單 id = 訂單明細. 訂單 id and employee.eid = 訂單. 雇員 id group by employee.eid order by 訂單總價 desc」)
3=a1.close()
4=a2.run(#: 排名,if(#!=1, 訂單總價 [-1]- 訂單總價,0): 和上一名的差距)
5=a4.sort(姓名)
6return a5
**說明:
a1:連線資料庫。
a2:用 sql 計算訂單總價,並按照訂單總價降序排序。
a3:關閉資料庫。
a5:按照姓名重新排序。
a6:返回結果集給報表。
可以看到集算指令碼僅用一次遍歷加一次排序就完成了排名和上一名的差距的計算,也不存在試算以解決引用關係的問題,所有計算都能一次成功進行。本方案的整體複雜度是 n(遍歷計算)+n*logn(排序),比之前的格間計算快得多。
2、配置報表資料集
在報表設計器中定義集算資料集,呼叫 sales.dfx:
3、設計報表
設計錶樣如下:
機器學習模型效能提公升方案
機器學習最有價值的部分是 建模。這是在歷史資料上訓練模型並對新資料進行 的模型的開發。關於 建模的首要問題是 如何獲得更好的結果?這份備忘單包含了多年以來我的最佳應用程式,以及我對頂尖的機器學習從業人員和比賽獲勝者的學習所總結出的最佳建議。有了本指南,您不僅會得到解脫和提公升的效能,甚至可以在 問題...
伺服器IO效能提公升方案
介質 hdd ssd 介面sata scsi controller,raid卡or南橋,是否有快取 檔案系統 xfs,或其他brtfs之類的 磁碟佇列演算法deadline cfq noop dm記憶體快取設定 raid形式 效能raid0 磁碟空間使用率 100 故成本最低。讀效能 n單塊磁碟的讀...
提公升前端效能 技術方案設計
瀏覽器效能體系的建立可以分為以下幾個部分 要想做好效能優化,正確地評估現狀和建立指標是最關鍵的一步,它又往往是會被輕視的一步。效能問題可以分成很多方面,最重要的幾個點是 在瀏覽器的大致工作過程中,我們必須理解幾件事 技術方案設計好了,它是不會自己變成線上頁面的,所以,有了技術方案,我們只完成了一半的...