1. 程式人生 > >巧用集算器資料集

巧用集算器資料集

看如下圖所示報表:

  這個報表從樣式來看,可以看作是一個簡單的網格式報表,統計著各種收支金額,但因為取數複雜,每個格子的資料都來自一個複雜的 sql 資料集,並且涉及十幾個,乃至幾十個資料集,藍色 區域裡每個格子都需要從各自的資料集裡檢索遍歷,查詢與左表頭關聯的記錄。為了方便體會這一點,我們將上圖報表簡化一點,如下圖所示:

C1,D1 單元格都分別從 ds2,ds3 中取數,並通過關聯條件與 B1 關聯,諸如這樣十幾個資料集在報表端的遍歷、關聯,如果遇到大資料量,大的併發,速度就會受到影響,並且這也只適合一對一的情況,如果遇到一對多的情況,就無法如此運用了。

   所以,如果這些資料集能整合為一個數據集,所有的關聯都放在資料集裡去處理,那麼報表端的計算就變得靈活簡單的多,但是 sql 資料集去完成這個拼接比較困難,也會很慢,集算器資料集正好能完成這個工作,速度也會大幅度提升,解決思路如下:

   1. 通過  fork  多執行緒取數,並行堵出每一個數據集

     eg:

     

   2. 通過 join/align 完成每個資料集的橫向拼接

      eg: [email protected](A3(1):amount1, 訂單 ID;A3(2):amount2, 訂單 ID;A3(3):amount3, 訂單 ID)

  1.  通過 new 返回一個數據集

     eg: =A5.new(amount1. 訂單 ID,amount1. 訂單金額,amount2. 數量,amount3. 回款額)

以上只是提供一個思路,具體運用哪個函式,哪個選項,還需要根據實際資料合理選擇,集算器函式具體用法請參考《集算器函式參考》。

   除此之外,像常見的需要用於彙總統計的原始資料量非常大,報表並不大的情況,如果每次生成報表都需要現算,一方面非常慢,另一方面資料庫的壓力會很大,此時傳統辦法可以採用儲存過程資料集對資料預先進行一次壓縮,生成中間表,然後再基於中間表生辰報表,可以大大提高運算速度並減輕資料庫的壓力。但是儲存過程如果指令碼過於複雜,那麼後期維護比較麻煩,而且資料處理的靈活性也受限,這個時候用集算器資料集或者指令碼資料集來處理資料,就方便的多。



作者:IBelieve
連結:http://c.raqsoft.com.cn/article/1534907085740
來源:乾學院
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。