在資料倉儲的基本報表製作過程中,通常會使用 sql 作為資料來源,可是普通的 sql 實在不適合處理一些較為複雜的邏輯判斷;一般而言,待查詢的資料型別主要包括日期型、數字型、字串這三類資料型別;在報表查詢介面前段,實際上會對查詢的資料作一些預設處理,例如有些欄位可輸可不輸,輸入的字段需要按照輸入的內容進行查詢,而未輸入的字段通常會選擇忽略該條件的存在,如何判斷該欄位是否輸入了呢,當然是針對這些未輸入的字段提供一些預設值了,例如某個數字型別的字段未輸入,則賦乙個預設值 -1 ,某個字串欄位未輸入,則賦乙個預設值為 』 『 ,某個日期未輸入,則賦乙個預設值為 sysdate ;這個時候只要在 sql 中針對不同的預設值和應該輸入的值進行處理就 ok 了。
當然當更加複雜的查詢邏輯實在不適合用 sql 處理時,最好選擇使用儲存過程的方法了;其次過於複雜的 sql 可能會帶來資料庫 效能問題,因此這些基於 sql 的報表最好不要在大型資料表上操作。
下面是構造了乙個包含以上三種資料型別的資料表,並填充了一些測試資料。
create table testreportparameter (
varcharfield varchar2(20),
numberfield number(10,0),
datefield date
); insert into testreportparameter values('a',1,sysdate-1);
insert into testreportparameter values('b',2,sysdate);
insert into testreportparameter values('c',3,sysdate+2);
insert into testreportparameter values('d',4,sysdate-2);
commit;
處理的秘密在於對預設值和輸入值之間做乙個判斷,保持任何一種值的存在為 true 即可。
對於單值資料的處理比較簡單,參看下面指令碼
select *
from testreportparameter
where (' ' = &varcharfield or varcharfield = &varcharfield)
and (-1 = &numberfield or numberfield = &numberfield)
對於多選值的處理則一定要使用 decode 函式才能避免錯誤的發生,處理的邏輯同上。
select *
from testreportparameter
where (
' '=decode(&varcharfield,' ',' ',&varcharfield)
or varcharfield in (&varcharfield) )
and (
-1=decode(&numberfield,-1,-1,&numberfield)
or numberfield in (&numberfield) )
關於MS資料倉儲備份
1 資料倉儲架構備份 包括資料庫的架構和olap的架構 資料庫中包括維表 事實表以及其他臨時或控制類表,其結構通過 生成sql指令碼 來生成。注意 其主鍵 索引等都要生成 olap的架構在預設狀態下儲存在 c program files microsoft analysis services bin...
關於資料倉儲的想法
要能夠把企業的資料從巨集觀到微觀能夠清晰表達,並且能夠實現出來。需要首先有乙個全域性的了解,將整個crm系統進行巨集觀的歸併,得到高層資料檢視,並加以抽象,劃定幾個邏輯的資料主題範圍 然後再對目前需要做的報表所在的主題進行資料分析和主題定義 如果主題還過大還需要進行分解,定義低一級的主題 定義維 度...
資料倉儲中資料粒度
粒度問題是設計資料倉儲的乙個最重要方面。粒度是指資料倉儲的資料單位中儲存資料的細化或綜合程度的級別。細化程度越高,粒度級就越小 相反,細化程度越低,粒度級就越大。確定粒度是資料倉儲開發者需要面對的乙個重要的設計問題。如果資料倉儲的粒度確定合理,設計和實現中的其餘方面就可以非常順暢地進行 反之,如果粒...