2014年3月26日 星期三

QlikView and Google Map integration Step-by-Step

你想要有張地圖結合你資料的呈現嗎? 我們可以在QlikView 上很快速的套用囉
下列方法是一步步的執行方式參考,吔...這表示我有偷吃步啦,
想知道嗎?嘿嘿,待我下回分曉囉.
  

  1. 首先,第一步請增加一段語法在QV的語法編輯器中 
Edit Script
Ctrl+E 
請注意,你的分析資料中必需要有欄位為Latitude,      Longitude才能跟Google 連結

例如:
member:
LOAD 會員編號, 
     姓名, 
     姓別, 
     電話, 
     生日, 
     [E-mail], 
     地址, 
     GPS, 
     Latitude, 
     Longitude, 
     星座
FROM
會員檔.xlsx

(ooxml, embedded labels, table is 會員資料);

======================

//請整個複製到語法中
// Google Maps Key
// 申請一個MAP 的KEY 並填入下方 here http://code.google.com/apis/maps/signup.html  
gmap_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
max_zoom_level = 17; //maximum value 17 

// Variables required for calculating map
// No need to change these
var_pi180= '=pi()/180';
var_lat_offset= '0';
var_mc2= '=256*pow(2,$(var_zoom))';
var_mc1= '=256*pow(2,($(var_zoom)-1))';
var_mid_lat= '=min(Latitude)+(1+var_lat_offset)*((max(Latitude)-min(Latitude))/2)';
var_mid_long= '=min(Longitude)+(max(Longitude)-min(Longitude))/2';
var_zoom= '=max(aggr(if(max( round(256*pow(2,(_zoom_level -1)))+( Longitude  *((256*pow(2,_zoom_level ))/360)) )-min( round(256*pow(2,(_zoom_level -1)))+( Longitude  *((256*pow(2,_zoom_level ))/360)) ) <map_size_x AND max((256*pow(2,(_zoom_level-1)))+((0.5*log((1+(sin((Latitude)*pi()/180)))/(1-(sin((Latitude)*pi()/180)))))*((-256*pow(2,_zoom_level))/(2*pi()))))-min((256*pow(2,(_zoom_level-1)))+((0.5*log((1+(sin((Latitude)*pi()/180)))/(1-(sin((Latitude)*pi()/180)))))*((-256*pow(2,_zoom_level))/(2*pi()))))<map_size_y,_zoom_level,1),_zoom_level))';
var_maptype= '=if(isnull(only(maptype)),fieldvalue( '&chr(39)&'maptype'&chr(39)&', 1 ),maptype)';
map_size_x=  '640';
map_size_y=     '400';


SET HidePrefix='_' ;
// Field required for calcualting best zoom level
_zoom_level:
Load RecNo( ) as _zoom_level autogenerate(max_zoom_level);

maptype:
LOAD * INLINE [
    maptype
    roadmap
mobile
satellite
terrain
hybrid 
];



  
==================================
離開語法編輯器, 到Design Sheet 頁中
2.增加一個Cart 圖於畫版裡 scatter chart


選 擇Scatter chart => NEXT



=> NEXT
 選擇資料欄位

 => NEXT

 新增3個運算式 , 除了運算式3可以自行指定運算式外,運算式1,2 都建議不可以更改
  1. 運算式1 => Label : Longitude  


  • 輸入公式:  sum( round (256*pow(2,($(var_zoom)-1)))+( Longitude  *((256*pow(2,$(var_zoom)))/360)) )
  • 點開公式下增加 Background color:  公式為:=ARGB(150,255,0,0)
     2. 運算式2 =>  Label :  Latitude 
  • 輸入公式: 
=sum(  ((256*pow(2,($(var_zoom)-1)))+((0.5*log((1+(sin((Latitude)*pi()/180)))/(1-(sin((Latitude)*pi()/180)))))*((-256*pow(2,$(var_zoom)))/(2*pi())))))
  • 點開公式下增加 Background color:  公式為:ARGB(150,255,0,0)
  3. 運算式3 => Label: Sales 





  => NEXT
選擇顯示的樣式
 => NEXT

  => NEXT

X axis:
Static Min:
=(256*pow(2,($(var_zoom)-1)))+( var_mid_long  *((256*pow(2,$(var_zoom)))/360)) -round(map_size_x/2)
Static Max:
=( (256*pow(2,($(var_zoom)-1)))+( var_mid_long  *((256*pow(2,$(var_zoom)))/360)) + round(map_size_x/2))

Y axis:
Static Min:
=((256*pow(2,($(var_zoom)-1)))+((0.5*log((1+(sin(var_mid_lat*pi()/180)))/(1-(sin(var_mid_lat*pi()/180)))))*((-256*pow(2,$(var_zoom)))/(2*pi())))+round(map_size_y/2))
Static Max:
=((256*pow(2,($(var_zoom)-1)))+((0.5*log((1+(sin(var_mid_lat*pi()/180)))/(1-(sin(var_mid_lat*pi()/180)))))*((-256*pow(2,$(var_zoom)))/(2*pi())))-round(map_size_y/2))

 => NEXT選擇 Dynamic Image:


='http://maps.googleapis.com/maps/api/staticmap?center='  &  num(var_mid_lat, '##############', '.', ',' )   &  ','  &  num(var_mid_long, '##############', '.', ',' )   &  '&zoom=$(var_zoom)'  &  '&maptype='&var_maptype  &  '&size='&map_size_x&'x'&map_size_y  &  '&key='&gmap_key & '&sensor=false&.jpg'&

'&language=zh-HK'






8 則留言 :