Oracle報(bào)表創(chuàng)建、修改及其功能介紹
Oracle報(bào)表具有一些很強(qiáng)的特性,可以容易地瀏覽數(shù)據(jù),但是需要對(duì)表單做一些額外的工作。尤其是,報(bào)表擅長于顯示小計(jì)——甚至是在多層次上。即使組織機(jī)構(gòu)選擇在線瀏覽數(shù)據(jù),但報(bào)表仍是創(chuàng)建數(shù)據(jù)的細(xì)節(jié)及合計(jì)數(shù)據(jù)的有用工具。
一、創(chuàng)建和修改Oracle報(bào)表
1.報(bào)表開發(fā)器介紹
報(bào)表的原來目的是創(chuàng)建數(shù)據(jù)的打印清單,給決策人提供信息?,F(xiàn)在,決策人更喜歡在一個(gè)網(wǎng)站上直接處理數(shù)據(jù),而完全不用打印紙。在許多情況下,你可以使用表單為決策人檢索數(shù)據(jù)提供一個(gè)互動(dòng)環(huán)境。Oracle Developer Suite包括了一個(gè)報(bào)表開發(fā)器工具,并帶有幫助你建立基本報(bào)表的向?qū)А?/P>
2.Oracle報(bào)表的類型
在試圖建立報(bào)表前,需要了解報(bào)表使用的主要布局。主要的報(bào)表類型有表格式報(bào)表(tabular report)或簡單列表、控制中斷或分組報(bào)表(group report)、矩陣式報(bào)表(matrix report)或交叉表、郵件標(biāo)簽(mailing label)。圖10-1示出一個(gè)表格式報(bào)表的例子。表格式報(bào)表是數(shù)據(jù)的簡單列表,如果表中包含數(shù)值數(shù)據(jù),則底部通常有小計(jì)。這種報(bào)表易于創(chuàng)建和閱讀。但是,對(duì)于體面一點(diǎn)的在線訪問,這種報(bào)表不特別有用。幾年前,經(jīng)理們需要打印出巨長的數(shù)據(jù)清單放在手邊做參考。現(xiàn)在簡單到只要發(fā)布一個(gè)查詢,就可獲得所需的數(shù)據(jù)或合計(jì)的簡短列表。但是,你仍需要能制作這些報(bào)表。僅記住,它們應(yīng)該一直被排列好。
3.建立和修改Oracle報(bào)表
Oracle提供了一個(gè)報(bào)表向?qū)?,可幫助你?chuàng)建大多數(shù)常見的報(bào)表??偟膩碚f,它做了一件好事;但是你仍不得不修改報(bào)表并多次整理它,直到它們更專業(yè)化為止。首先面對(duì)的挑戰(zhàn)之一是避免在一行上放置一切內(nèi)容。如果你試圖將太多的內(nèi)容填入一個(gè)頁面,則報(bào)表向?qū)?huì)有麻煩。首先試著縮小字體,將更多的數(shù)據(jù)壓縮進(jìn)報(bào)表中。但報(bào)表幾乎不工作,你必須返回來手工修改它。最好打住,讓向?qū)扔帽M可能少的項(xiàng)建立報(bào)表。如果你后來想要增加更多的項(xiàng),可以一個(gè)一個(gè)地加入,同時(shí)檢查添加是否恰當(dāng)。
二、增強(qiáng)Oracle報(bào)表的功能
前面,我們已經(jīng)對(duì)向?qū)?chuàng)建的基本報(bào)表做過一些變動(dòng)。但是,有些報(bào)表需要做的工作比這要多的多。尤其是矩陣式報(bào)表,它難以建立模板,因此通常需要更多的功能增強(qiáng)。主要問題是標(biāo)準(zhǔn)模板是為帶有縱向(portrait)布局的報(bào)表設(shè)計(jì)的,并且只顯示有限數(shù)量的列。而矩陣式報(bào)表有多個(gè)列并可延伸到多個(gè)頁面。為了說明此過程,你將使用向?qū)?chuàng)建一個(gè)矩陣式報(bào)表,按月份和按代理對(duì)銷售額求和。
為了使查詢更簡單,報(bào)表將計(jì)算要價(jià)的合計(jì)——它不是最終的銷售價(jià)。如果你想要的是最終銷售價(jià),可以編寫一個(gè)查詢從CustAgentList表中提取最后的BidPrice,并通過聯(lián)結(jié)ListID,將該查詢添加到報(bào)表中。但是,本章主要關(guān)心的是報(bào)表編寫器,而上述查詢則稍有些復(fù)雜,且令人分心。因此,使用AskingPrice來簡化此問題,以便你只啟動(dòng)向?qū)В?/P>
(1) 啟動(dòng)Report Builder并使用向?qū)?chuàng)建題為Sales by Month and Agent的矩陣式報(bào)表。只選擇簡單的Matrix報(bào)表。你不需要給該報(bào)表添加分組。矩陣組為每個(gè)組創(chuàng)建不同的矩陣;該Oracle報(bào)表只需要一個(gè)矩陣。
(2) 從Agents、Listings和SaleStatus表中創(chuàng)建一個(gè)查詢。設(shè)置條件為已售房產(chǎn)的清單(即,SaleStatus.SaleStatus = 'Sold')。按代理的姓和名排序。小心選擇并提?。篖astName、FirstName和AskingPrice。
現(xiàn)在進(jìn)入棘手部分。經(jīng)理想要該報(bào)表按月份顯示合計(jì),月份顯示在報(bào)表頂部代理顯示在左下角。Listing表包括兩個(gè)日期。為了簡單起見,可以使用EndListDate。(如果你花時(shí)間建立查詢來獲得實(shí)際的銷售價(jià),還會(huì)獲得實(shí)際的銷售日期,不過在這里并不是關(guān)鍵)。問題是該日期是一個(gè)實(shí)際的日子,而你需要的只是月份。答案是創(chuàng)建一個(gè)新列,使用TO_CHAR(date, 'MM')函數(shù)將該日期轉(zhuǎn)換為相應(yīng)的月份。
(3) 建立該查詢時(shí)有一個(gè)Define Column按鈕,你可以使用它添加一個(gè)新列。但是它不能實(shí)際保存該列的描述,因此,簡單直接地編輯SQL并用SaleMonth別名添加該列通常更容易。
(4) 為了定義矩陣,你必須告訴向?qū)г谛?、列和矩陣單元中顯示的字段。首先,選擇行的字段。如本例的圖10-13所示,選取LastName和FirstName字段。因?yàn)樵搱?bào)表不使用組,所以這兩個(gè)字段都屬于Level 1。
(5) 同樣,選擇新的SaleMonth字段作為列。在下一個(gè)向?qū)辽?,選擇AskingPrice列并單擊Sum按鈕,告訴Reports Builder計(jì)算每個(gè)銷售代理每月的要價(jià)總和。類似地,在合計(jì)屏上,選取SumAskingPrice并計(jì)算其Sum獲得行和列的合計(jì)。
(6) 在標(biāo)簽屏中,通過增加空間并設(shè)置為大寫字母,整理標(biāo)簽。但是,你需要使列變窄,以便設(shè)置Month標(biāo)簽,而不是Sale Month。默認(rèn)的寬度眼下應(yīng)該比較窄。在模板屏上,必須選擇No template選項(xiàng)。
出矩陣式報(bào)表的初始Paper Design視圖。盡管它包含了所有希望的數(shù)據(jù),但稍微簡單了些并有點(diǎn)難以閱讀。注意,該報(bào)表很稀疏,因?yàn)樵谠摃r(shí)間周期內(nèi)只有8次銷售活動(dòng)。如果你想看到有更多數(shù)據(jù)的Oracle報(bào)表,可以改變查詢條件,將Sold改為For Sale,但眼下我們還是使用這個(gè)小報(bào)表。
為了使報(bào)表看上去類似于分組報(bào)表,應(yīng)該在左上角添加徽標(biāo)。像以前那樣,使用Insert|Image菜單選項(xiàng)并調(diào)整徽標(biāo)的尺寸。
【編輯推薦】