NC報表開發(fā)手冊_第1頁
NC報表開發(fā)手冊_第2頁
NC報表開發(fā)手冊_第3頁
NC報表開發(fā)手冊_第4頁
NC報表開發(fā)手冊_第5頁
已閱讀5頁,還剩122頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、報表模式化開發(fā)手冊(V1.0,forNC-V3)朱俊彬、賴宏偉、李媛媛 NC-UAP目錄第一章總體介紹. 21.開發(fā)概述 . 21.1技術(shù)型報表與業(yè)務(wù)型報表. 21.2一般報表開發(fā)存在的問題. 21.3模式化報表開發(fā)思路. 22.應(yīng)用模型 . 32.1數(shù)據(jù)模型與展現(xiàn)模型. 32.2數(shù)據(jù)字典. 42.3業(yè)務(wù)系統(tǒng)集成. 5第二章低開發(fā)難度報表. 61.概述 . 62.查詢類報表 . 82.1明細(xì)報表. 82.2匯總報表. 172.3列結(jié)構(gòu)依賴于查詢條件的報表(動態(tài)SQL). 233.交叉類報表 . 303.1列向拼接查詢型報表(復(fù)合查詢). 313.2列向分支統(tǒng)計型報表(CASE-WHEN). 3

2、63.3動態(tài)行列交叉型報表(旋轉(zhuǎn)交叉). 404.投影類報表 . 454.1單元格依賴于行列條件的報表(投影交叉). 454.2半錄入半嵌入型報表(合并查詢). 515.算法類報表 . 555.1數(shù)據(jù)加工預(yù)備知識. 555.2非投影類占比報表(普通占比). 605.3投影類占比報表(投影占比). 655.4程序送數(shù)型報表. 696.高級應(yīng)用 . 736.1支持穿透的非投影交叉類報表(普通穿透). 736.2支持穿透的投影交叉類報表(投影穿透). 796.3支持主從連動的報表. 846.4支持統(tǒng)計圖表的報表. 88第三章高開發(fā)難度報表. 921.基于行業(yè)報表工具開發(fā)的報表 . 921.1標(biāo)準(zhǔn)報表

3、. 921.2分塊填充報表. 1042.基于CELL REPORT工具開發(fā)的報表. 1112.1CELL REPORT工具介紹 . 1112.2CELL REPORT報表 . 113附錄. 1241模式一覽表 . 1242查詢引擎FAQ之參數(shù)篇 . 125第一章總體介紹1.開發(fā)概述1.1技術(shù)型報表與業(yè)務(wù)型報表我們將報表應(yīng)用劃分為兩種類型,一類應(yīng)用的側(cè)重點在于出報表所蘊涵的技術(shù),開發(fā)者(程 序員或?qū)嵤┤藛T)通常憑借一定的數(shù)據(jù)庫和編程知識,基于庫里的業(yè)務(wù)數(shù)據(jù),做出符合用戶 需求的報表展現(xiàn)和輸出,此類應(yīng)用稱為技術(shù)型報表;另一類應(yīng)用則著眼于整個報表生命周期 中各環(huán)節(jié)的管理(包括出表、上報、審核、匯總、

4、發(fā)布等流程),即把做報表的行為當(dāng)成一 項業(yè)務(wù),對直接開發(fā)者的主要要求在于業(yè)務(wù)熟悉程度而非技術(shù),此類應(yīng)用稱為業(yè)務(wù)型報表。前者通常由專業(yè)程序員、二次開發(fā)人員或技術(shù)型實施顧問承擔(dān)開發(fā)工作,早期工具如報表模 板、自定義查詢等均面向此類應(yīng)用,IUFO 則是后者的代表性產(chǎn)品。本文檔作為集團平臺技 術(shù)部對外發(fā)布的開發(fā)手冊,主要針對對象為技術(shù)型報表。1.2一般報表開發(fā)存在的問題報表屬于 ERP 項目中的關(guān)鍵應(yīng)用,通常被用戶的高層領(lǐng)導(dǎo)用于企業(yè)業(yè)績評估、輔助決策或 對外發(fā)布。據(jù)統(tǒng)計,在很多交付壓力較大的項目當(dāng)中,報表開發(fā)占有相當(dāng)?shù)谋戎?。就目前開 發(fā)現(xiàn)狀而言,影響報表快速交付的主要問題有以下幾點:1、 報表開發(fā)本身

5、的復(fù)雜性高。中國式報表由于政策以及長期人工填報的原因具有極強的個 性化特點,根據(jù)業(yè)務(wù)邏輯進行數(shù)據(jù)查詢、數(shù)據(jù)組織、表樣展現(xiàn)和界面處理的每個步驟都 耗費了很高的開發(fā)代價;2、 報表開發(fā)的復(fù)用性低。開發(fā)人員投入巨大努力完成第一批報表后,發(fā)現(xiàn)第二批報表依然 要從頭做起,或者另一名開發(fā)人員遇到類似于第一批報表的需求,無法借鑒(甚至根本 不知道)前人的開發(fā)成果;3、 報表開發(fā)對專業(yè)技能要求偏高。很多二次開發(fā)人員雖然不是專門搞技術(shù)的,但通常具有 一定的開發(fā)基礎(chǔ),而目前的二次開發(fā)平臺限制了他們發(fā)揮應(yīng)有的作用。1.3模式化報表開發(fā)思路所謂模式化開發(fā),包含兩方面的工作:專職人員將有代表性的應(yīng)用進行歸納抽象,提取出

