處理跨行組運算報表的常用辦法及集算報表解決,運算報表

來源:互聯網
上載者:User

處理跨行組運算報表的常用辦法及集算報表解決,運算報表
報表說明

         根據訂單表和指定年份(參數)按月統計訂單金額,以及與上一訂單月金額比,與去年同月金額比。報表樣式如下:


        這裡需要注意的是——比去年同期是指與去年同月份的比值,無對應月份則為空白;要求只顯示本年資料

        這個報表的麻煩之處在於需要較複雜的資料計算工作,但一般報表工具的計算能力較弱,如果採用報表工具本身來完成這個計算工作則會相當複雜,比如採用用潤乾報表來實現將會是這樣的:

方法一:多資料來源+隱藏列

         首先通過兩個資料集分別讀取今年和去年的資料,在報表範本中進行關聯後分別顯示兩年同月的資料,從而完成比較。

資料集設定

         通過ds1和ds2分別取今年和去年資料,資料集設定如下:

報表範本及運算式設定

其中,需要設定D列隱藏,以便報表展現時不顯示去年資料。

 

         這種實現方式相對簡單,無需複雜的運算式即可實現,但缺點是由於要使用多資料來源,從同樣資料表中過濾兩次分別輸出兩個資料集,取數效率較低。此外,隱藏列D也會影響報表效能。

方法二:位移座標+隱藏行列

        通過按訂購年月分組,使用潤乾報表提供的位移座標,輔助以隱藏行列的方式實現。

資料集設定

        資料集參數如下:

報表範本及運算式設定

        通過這種方式,通過潤乾報表中層次座標的進階寫法避免了多源,體現了潤乾報表的強大之處,但是仍然要依靠隱藏行列實現,而且E3中計算同期比的計算運算式過於難書寫和理解(要理解主格附屬格的概念、位移座標的使用以及如何在格集運算式中引用當前格的主格),這也給報表開發和維護帶來了困難。

        無論是多資料來源,還是層次座標,依賴隱藏行列,都是因為需要在報表中完成同環比計算導致,而往往這樣的計算還比較複雜。這是因為傳統報表工具將資料計算(資料來源準備)和報表轉譯混在一起導致(即使功能強大的潤乾報表也不例外),如果將這兩部分分開,則會使報表開發更加清晰。

 

        另一種辦法是事先把資料計算準備好,報表工具只需要負責呈現和簡單計算。但無論是使用複雜SQL、預存程序和自訂JAVA資料集編程,對於這樣的複雜運算(實際情況往往比這個例子更麻煩得多)都是一件工作量很大的事情,而且難以維護。

        集算報表本身內建了適合結構化計算的指令碼,可以方便地寫出資料準備的計算(相當於一種更使用更簡單的自訂資料集)。上述報表需求使用集算報表可以這樣完成。

編寫集算指令碼

         使用集算指令碼編輯器編寫集算指令碼,使用系統預設資料來源demo。


        編寫指令碼完成同比環比計算(右側為單元格運行格值):

        A1:串連資料來源demo;

        A2:根據年份參數取出今年和去年兩年的訂單資料;

        A3:關閉資料連線;

        A4:按訂購日期排序;

        A5:按年 月分組,並匯總訂單金額;

        A6:計算比上期,這裡注意到使用[-1]來引用上一條記錄;

        A7:按月份排序;

        A8:計算相同月份和上一年的比值,即同期比;

        A9:只選出本年資料,通過A10為報表返回結果集。

編輯報表範本

         使用集算報表編輯器,設定資料來源,用於報表預覽。


        建立報表範本設定報表參數:

        設定集算器資料集,調用上述編輯好的指令檔:

        其中,dfx檔案路徑既可以是絕對路徑,也可以是相對路徑,相對路徑是相對選項中配置的dfx主目錄的;參數arg1為指令碼參數,year為報表範本參數,這裡將報表輸入參數傳遞給指令碼用於資料計算,事實上兩個參數可以同名。

 

        報表範本及運算式如下:

        可以看到,使用集算器指令碼可以快速完成跨行組運算的報表。而且外置的集算指令碼具有可視化的編輯調試環境,編輯好的指令碼還可以複用(被其他報表或程式調用)。不過,如果指令碼已經調試好,而且不需要複用的時候,要維護兩個檔案(集算指令碼和報表範本)的一致性會比較麻煩,這時候直接使用集算報表的指令碼資料集就比較簡單了。

         在指令碼資料集中可以分步編寫指令碼完成計算任務,文法與集算器一致,還可以直接使用報表定義好的資料來源和參數。以上述第二個報表需求為例,使用指令碼資料集可以這樣完成:

        1. 在資料集設定視窗中點擊“增加”按鈕,彈出資料集類型對話方塊,選擇“指令碼資料集”;

        2.在彈出的指令碼資料集編輯視窗中編寫指令碼;

這裡可以看到,在指令碼資料集中直接使用了報表中定義好的資料來源demo和參數year,比起單獨的集算指令碼更加簡單、直接。

        3.報表範本和運算式與使用集算器資料集方式一致,不再贅述。


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.