製作報表時,常常會遇到需要實現地圖和統計圖聯動的效果的需求。
例如:
1.使用root使用者登入時,地圖顯示為浙江省的省份名稱和地圖;使用zhangsan使用者登入時,顯示為北京的省份名稱和地圖。
2.預設顯示浙江省寧波市的統計圖來源資料和統計圖,當地圖中點選“紹興”市區域時,統計圖來源資料和統計圖顯示為顯示為紹興的資料和統計圖。
這樣的報表效果不僅能夠智慧的對使用者許可權進行判斷,而且大大增強了報表的可讀性。下面詳細介紹上圖示例的實現方法和步驟,其中zhangsan屬於北京省份的使用者,報表的基本內容製作不做詳細說明,主要介紹實現地圖過濾並與統計圖聯動效果的設定方法。
工具/原料
GEEZN5.0
為報表引入js
報表需要使用的函式可以定義為js,並引入到報表中。報表中引入js的方式有“直接在報表中定義js”和“展現介面引入js檔案”兩種方式。
1. 直接在報表中定義js
選中一個不使用的單元格,開啟【插入】-【富文字與Html】視窗,在富文字與Html視窗中選擇文字型別為HTML,並在內容編輯區定義需要使用的函式。
2. 展現介面引入js檔案
進入當前資源單獨的展現設計介面,設定所定義的js檔案所在的相對路徑即可。
根據當前使用者顯示對應省份名稱和地圖
將繪製好的北京(cn-bj.svg)和浙江省(cn-zj.svg)的地圖檔案放到[WebRoot]\mis2\Charts\svg\路徑下。
在變數管理中設定全域性變數map的表示式及屬性,用於根據當前使用者所在的省份,傳遞省份地圖的svg檔名稱給引用該變數的報表。
定義報表所使用的資料集sql,where條件使用動態巨集進行過濾。
動態巨集的表示式:if(@sys_Orgs_ForDAUC=='zhejiang',"省份程式碼='cn-bj'",if(str(var(sys, sys_Orgs_ForDAUC))!="zhejiang","省份程式碼='cn-zj'","1=2"))。該表示式用於實現當前使用者所在的機構為“beijing”時,過濾出mapdata資料表中“省份程式碼”為“cn-bj”的資料;當前使用者所在的機構不是“beijing”時,過濾出mapdata資料表中“省份程式碼”為“cn-zj”的資料。
為顯示報表中的省份名稱的單元格表示式=”信訪量情況表”加上取省份名稱的表示式,修改後的單元格表示式為:=mapdata.省份名稱+”信訪量情況表”。
開啟【報表屬性】-【引數定義】視窗,增加名稱為svgName的引數,引數型別設定為動態引數,表示式設定為encode(var(global,map)),用於呼叫全域性變數map。
實現展現報表時地圖根據所傳遞的svgName引數值來展現對應的名稱的svg地圖名稱檔案。
再增加名稱為city的引數,引數資料型別為字串組,引數型別為普通引數,預設值為“bj-cyq,zj-ningbo”,用於為不同地圖傳遞不同的預設引數值。
資料集預覽效果。
點選地圖某城市報表和統計圖顯示該城市對應的資料
修改地圖,在選取數視窗設定是否包含超連結屬性值為“=1”表示式,始終啟用超連結。設定區域超連結為“手動輸入URL”的方式,表示式為:
javascript:refreshFCByLocation(@areaId),實現當鑽取地圖區域時將當前區域的areaId引數值傳遞出去。
為統計圖的來源資料新增過濾條件“轄區程式碼 in list(@city)”,其中引數city的值是由中地圖傳遞過來的。
為統計圖資料來源單元格、統計圖所在單元格設定重新整理特效,重新整理特效可在【插入】-【互動增強】-【其他】-【重新整理】中設定。
實現當點選地圖中某城市區域時,自動重新整理統計圖資料來源單元格、統計圖所在單元格。
在【報表屬性】-【填報設定】中設定報表為可填報。只有填報表可以使用【特殊效果】功能,因此這是使用特殊效果必須設定的一步。
注意事項
svgName是要傳遞加密後的引數值,因此呼叫全域性變數後需要使用encode加密
svgName引數是特定的傳遞地圖所使用的svg檔名稱的引數,不能隨意修改名稱,否則不能識別