6、共 性的部分形成代碼框架和方案,并以手冊的形式對外發(fā)布;報表開發(fā)人員拿到項目需求后, 從手冊上找到匹配的模式,通過編寫一些低技術(shù)含量的子類代碼或進行一些機械性的工具操 作,就能夠快速地完成開發(fā)工作。以往大部分的重復(fù)性勞動已經(jīng)在模式的基類或者缺省實現(xiàn)第 2 頁中處理,當(dāng)開發(fā)人員需要體現(xiàn)個性化的時候,則可以通過自己對接口的特殊實現(xiàn)完成。隨著模式的逐步豐富,開發(fā)人員開發(fā)各類模式報表的工作量都會明顯降低,同時也實現(xiàn)了代 碼復(fù)用和知識共享,另一方面,由于開發(fā)者的工作趨于簡單和機械,他們的角色就可以由低 專業(yè)技能人員所取代。從這個角度上說,模式化是解決上節(jié)所述三個問題從而真正實現(xiàn)報表 快速開發(fā)的有效方案。

7、本手冊介紹了兩大類 NC 報表開發(fā)模式,一類是基于查詢引擎的低開發(fā)難度報表,其編碼量 小,操作簡單,適合于開發(fā)數(shù)據(jù)和格式比較規(guī)律的報表;另一類是基于行業(yè)報表工具的高開 發(fā)難度報表,主要工作是編寫子類代碼,自由度高,適合于開發(fā)復(fù)雜報表。2.應(yīng)用模型2.1數(shù)據(jù)模型與展現(xiàn)模型一般來說,報表是由數(shù)據(jù)和格式組成的整體。報表的數(shù)據(jù)模型通常包含以下信息:1、 數(shù)據(jù)結(jié)構(gòu);2、 待定參數(shù)描述;3、 取數(shù)規(guī)則描述;4、 數(shù)據(jù)加工算法描述;5、 多個數(shù)據(jù)集合之間的數(shù)據(jù)關(guān)聯(lián)描述;可作為數(shù)據(jù)載體的常用 NC 數(shù)據(jù)結(jié)構(gòu)包括:1、 nc.vo.pub.CircularlyAccessibleValueObject循環(huán)訪問

8、VO,是由屬性和取值成對組成的 集合,提供了根據(jù)屬性獲得/設(shè)置值的方法,是單據(jù)和報表模板采用的主要結(jié)構(gòu);2、 nc.vo.pub.ValueObject普通 VO,包含多個屬性及每個屬性的 getter 和 setter 方法,是 業(yè)務(wù)組主要數(shù)據(jù)結(jié)構(gòu)的父類;3、 com.borland.dx.dataset.StorageDataSet存儲數(shù)據(jù)集,由元數(shù)據(jù)和內(nèi)容數(shù)據(jù)兩部分組成, 元數(shù)據(jù)(Column)描述了各列的信息,內(nèi)容數(shù)據(jù)描述了一個二維的數(shù)據(jù)集合,當(dāng)游標(biāo) 指向內(nèi)容數(shù)據(jù)的某行時,可以獲得該行指定列的數(shù)據(jù),用于查詢引擎;4、 nc.vo.pub.rs.MemoryResultSet內(nèi)存結(jié)果集,

9、同樣由元數(shù)據(jù)和內(nèi)容數(shù)據(jù)組成,其中元 數(shù)據(jù)(MemoryResultSetMetaData)描述各列信息,內(nèi)容數(shù)據(jù)(ArrayList)描述了一個二 維數(shù)據(jù)集合,可以直接訪問其任何元素,目前被一些業(yè)務(wù)算法使用;5、 Object,Vector,ArrayList這些都是 JDK 的常用結(jié)構(gòu),均可存儲二維數(shù)據(jù)。報表的展現(xiàn)模型通常包含以下信息:1、 控件(核心控件是表格)屬性和布局;2、 控件顯示內(nèi)容與顯示規(guī)則(綁定數(shù)據(jù)、參數(shù)、行列格式、界面資源等);3、 控件連動規(guī)則;4、 數(shù)據(jù)處理規(guī)則(定位、排序、過濾、統(tǒng)計、公式、交叉、鉆取等);5、 動態(tài)擴展規(guī)則;6、 輸入輸出控制(待定參數(shù)設(shè)置,打印,導(dǎo)出

10、等)第 3 頁2.2數(shù)據(jù)字典NC 數(shù)據(jù)字典提供了統(tǒng)一的數(shù)據(jù)建模平臺,支持對各種數(shù)據(jù)庫對象進行管理,維護這些物理 對象的邏輯屬性,并向外系統(tǒng)提供訪問數(shù)據(jù)庫邏輯信息的接口。以查詢引擎為例,查詢對象 的定義是基于數(shù)據(jù)字典進行的,而這份數(shù)據(jù)字典來自查詢對象所指定的數(shù)據(jù)源。由于多數(shù)報 表的列與業(yè)務(wù)數(shù)據(jù)庫的字段存在某種對應(yīng)關(guān)系,因此數(shù)據(jù)字典的存在有助于提高查詢定義的 直觀性和易用性。NC 數(shù)據(jù)字典通常在安裝產(chǎn)品時候由系統(tǒng)生成,如果想自己為某些數(shù)據(jù)庫對象生成字典,可 以采用數(shù)據(jù)字典管理界面提供的導(dǎo)入方法。導(dǎo)入方式包括三種(詳細(xì)操作可參見數(shù)據(jù)字典 導(dǎo)入說明):1、 解析 PDM 文件(xml 格式);2、 解

