企業中不同角色的人在看數據時,關心的詳盡程度往往各有不同,管理者更關注粗粒度、如每個月的表現,一線運營人員則會希望看到每一天的表現。那么分析師應該如何只用一張報表來同時滿足不同用戶的需求呢?
下面的做法將幫助您解決動態維度轉換,通過腳本函數的編寫,實現餅圖上下鉆取、圖表動態綁定維度列、多維能力指數分析等功能場景,隨心所欲替換展示不同需求。
01 餅圖下鉆
內容描述:
通過超鏈接進行頁面刷新并傳參,在全局腳本中的變化時運行進行判斷是下鉆效果還是上鉆效果,并改變餅圖綁定參數列。
圖片展示:
效果描述:
通過點擊總銷量中的某省份部分餅圖,跳轉到省份下各市所對應的數據餅圖,再次點擊餅圖跳轉回總銷量圖。
腳本部分:
if (param["省份"]==x) //設置判斷所在層參數 {param["省份"]=null} if (isNull(param["省份"])) //判斷實現效果是上鉆或下鉆 {var x=param["省份"] //上鉆設置 var bcol = new BCol("省份", STRING, true); //初始化維度列 var qcol = new ChartDimCol(bcol); 圖表1.binding.markCol["Sum_銷量"].colorField = qcol; //設置標記組中顏色綁定的列 圖表1.binding.markCol["Sum_銷量"].textField = qcol; //設置標記組中標簽綁定的列 圖表1.xtitle.title='總銷量'} //設置組件標題 else {var x=param["省份"] //下鉆設置 var bcol = new BCol("地市", STRING, true); var qcol = new ChartDimCol(bcol); 圖表1.binding.markCol["Sum_銷量"].colorField = qcol; 圖表1.binding.markCol["Sum_銷量"].textField = qcol; 圖表1.xtitle.title=param["省份"]+'銷量'} |
02 圖標動態綁定
內容描述:
該報告通過列表參數對柱狀圖的維度與度量的動態綁定分別作了示例。
圖片展示:
效果描述:
通過右側的列表參數動態綁定不同的維度與度量,實現不同指標的多維展示。
腳本部分:
//變化時運行 //維度動態綁定 var arr = 列表參數1.getSelectedObjects(); //獲取列表參數的所選項存入數組arr中 function test(chart){ chart.binding.clearXCols(); //清空綁定維度 for(var i = 0; i < arr.length; i++){ //通過循環將所選項維度依次進行綁定 var bcol = new BCol(arr[i],STRING,true); //創建一個底層字段 var dimCol = new ChartDimCol(bcol); //創建圖表所用的維度字段 chart.binding.addXCol(i,dimCol); //綁定維度字段 } } test(圖表1); ? //度量動態綁定 var arr2 = 列表參數2.getSelectedObjects(); //獲取列表參數的所選項存入數組arr2中 function test2(chart2){ chart2.binding.clearYCols(); //清空綁定度量 for(var j= 0; j < arr2.length; j++){ //通過循環將所選項度量依次進行綁定 var bcol2 = new BCol(arr2[j],DOUBLE,false); //創建一個底層字段 var measureCol2 = new ChartMeasureCol(SUM,bcol2); //創建圖表所用的度量字段 chart2.binding.addYCol(j,measureCol2); //綁定度量字段 } } test2(圖表2); |
? |
03 多維能力指數分析
內容描述:
該報告主要由三部分組成,企業對比選擇、指標展示選擇、能力圖展示。通過列表參數組件通過選擇不同的選項動態綁定雷達圖的維度與度量,實現不同能力不同公司的對比。
圖片展示:
效果描述:
通過左側的企業對比選擇動態綁定不同的維度,實現不同企業或公司的對比,通過右側的指標展示選擇動態綁定不同的度量,實現不同指標的多維展示。
腳本部分:
裝載時運行: |
//創建設置變量 var arr1 = new Array(); var brr1 = new Array(); var list_total_len = 0; var index_1_len = index_1.getSelectedObjects().length; var index_2_len = index_2.getSelectedObjects().length; var index_3_len = index_3.getSelectedObjects().length; ? //將指標選項寫入數組arr1,并將選擇個數計入list_total_len if(index_1_len > 0){
for(i=0;i arr1[i]=index_1.getSelectedObjects()[i] }; list_total_len = index_1_len }; if(index_2_len > 0){
for(i=0;i arr1[i+list_total_len] = index_2.getSelectedObjects()[i]; } list_total_len = list_total_len + index_2_len; }; if(index_3_len > 0){
for(i=0;i arr1[i+list_total_len] = index_3.getSelectedObjects()[i]; } list_total_len = list_total_len + index_3_len; }; ? //創建度量列,綁定度量列 if(list_total_len > 0){ 圖表1.binding.clearYCols(); //清空綁定度量 for(k=0;k < list_total_len;k++){ var acol = new BCol(arr1[k],DOUBLE, false); //初始化創建綁定列 var bcol = new ChartMeasureCol(NONE,acol,null); //創建圖表所用的度量字段 brr1[k] = bcol; //將創建好的度量字段綁定到brr1數組中 } ? var ld_col = new RadarMarkCol(brr1); //創建雷達字段 //給圖表的行軸增加字段,用戶需要指定增加字段的位置以及字段名 圖表1.binding.addYCol(1,ld_col); var ccol=new BCol("公司",STRING,true); var dcol=new ChartDimCol(ccol); //給圖表的分組增加字段,用戶需要指定增加字段的位置以及字段名 圖表1.binding.addGrpCol(1,dcol) 圖表1.binding.markCol[toString(arr1[0])].colorField=dcol; //綁定指標字段 }; ? //保存變量 param['company_list_len']=company_total_len; param['index_list_len']=list_total_len; |
變化時運行: |
//除了標紅字段不同,其他部分與裝載時運行一致 var arr1 = new Array(); var brr1 = new Array(); var list_total_len = 0; var index_1_len = index_1.getSelectedObjects().length; var index_2_len = index_2.getSelectedObjects().length; var index_3_len = index_3.getSelectedObjects().length; ? if(index_1_len > 0){
for(i=0;i arr1[i]=index_1.getSelectedObjects()[i] }; list_total_len = index_1_len }; if(index_2_len > 0){
for(i=0;i arr1[i+list_total_len] = index_2.getSelectedObjects()[i]; } list_total_len = list_total_len + index_2_len; }; if(index_3_len > 0){
for(i=0;i arr1[i+list_total_len] = index_3.getSelectedObjects()[i]; } list_total_len = list_total_len + index_3_len; }; ? if(list_total_len > 0){ 圖表1.binding.clearYCols(); for(k=0;k < list_total_len;k++){ var acol = new BCol(arr1[k],toString(arr1[k]),DOUBLE, false);?//創建綁定列 var bcol = new ChartMeasureCol(NONE,acol,null); brr1[k] = bcol; } ? var ld_col = new RadarMarkCol(brr1); 圖表1.binding.addYCol(1,ld_col); var ccol=new BCol("公司",STRING,true); var dcol=new ChartDimCol(ccol); 圖表1.binding.addGrpCol(1,dcol); 圖表1.binding.markCol[toString(arr1[0])].colorField=dcol; }; param['company_list_len']=company_total_len; param['index_list_len']=list_total_len; |
通過對以上三種使用場景的學習了解,相信各位數據分析師又豐富了自己的分析手段和能力,當遇到用戶希望在一個組件中實現多維度轉換分析的時候,大家就可以使用以上腳本來實現用戶的需求。
評論
查看更多