PowerBI 默认地图最佳实践

  • 2019 年 10 月 6 日
  • 筆記

此前写过PowerBI地图解决方案,但仍然比较复杂,随着PowerBI最近的更新,我们来研究下最佳的使用实践。我们先来看下效果:

如果这个图你没有感觉,那么来看这个图:

好吧,如果这个图你还是没有感觉,那么再来看这个图:

这里呈现了热力地图,这属于非常基础的内容就不再赘述。我们现在要来看BING地图的问题以及如何解决了。

问题1:如果某个地方显示错位怎么办?例如把中国的城市显示到日本去。 问题2:如果某个地方显示得不精确怎么办?不是真正你希望看到的位置。 问题3:无法解析某个具体的位置怎么办?例如中国著名核工业小镇“低窝铺”。

问题1:显示错位

很明显显示的位置不对。

问题2:显示得不精确

很明显对于省份的显示应该显示在省会城市上,而实际是不一定如此的。

问题3:无法解析某个具体的位置

正常情况下,南通客运站是无法显示出来的,因为无法精确定位。

解决方案:经纬度

为了解决上述问题,我们需要一个经纬度表来准确定义这些位置。每一个点都有一个唯一的经纬度来对应。

经纬度表

我们在Excel中维护这个经纬度表如下:

【省级】

【市级】

这里对经纬度表进行了编码,并与维护他们的父子关系。当然,大家可以举一反三,再添加县级或乡镇级乃至自定义级均可。

注意,为了可以扩展以及用户自定义叫法的考虑,这里还留有自定义名称字段。

计算经纬度

? 技巧  PowerBI中BING地图可视化对象可以在经纬度处放置度量值。  

这里制作两个度量值来分别提取省市的经纬度坐标。同时考虑到层级关系,定义度量值如下:

Latitude =  IF (      ISINSCOPE ( '城市'[城市] ),      SELECTEDVALUE ( '城市'[纬度] ),      SELECTEDVALUE ( '省份'[纬度] )  )  

以及:

Longtidude =  IF (      ISINSCOPE ( '城市'[城市] ),      SELECTEDVALUE ( '城市'[经度] ),      SELECTEDVALUE ( '省份'[经度] )  )  

这样一来,就可以很容易的解决问题,并同时兼顾了层级问题,其中ISINSCOPE用来判断当前的层级以进行正确的计算。

问题1解决:修复显示错位

可以看出,数据点全部精确显示在我们国家的地图内部的准确位置了。

问题2解决:修复显示不精确

要想显示精确,我们必须知道某个城市在BING地图中的坐标,这里可以借助BING的API工具,如果你不知道是什么意思也不要紧。Excel120为大家提供了一个免费的简单方法。

API网址:

https://dev.virtualearth.net/REST/v1/Locations/{地点名称}?o=xml&key=AsEOe_l0spE058w1vLXNKTCFQ72el–B6WrqTAS5dvVlA4GJNYpHFmrEPqcRWgyk

请在浏览器输入上述内容,并替换{地点名称}为实际名称,例如:石家庄。结果如下:

值得注意的是上面的红色高亮信息就显示了真正的地点以及经纬度。值得一提的是这里的名字被自动转成了英文。在中国有一个很有意思的地方是:山西和陕西,你知道他们的英文名字吗?我们用这个方法来试试看。

以及:

可以看出一个叫shaanxi,一个叫shanxi,是不同的。

用这种方法,我们就可以找到一个地点的精确经纬度。

问题3解决:解析具体的位置

例如:南通客运站。

这就无法让BING解析出来,大家可以自行尝试。既然无法解析,这里我们转用百度地图来解析。分享给大家一个工具:

http://api.map.baidu.com/lbsapi/getpoint/index.html

它可以帮我们直接在地图上选取地点,如下:

我们找到南通客运站,如下:

我们得到了这个经纬度坐标,我们将它填写进入我们的地理位置表,如下:

我们返回到PowerBI的BING地图,来看:

可以发现其大致的位置是对的,但是有一定偏差,目前这个偏差无法修正。但对于精确到城市或要求精确度不是特别高的场景已经够用了。

总结

这里通过使用一个地理位置配置表以及BING地图API及辅助工具来实现获取经纬度以便实现对地图的准确控制。