11、析 NC 標(biāo)準(zhǔn)建庫腳本;3、 提取數(shù)據(jù)庫元數(shù)據(jù);如果需要給非 NC 數(shù)據(jù)庫(比如用戶采用的第三方數(shù)據(jù)庫)生成數(shù)據(jù)字典,可以利用 PowerDesigner 提供的逆向工程功能將庫里的物理表生成 PDM 文件,修改其中表和字段的 中文名稱,然后以 xml 文件格式存儲,再使用上述第一種方法導(dǎo)入。第 4 頁2.3業(yè)務(wù)系統(tǒng)集成對于直接使用查詢引擎開發(fā)出的報表,可以使用以下兩種方式掛接到業(yè)務(wù)組的功能節(jié)點。強 烈建議把準(zhǔn)備掛接節(jié)點的查詢對象和格式對象的編碼設(shè)為與業(yè)務(wù)系統(tǒng)相關(guān)的有意義字符串, 以避免不同業(yè)務(wù)系統(tǒng)預(yù)置對象互相覆蓋的危險性。報表管理節(jié)點掛接法:1、 注冊功能節(jié)點,類名為 nc.ui.pub.q

12、uerymodel.QueryMainUI_N;2、 下掛一個參數(shù),參數(shù)名為 folderId,參數(shù)值為客戶化下查詢引擎管理中相關(guān)報表目 錄的 ID(可從數(shù)據(jù)庫表 pub_formatmodeldef 的 id 字段查出)。獨立報表節(jié)點掛接法:1、 注冊功能節(jié)點,類名為:nc.ui.pub.querymodel.QueryNodeUI:2、 下掛兩個參數(shù):pkQryNode界面模型對應(yīng)的編碼(可從查詢引擎管理界面讀取),dsName查詢定義所在數(shù)據(jù)源。對于高開發(fā)難度模式的報表,則與普通功能節(jié)點一樣掛接 ToftPanel 的子類即可。第 5 頁第二章 低開發(fā)難度報表1.概述本手冊列舉的低開發(fā)難

13、度報表模式統(tǒng)一由查詢引擎(V3 版本)提供解決方案。查詢引擎是 一個面向高級實施人員和普通開發(fā)人員的查詢建模產(chǎn)品,延續(xù)并完善了自定義查詢體系的技 術(shù)路線,在全面支持復(fù)雜查詢的設(shè)計和個性化的報表展現(xiàn)的同時,大幅度降低了報表開發(fā)人 員的編碼工作量和專業(yè)技能要求。我們再來看一下查詢引擎的適用性和不適用性。查詢引擎長期作為一個查詢工具發(fā)展,因此 尤其適用于與數(shù)據(jù)庫查詢分析或數(shù)據(jù)挖掘關(guān)系密切的報表開發(fā),同時也支持程序員調(diào)用服務(wù) 器端代碼對數(shù)據(jù)進行業(yè)務(wù)處理。另一方面,自定義查詢體系與模板體系存在一個很大的不同, 模板體系在發(fā)布產(chǎn)品之前已經(jīng)由程序員錄入了大量初始化數(shù)據(jù),因此不同用戶能夠分配到不 同的查詢模板

14、、報表模板和打印模板,而自定義查詢體系是完全自定義的實時開發(fā),沒有模 板的預(yù)制數(shù)據(jù),因此在一個時刻只支持一種參數(shù)控制樣式、一種報表界面樣式和一種打印樣 式(或直接打?。@些樣式均可在設(shè)計態(tài)修改。在展現(xiàn)上,由于查詢引擎使用的是 SWING 的表格控件,因此對一些 EXCEL 風(fēng)格的需求支持不夠,這個薄弱環(huán)節(jié)將在 V31 得到加強。 總體來說,V3 版本的查詢引擎暫不適用于以下兩類報表開發(fā):1、 有多模板分配需求的報表,或?qū)Υ蛴∮懈叨纫蟮膱蟊恚?、 存在表體合并單元格的報表。查詢引擎的查詢模型(數(shù)據(jù)模型)設(shè)計如下:查詢模型流程如下所示(設(shè)計態(tài)/運行態(tài)):第 6 頁界面模型(展現(xiàn)模型)設(shè)計如下

