|
報表條件查詢中經(jīng)常會涉及到模糊查詢和多值查詢的情況。模糊查詢可根據(jù)用戶輸入在參數(shù)框中輸入的關(guān)鍵字進行模糊匹配,sql實現(xiàn)是通過like條件完成的。多值查詢在集智數(shù)據(jù)平臺中也提供了多種編輯風格,如下拉列表,下拉數(shù)據(jù)集,下拉樹等都是支持多選的,用戶選擇的參數(shù)以字符串組,整數(shù)組等形式傳遞給報表模板,報表模板接收參數(shù)在sql中通過in條件就可以完成多值匹配。但是用戶往往還有一種需求就是兩種查詢的結(jié)合,用戶需要在如何框中輸入多個關(guān)鍵字,根據(jù)我多個關(guān)鍵字進行模糊查詢。比如用戶要根據(jù)商品名稱進行多值模糊查詢,輸入為“卡通,可愛,發(fā)飾”,那么將查詢商品名稱中還含有卡通或可愛或發(fā)飾的商品列表。
在集智數(shù)據(jù)平臺的報表系統(tǒng)中,利用宏完成sql查詢條件的拼接,根據(jù)用戶輸入的以“,”分割的多個查詢關(guān)鍵字,拼接成多個 or 相連的like條件,這樣即可實現(xiàn)上述需求。
具體實現(xiàn): 1.參數(shù)定義:  其中spmc是普通參數(shù),為用戶填入的參數(shù)值;spmc2是動態(tài)參數(shù),根據(jù)spmc拼接查詢條件,值表達式為:if(spmc == null or spmc==”",”1=1″,”name like ‘%”+rplc(@spmc,”,”,”%’ or name like ‘%”)+”%’”)。這里的動態(tài)參數(shù)和后面的宏值是一樣的,它只是用于在報表結(jié)果頁面里面顯示查詢條件的拼接結(jié)果。 2.宏定義:  動態(tài)宏macro1,值表達式為:if(spmc == null or spmc==”",”1=1″,”name like ‘%”+rplc(@spmc,”,”,”%’ or name like ‘%”)+”%’”)。在spmc為空的情況下,返回1=1,否則先用字符串替換函數(shù)rplc()替換參數(shù)中的”,”為“%’ or name like ‘%”)+”%’”(注意其中的空格),其結(jié)果再和前后字符串拼接得到最終的查詢條件。如用戶輸入“卡通,可愛,發(fā)飾”,那么rplc替換結(jié)果為“卡通%’ or name like ‘%可愛%’ or name like ‘%發(fā)飾”,再和前后字符串拼接得到最終結(jié)果name like ‘%卡通%’ or name like ‘%可愛%’ or name like ‘%發(fā)飾%’。 3.數(shù)據(jù)集定義:  這里在查詢條件中用到了動態(tài)宏macro1。 4.參數(shù)模板定義:  其中B2單元格中用到了動態(tài)參數(shù)spmc2,可以在報表模板中顯示sql查詢條件。
實現(xiàn)效果: 沒有輸入查詢條件時,默認查出所有商品數(shù)據(jù),查詢條件為1=1。  輸入查詢條件“卡通,心形”,查出商品名稱中包含卡通或心形的商品,查詢條件為name like ‘%卡通%’ or name like ‘%心形%’。 
更多了解各種復雜問題的處理,可以參考:從多個不同的業(yè)務(wù)系統(tǒng)中抽取和采集數(shù)據(jù),數(shù)據(jù)分析,數(shù)據(jù)抽取,讓業(yè)務(wù)用戶隨時可以自己定義查詢報表。
|