巧用集算器資料集

2021-09-01 22:05:25 字數 1110 閱讀 4983

看如下圖所示報表:

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

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

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

1. 通過  fork  多執行緒取數,並行堵出每乙個資料集

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

eg: =join@l(a3(1):amount1, 訂單 id;a3(2):amount2, 訂單 id;a3(3):amount3, 訂單 id)

通過 new 返回乙個資料集

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

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

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

潤幹報表5 巧用集算器資料集

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

用集算器編寫算二十四

算24點,是一種常見的智力遊戲。它可以使用抽去大小王的撲克牌來玩,隨便抽出4張牌,要求通過加 減 乘 除等四則運算,並使用所有的這4個數,將結果算為24。在撲克牌中,jqk記為11,12和13。用集算器,可以比較方便地編寫程式,根據隨便給定的4個數,計算出這個遊戲的解答 下面,詳細分析一下這段 計算...

趣味集算 wordcount

wordcount 差不多是最常用的分布式系統練習程式了,hadoop 就經常用這個當例子。我們來看用集算器怎麼做 wordcount。例如,d files novel 目錄中,有一些 文件,現在,需要統計這些 中哪些單詞最為常用 在集算器中,如果不嫌寫得長,只要一句 就可以搞定了 a1 direc...