15、:第 7 頁界面模型流程如下所示:本章共介紹了五大類報表的十五種開發(fā)模式。盡管這些模式之間存在相當(dāng)差異,但是針對以 前我們發(fā)現(xiàn)的一些用例雜亂導(dǎo)致的培訓(xùn)效果問題,本章的所有范例集中面向兩個業(yè)務(wù)應(yīng)用(單位費用統(tǒng)計和部門人事統(tǒng)計),即用不同方案解決相似問題,以便于讀者從中領(lǐng)會和比 較這些模式的原理、特點和適用性。希望這種做法不會給讀者造成一個誤導(dǎo):查詢引擎只能 解決這兩類報表的應(yīng)用。2.查詢類報表查詢類報表指通過一個或多個 SQL 查詢結(jié)果形成的二維數(shù)據(jù)展現(xiàn)出來的報表,由于 SQL 的 語法特點,此類報表通常具有固定的列結(jié)構(gòu)和動態(tài)的行結(jié)構(gòu),但模式 2.3 也探討了一種根據(jù) 參數(shù)動態(tài)改變查詢列結(jié)構(gòu)的方

16、案。2.1明細(xì)報表【概述】 明細(xì)報表用于展現(xiàn)最基本維度上的數(shù)據(jù),即最細(xì)粒度的數(shù)據(jù)。通常明細(xì)總是相對于匯總而言的,如果我們把某商品每個月的總銷售額列表視為匯總數(shù)據(jù),那么該商品每天的詳細(xì)銷售情 況就可視為明細(xì)數(shù)據(jù);如果我們把某部門當(dāng)年的總薪資情況做成匯總表,那么該部門每位員 工當(dāng)年的薪資情況就可以做成明細(xì)表。查詢類報表中的明細(xì)表通常是指一些不含聚合函數(shù)的 SQL 語句直接能夠查詢出的數(shù)據(jù)形成的報表?!緫?yīng)用場景】第 8 頁開發(fā)人員需要通過多表聯(lián)查 SQL 或者復(fù)合查詢獲得表體數(shù)據(jù),同時為報表展現(xiàn)提供待定條 件設(shè)置、欄位設(shè)置、排序、過濾、定位、小計合計及輸出等功能。當(dāng)明細(xì)表與匯總表一起出 現(xiàn)時,用戶通

17、常還會有從匯總數(shù)據(jù)聯(lián)查明細(xì)數(shù)據(jù)的需求(又稱穿透或鉆?。?,此類應(yīng)用將在 模式 6.1 中介紹?!具m用性和不適用性】 適用于:¾明細(xì)數(shù)據(jù)的取數(shù)規(guī)則可用 SQL 描述;不適用于:¾通過行列條件統(tǒng)計單元取值的明細(xì)表。此類報表應(yīng)遵循模式 4.1 解決;¾通過程序算法構(gòu)造明細(xì)數(shù)據(jù)的報表。此類報表應(yīng)遵循算法類報表模式解決;【解決方案】取數(shù)由向?qū)?SQL 設(shè)計描述,查詢條件由參數(shù)控制機制解決,欄目在格式設(shè)計態(tài)設(shè)定,排 序、過濾、定位、小計合計、輸出等功能均內(nèi)置于報表瀏覽態(tài)?!鹃_發(fā)步驟】第一步:在查詢引擎管理中建立查詢對象 Q1,做向?qū)?SQL 設(shè)計(通常不含聚合函數(shù) sum、

18、 avg、count、max、min)。對于一個 SQL 無法描述的查詢,比如指定單位在指定期間內(nèi)不同 科目的發(fā)生額,可以利用復(fù)合查詢(基于查詢對象的查詢,可參考模式 3.1)進行描述。Q1 中待定的信息由參數(shù)定義描述,普通參數(shù)可以在向?qū)皆O(shè)計的篩選條件處引用,替換型參數(shù) 可以在向?qū)胶褪止な皆O(shè)計的任意位置引用(參見 FAQ 文檔);第二步:創(chuàng)建格式對象 F1,引用查詢對象 Q1 并嵌入表格,做相關(guān)的欄位、列格式和列表頭 設(shè)計。表頭表尾可放置綁定參數(shù)的控件;第三步:瀏覽 F1(或掛功能節(jié)點),設(shè)置參數(shù),檢查數(shù)據(jù)與格式是否正確;【FAQ】1、如何充分發(fā)揮查詢模型中參數(shù)的功能? 答:參見附錄提供的

19、查詢引擎 FAQ 之參數(shù)篇。2、格式設(shè)計中的 16 種控件各有何種用途? 答:表格、圖表是核心控件,用于綁定數(shù)據(jù)集;面板、拆分窗格(分割面板)、多頁簽作為 界面容器;標(biāo)簽、文本框、下拉框(組合框)、參照、文本域、復(fù)選框、單選框是表頭表尾 控件,需要放在容器上面,用于綁定參數(shù);下拉框、列表綁定枚舉型參數(shù),參照綁定參照型 參數(shù);主子表是已經(jīng)不推薦使用的連動展現(xiàn)控件;按鈕、樹暫無實際用處。3、如何控制報表的輸出格式?答:打印輸出利用格式設(shè)計中的打印設(shè)置功能控制,EXCEL 輸出由界面表格的樣式控制?!痉独?單位費用明細(xì)表各單位在指定期間范圍內(nèi)的費用明細(xì)情況。報表中要求包括公司、期間、制單日期、科目

20、、分錄摘要、發(fā)生額等信息,用戶可以根據(jù)年度和期間范圍進行查詢。第 9 頁公司期間制單日期科目摘要借發(fā)生額貸發(fā)生額1、 查詢引擎管理主界面創(chuàng)建查詢對象,編碼為 gldetail,名稱為費用明細(xì);2、進行參數(shù)定義,增加三個字符型參數(shù):年,起始期間,終止期間;3、進行 SQL 向?qū)гO(shè)計:從數(shù)據(jù)字典添加憑證表(gl_voucher)、憑證分錄(gl_detail)、科目 表(bd_accsubj)和公司目錄(bd_corp),指定表間連接關(guān)系、查詢字段、篩選條件(先定 義確定條件)和排序字段;第 10 頁第 11 頁4、在篩選條件頁簽增加待定條件,在右操作數(shù)框中按 F12 引用參數(shù);5、創(chuàng)建格式對象,

21、編碼為 gldetail,名稱為“費用明細(xì)表”;第 12 頁6、引用查詢“費用明細(xì)”;7、進行格式設(shè)計:添加表格和面板控件,表格??坑谥胁浚p擊控件設(shè)置屬性,綁定數(shù)據(jù) 集費用明細(xì),面板??坑诒辈浚ㄗ鳛楸眍^容器),采用流式布局(FlowLayout),在面板上放 三個文本框控件,分別綁定費用明細(xì)的三個參數(shù);第 13 頁第 14 頁8、(可選)定義一種列格式,用于顯示兩位小數(shù),在表格屬性框的列格式分欄中由兩個金額列引用此列格式;第 15 頁9、瀏覽費用明細(xì)表(先設(shè)置參數(shù));第 16 頁2.2匯總報表【概述】 匯總數(shù)據(jù)通常與明細(xì)數(shù)據(jù)相對,是指在明細(xì)數(shù)據(jù)基礎(chǔ)上指定若干個有分類意義的字符型列進行分組,并

22、對另外若干個有統(tǒng)計意義的數(shù)值型列進行求和(或求平均、最值、計數(shù)等)獲得 的數(shù)據(jù)。展現(xiàn)匯總數(shù)據(jù)的報表稱為匯總報表?!緫?yīng)用場景】 我們再細(xì)分為兩種應(yīng)用:1 靜態(tài)匯總設(shè)置:查詢數(shù)據(jù)的 SQL 中指定了分組列和匯總列,此設(shè)置在報表瀏覽狀態(tài)不再改變。要求提 供待定條件設(shè)置、欄位設(shè)置、排序、過濾、定位、小計合計及輸出等功能。2 動態(tài)匯總設(shè)置: 事先對數(shù)據(jù)設(shè)定某種缺省的匯總設(shè)置,此設(shè)置在瀏覽態(tài)可做更改,并重新計算匯總數(shù)據(jù)。 同時具備上述功能需求?!具m用性和不適用性】 適用于:¾匯總數(shù)據(jù)的取數(shù)規(guī)則可用 SQL 描述;不適用于:¾通過行列條件統(tǒng)計單元取值的匯總表。此類報表應(yīng)遵循模式 4.1

23、解決;¾通過程序算法構(gòu)造匯總數(shù)據(jù)的報表。此類報表應(yīng)遵循算法類報表模式解決;【解決方案】取數(shù)由向?qū)?SQL 設(shè)計描述,查詢條件由參數(shù)控制機制解決,欄目在格式設(shè)計態(tài)設(shè)定,動 態(tài)匯總由旋轉(zhuǎn)交叉機制解決,排序、過濾、定位、小計、輸出等功能均內(nèi)置于報表瀏覽態(tài)?!鹃_發(fā)步驟】1、靜態(tài)匯總設(shè)置第一步:在查詢引擎管理中建立查詢對象 Q2,做向?qū)?SQL 設(shè)計,定義帶有聚合函數(shù)的 SQL 語句。單個 SQL 無法描述的查詢利用復(fù)合查詢描述。在 Q2 的查詢模型中創(chuàng)建參數(shù)和 引用參數(shù),用來描述待定的信息;第二步:創(chuàng)建格式對象 F2,引用查詢對象 Q2 并嵌入表格,做相關(guān)的欄位、列格式和列表頭 設(shè)計。表

24、頭表尾可放置綁定參數(shù)的控件;第三步:瀏覽 F2(或掛功能節(jié)點),設(shè)置參數(shù),檢查數(shù)據(jù)與格式是否正確;2、動態(tài)匯總設(shè)置 第一步:同上述第一步(但也可以不設(shè)置聚合函數(shù),而是在旋轉(zhuǎn)交叉設(shè)置中把缺省的分組列 放到行列表中,把缺省的匯總列放到值列表中);第二步:同上述第二步,因交叉表的列結(jié)構(gòu)不能在設(shè)計態(tài)確定,因此只能指定非匯總列的列 格式等信息;第 17 頁第三步:同上述第三步,需要改變匯總設(shè)置的時候,利用表頭右鍵菜單的交叉功能把新的匯總列移到交叉行列表,確定即可;(關(guān)于交叉的詳細(xì)說明參見下一節(jié))【FAQ】1、 行 SQL 向?qū)гO(shè)計時如何指定 group by 字段? 答:無需指定,系統(tǒng)自動把不含聚合函數(shù)

25、的查詢字段作為 group by 字段。2、 行 SQL 手工設(shè)計時為何 order by 字段無效? 答:需要顯式指定排序字段的排序方式(升序asc,降序desc)?!痉独?單位費用匯總表各單位在指定期間范圍內(nèi)的費用匯總情況。報表中要求包括公司、期間、科目、匯總發(fā)生額等信息,用戶可以根據(jù)年度和期間范圍進行查詢。公司期間科目借發(fā)生額貸發(fā)生額1、 創(chuàng)建查詢對象,編碼為 glsum,名稱為費用匯總;2、進行參數(shù)定義,增加三個字符型參數(shù):年,起始期間,終止期間;3、進行 SQL 向?qū)гO(shè)計:從數(shù)據(jù)字典添加憑證表、憑證分錄、科目表和公司目錄,指定表間 連接關(guān)系、查詢字段、篩選條件和排序字段(除查詢字段

26、外均與模式 2.1 的范例相同);第 18 頁4、在篩選條件頁簽增加待定條件,在右操作數(shù)框中按 F12 引用參數(shù);5、創(chuàng)建格式對象,編碼為 glsum,名稱為“費用匯總表”。引用查詢“費用匯總”;6、進行格式設(shè)計:添加表格和面板控件,表格??坑谥胁?,綁定數(shù)據(jù)集費用匯總,面板停 靠于北部(作為表頭容器),采用流式布局,在面板上放三個文本框控件,分別綁定費用匯 總的三個參數(shù);第 19 頁7、瀏覽費用匯總表(先設(shè)置參數(shù));第 20 頁8、當(dāng)前匯總設(shè)置是對公司、期間、科目分組統(tǒng)計發(fā)生額,如果需要動態(tài)改變匯總依據(jù),則可以使用表頭右鍵菜單中的交叉功能。比如我們需要按照公司、期間重新匯總,則把公司和 期間移

27、至交叉行列表,發(fā)生額移至交叉值列表,確定即可;第 21 頁9、如果我們把科目移至交叉行,期間移至交叉列,發(fā)生額移至交叉值,那么就實現(xiàn)了帶有數(shù)據(jù)旋轉(zhuǎn)的動態(tài)匯總,即展現(xiàn)各科目在不同期間下匯總出來的發(fā)生額。關(guān)于旋轉(zhuǎn)交叉的詳細(xì) 應(yīng)用可參看模式 3.3;第 22 頁2.3列結(jié)構(gòu)依賴于查詢條件的報表(動態(tài) SQL)【概述】我們前邊提到過,SQL 查詢的結(jié)果具有固定的列結(jié)構(gòu)和動態(tài)的行結(jié)構(gòu),前兩個模式中雖然 都引入了參數(shù)來控制動態(tài)信息,但也只用于待定的篩選條件,即影響報表的行結(jié)構(gòu)。然而有 一類報表因查詢條件的不同而同時具有動態(tài)的列結(jié)構(gòu)和行結(jié)構(gòu),比如在供應(yīng)鏈的一些單據(jù)查 詢報表中,如果用戶在查詢條件中勾選了聯(lián)查

28、訂單或到貨單,那么報表會在靜態(tài)的列結(jié)構(gòu)(可 能有 10 列)后面追加一些動態(tài)的列或列分組,用于顯示聯(lián)查單據(jù)的明細(xì)信息(此時報表可 能就變成了 20 列)?!緫?yīng)用場景】開發(fā)人員需要把靜態(tài)的查詢 SQL 同用戶對查詢條件設(shè)置的取值結(jié)合起來,構(gòu)造出幾種不同的 SQL,分別對應(yīng)于用戶希望看到的各種報表展現(xiàn)結(jié)果。這些 SQL 不僅僅存在篩選條件的 差異,也可能存在查詢字段、查詢表、分組字段、排序字段的差異。由于本模式采用的技術(shù) 方案需要通過代碼片段來描述查詢 SQL 究竟被如何矯正,因此本模式僅建議熟悉 JAVA 編 程的報表開發(fā)人員使用?!具m用性和不適用性】 適用于:第 23 頁¾查詢結(jié)果可

29、由規(guī)范的靜態(tài) SQL 和動態(tài)參數(shù)取值聯(lián)合決定; 不適用于:¾查詢必須通過難以解析的復(fù)雜手工 SQL 才能描述;¾要求對動態(tài)增加出來的列結(jié)構(gòu)進行列格式設(shè)計的報表(因為這些列在設(shè)計態(tài)是未知的);【解決方案】取數(shù)由向?qū)?SQL 設(shè)計描述,查詢條件由參數(shù)控制機制解決,如何根據(jù)參數(shù)取值調(diào)整靜態(tài)SQL 則由 SQL 整理中的代碼片段來描述。SQL 整理中的常用數(shù)據(jù)結(jié)構(gòu)和接口方法如下所述:1、 查詢基本定義類 QueryBaseDef,所提供方法包括: FromTableVO getFromTables(); /獲得查詢字段定義 SelectFldVO getSelectFlds();

30、 /獲得查詢字段定義 JoinCondVO getJoinConds(); /獲得連接條件定義 WhereCondVO getWhereConds(); /獲得篩選條件定義 GroupbyFldVO getGroupbyFlds(); /獲得分組字段定義 OrderbyFldVO getOrderbyFlds(); /獲得排序字段定義 以及相應(yīng) setter(設(shè)置)方法。2、 查詢表定義類 FromTableVO,所提供方法包括:String getTablecode(); /獲得表物理名 String getTabledisname(); /獲得表顯示名 String getTableali

31、as(); /獲得表別名void setTablecode(String); /設(shè)置表物理名void setTabledisname(String); /設(shè)置表顯示名void setTablealias(String); /設(shè)置表別名3、 查詢字段定義類 SelectFldVO,所提供方法包括:String getExpression(); /獲得字段表達(dá)式 String getFldname(); /獲得字段顯示名 String getFldalias(); /獲得字段別名void setExpression (String); /設(shè)置字段表達(dá)式 void setFldname (Strin

32、g); /設(shè)置字段顯示名 void setFldalias (String); /設(shè)置字段別名4、 連接條件定義類 JoinCondVO,所提供方法包括:String getExpression0(); /獲得篩選條件表達(dá)式void setExpression0(String); /設(shè)置篩選條件表達(dá)式5、 篩選條件定義類 WhereCondVO,所提供方法包括:String getExpression0(); /獲得篩選條件表達(dá)式void setExpression0(String); /設(shè)置篩選條件表達(dá)式6、 分組字段定義類 GroupbyFldVO,所提供方法包括:String getEx

33、pression(); /獲得分組字段void setExpression(String); /設(shè)置分組字段7、 排序字段定義類 OrderbyFldVO,所提供方法包括:String getExpression(); /獲得排序字段UFBoolean getAsc(); /獲得升序標(biāo)志void setExpression(String); /設(shè)置排序字段第 24 頁void setAsc(UFBoolean); /設(shè)置升序標(biāo)志8、 SQL 整理中獲得靜態(tài)查詢基本定義的方法為QueryBaseDef getQueryBaseDef();整理代碼的核心目標(biāo)就是根據(jù)參數(shù)取值來調(diào)整這個 QueryB

34、aseDef 的內(nèi)部結(jié)構(gòu)?!鹃_發(fā)步驟】第一步:在查詢引擎管理中建立查詢對象 Q3,做向?qū)?SQL 設(shè)計,描述靜態(tài)的 SQL 語句。在 Q3 的查詢模型中創(chuàng)建參數(shù)和引用參數(shù),用來描述待定的信息;第二步:在查詢模型中編寫 SQL 整理代碼,這段代碼采用純 JAVA 語法,目的是根據(jù)用戶 的參數(shù)設(shè)置取值調(diào)整靜態(tài)的查詢基本定義 QueryBaseDef,并把調(diào)整后的 QueryBaseDef 所生 成的 SQL 發(fā)到數(shù)據(jù)庫去執(zhí)行。整理界面的向?qū)鋬?nèi)置了常用的整理代碼向?qū)?,可以輔助開 發(fā)人員快速完成編碼;第三步:創(chuàng)建格式對象 F3,引用查詢對象 Q3 并嵌入表格,做相關(guān)的欄位、列格式和列表頭 設(shè)計。表

35、頭表尾可放置綁定參數(shù)的控件;第四步:瀏覽 F3(或掛功能節(jié)點),設(shè)置參數(shù),檢查不同參數(shù)設(shè)置下數(shù)據(jù)與格式是否正確;【FAQ】1、 進行 SQL 整理對查詢對象有什么要求?答:該對象必須具有 SQL 設(shè)計,且強烈建議使用向?qū)?SQL 設(shè)計。2、SQL 整理在何時何地進行?答:SQL 整理在服務(wù)器端進行,整理行為發(fā)生在數(shù)據(jù)庫查詢之前,多用于根據(jù)參數(shù)矯正 SQL?!痉独?單位費用匯總或明細(xì)表各單位在指定期間范圍內(nèi)的費用情況,查詢匯總結(jié)果還是明細(xì)結(jié)果由參數(shù)控制。如果用戶選擇匯總,則報表中要求包括公司、期間、科目、匯總發(fā)生額等信息;如果用戶選擇明細(xì),則報表中要求包括公司、期間、科目、明細(xì)發(fā)生額和分錄摘

36、要等信 息。用戶可以根據(jù)年度和期間范圍進行查詢。1、 創(chuàng)建查詢對象,編碼為 glsumordetail,名稱為費用匯總或明細(xì);2、進行參數(shù)定義,增加三個字符型參數(shù)(年,起始期間,終止期間)和一個枚舉型參數(shù)(顯 示類型,可選值為“匯總”和“明細(xì)”);第 25 頁3、進行 SQL 向?qū)гO(shè)計,內(nèi)容與模式 2.2 的范例完全相同(我們在下面列出查詢字段的界面,主要是方便讀者把字段表達(dá)式與 SQL 整理中的代碼處理結(jié)合起來理解,因為整理代碼有很 強的針對性);4、在篩選條件頁簽增加待定條件,內(nèi)容與模式 2.2 的范例完全相同;5、進行 SQL 整理設(shè)計這段整理代碼的思路是:首先獲得用戶設(shè)置的顯示類型是“

37、匯總” 還是“明細(xì)”,如果是后者,則繼續(xù)獲得靜態(tài)查詢定義的查詢字段數(shù)組(SelectFldVO),找 出其中帶有匯總函數(shù)的字段表達(dá)式,將匯總函數(shù)以及分組字段去掉,然后再增加一個新的查 詢字段,對應(yīng)憑證分錄表的摘要信息。第 26 頁這段代碼中一部分為左側(cè)的代碼向?qū)渖桑溆嗖糠謩t為直接手工編寫。比如第一行代碼就是由通用向?qū)е械摹矮@得參數(shù)值”生成:而陰影部分(增加分錄字段的代碼片段)則由 SQL 整理向?qū)е械摹白芳硬樵冏侄巍鄙桑旱?27 頁6、創(chuàng)建格式對象,編碼為 glsumordetail,名稱為“費用匯總或明細(xì)表”。引用查詢“費用匯總或明細(xì)”;7、進行格式設(shè)計:添加表格和面板控件,表格???/p>

38、于中部,綁定數(shù)據(jù)集費用明細(xì)或匯總, 面板??坑诒辈浚捎昧魇讲季?,在面板上放三個文本框控件,分別綁定三個字符型參數(shù), 再放置一個下拉框控件,綁定枚舉型參數(shù)(顯示類型);8、瀏覽報表(先設(shè)置參數(shù)“顯示方式”的取值為“匯總”);第 28 頁9、再設(shè)置參數(shù)“顯示方式”的取值為“明細(xì)”然后瀏覽報表,或者直接在瀏覽態(tài)切換表頭的下拉框控件為“明細(xì)”選項;第 29 頁3.交叉類報表數(shù)據(jù)庫當(dāng)中的表往往是象下面這樣存儲的:姓名月份銷售業(yè)績張三1 月2000張三3 月5000李四2 月3000李四3 月4000第 30 頁但用戶要求的報表往往是象下面這樣的:姓名1 月2 月3 月張三20005000李四30004

39、000類似這樣,把原始數(shù)據(jù)中一列(或幾列,通常有分組意義)數(shù)據(jù)的不同取值維持在表的左側(cè)不動(比如上表中的姓名),把另外一列(或幾列,通常有分類意義)數(shù)據(jù)的不同取值旋轉(zhuǎn) 到行的方向成為列標(biāo)題(比如上表中的月份),再把另外一列(或幾列,通常有統(tǒng)計意義) 數(shù)據(jù)對應(yīng)匯總到旋轉(zhuǎn)出來的列標(biāo)題下面(比如上表中的業(yè)績),就形成了交叉表。在上述過程中,我們根據(jù)交叉規(guī)則把原始數(shù)據(jù)中的列分成了三種,第一種稱為交叉行(其數(shù) 據(jù)交叉后出現(xiàn)在行上),第二種稱為交叉列(其數(shù)據(jù)交叉后出現(xiàn)在列頭上),第三種稱為交叉 值(交叉前行、列、值的數(shù)據(jù)出現(xiàn)在一行上,交叉后值的數(shù)據(jù)出現(xiàn)在行、列的交叉點上)。交叉報表比普通報表提出了很多新的問題,比如:數(shù)據(jù)交叉如何實現(xiàn),交叉后列數(shù)目的不確 定性如何處理,列的順序如何控制等等。根據(jù)實現(xiàn)方法的不同,以及能否預(yù)先確定交叉后的 列結(jié)構(gòu),本章節(jié)提供了以下三種交叉報表模式的解決方案。3.1列向拼接查詢型報表(復(fù)合查詢)【概述】 報表在列向可以被劃分成幾個分組,每組由若干個列構(gòu)成,每個列分組的數(shù)據(jù)能夠通過 SQL查詢獲得,而不同列分組的數(shù)據(jù)出現(xiàn)在同一行的前提是它們對應(yīng)于同一個行 ID。即報表數(shù) 據(jù)可以通過多個查詢結(jié)果集相互連接的方式獲得?!緫?yīng)用場景】 開發(fā)人員需要從某個具有分類意義的列中提取若干不同的取值,將它們旋轉(zhuǎn)成為列標(biāo)題,再對另外一些有統(tǒng)計意義的數(shù)值列進行匯總。用戶表樣明確規(guī)定了

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論