Power BI 移除内置地图的消息传出来之后,我身边做报表的同事第一反应是有点慌。毕竟做销售看板、经营分析这类场景,总喜欢在页面中间放一张地图,把各区域的销售额用颜色深浅标出来,老板一眼就能看出来哪里好、哪里差。过去我们习惯直接把"省份"字段拖进内置的"地图"或者"填充地图"视觉对象,看着结果自动渲染,觉得很省事。但如果你真的在国内环境里做过几十张带地图的报表,就会明白这套内置方案从来不是想象中那么美好:加载慢、地标不准、很多国内区域匹配不出来,甚至有时换来的是全球地图上几个漂移的黑点。所以这次官方把内置地图移除,我不觉得是坏消息,反而像是国内用户的一剂免费救星——终于有理由切换到形状地图(Shape Map)了,它不依赖任何海外在线地图服务,数据全在本地,免费、可控、稳定。这篇文章把来龙去脉和你真正需要的东西讲清楚,顺便附上一套可以直接照抄的迁移实操。
1. 内置地图为什么被移除,移除后到底影响了谁
1.1 内置地图那套逻辑,国内用户早就不想忍了
内置地图视觉对象的工作机制,简单说就是把你的字段先送到在线地图服务去做地理编码。你把"省份"拖进去后,Power BI 会把文本内容包装成请求,发给海外地图服务,让服务端把"某某省"识别成经纬度,然后传回地图瓦片和边界数据,最终在画布上渲染出来。这中间有两步强依赖外部服务:地理编码和瓦片加载。任何一个环节不稳定,结果就是地图空白、错位,或者数据点悬空。
国内环境访问海外地图服务,天然有延迟,而且他们维护的地名库更偏向全球主流城市,对国内的省、市、区、县覆盖并不好。实际做报表时,最常听到的就是"某区一直显示不出来"或者"我匹配的是某市,出来的位置偏了几百公里"。你还没法在报表层面调试,因为背后的逻辑根本不是你能控制的。所以内置地图看着省事,实际使用中却是在"赌"服务端的稳定性和地名库的完整度。
1.2 这次移除的是哪几个地图能力
按照官方的调整节奏,这次移除主要指向传统的地图视觉对象和填充地图视觉对象。这两个视觉对象都有一个共同点:必须调用在线地图服务完成地理编码和底图渲染。而形状地图不在这场移除范围内,原因很简单——它不使用外部地图服务,只把本地地图数据文件当作画布,自己绘制边界、填充颜色。所以如果你之前已经在用形状地图做报表,这次调整基本不会波及你;如果你还守着旧地图对象,那就需要尽快做迁移规划。
不少存量报表会遇到"视觉对象不再可用"或者加载不出来的情况,这很正常。数据模型里的"位置"字段不用改,但视觉对象本身必须替换。还有一点要注意:不要试图用旧版本 Power BI Desktop 永久规避,报表发布到服务端以后,旧视觉对象同样会面临不可用的风险。
1.3 对国内用户的真实影响:说句不好听的,影响有限
对大部分国内用户来说,内置地图本来就是"看起来很美好,用起来想摔键盘"的存在。以前是没得选,只能把海外在线地图凑合用;现在官方帮你把这个选项拿掉了,反而逼着你切换到一个能落地的方案。从这角度看,移除事件给你带来的不是麻烦,而是迁移理由。
真正要处理的是存量报表。如果你手里有几十张用旧地图视觉对象做的看板,需要逐个替换成形状地图。这活儿不复杂,但需要一点策略,比如先把高权限、高频使用的核心报表迁完,再处理历史报表。迁移过程中你会发现,原来那些常常匹配不上的地名,调整成本其实没有想象中高。
2. 形状地图为什么能成为国内用户的免费救星
2.1 形状地图到底是怎么画的
形状地图的绘制逻辑和传统地图完全不同。它会加载一份 GeoJSON 或 TopoJSON 格式的矢量地图文件,Power BI 解析文件里代表边界坐标的点和线,同时把数据表中的"位置"字段与文件里每个区域的名称做精确匹配,匹配成功后在对应多边形内填入颜色。整个过程不请求地图瓦片、不调用地理编码、不产生任何外部网络流量。
这意味着它完全可以在离线环境工作,发布到 Power BI 服务后也不会因为外部地图服务的网络波动而闪白。更重要的是,你的位置字段不会发送给任何第三方服务,这个数据链路安全感,是很多企业报表很看重的。团队里如果有比较严格的数据合规要求,形状地图是一个绕不开的方案。
2.2 为什么说它免费,且长期稳定
形状地图是 Power BI 里早就有的功能,桌面板不需要额外许可证,也不需要买地图 API 配额。你需要准备的无非是一份行政区划地图文件,这类数据可以从公开的开源地图数据仓库里获取,也可以请团队里的 GIS 同事帮你导出标准格式。文件一旦获取,就可以反复使用。
当然,你也要接受一个前提:免费的东西往往需要自己维护数据。地图文件可能会随行政区划调整而变化,但这是低频事件,更新一次就够了。相比之下,很多第三方地图视觉对象虽然看着方便,但免费版常常有数据行数限制、水印、在线授权等问题,长期依赖并不省心。
2.3 它有哪些不可回避的短处
形状地图没有卫星照片、没有街道道路、不能像在线地图那样随意拖动缩放,它本质上是一张静态的矢量底图。你只能在上面做区域填充、边框样式、颜色深浅这些视觉效果。所以它适合做区域分布对比、占比分析、KPI 地图,不适合做路径规划、实时路况、街景展示。
还有一个需要提前接受的限制:形状地图不能自动显示区域名称标签。如果你想看每个省的名字,要么靠人自己去认轮廓,要么把省份名字做成工具提示,鼠标悬停的时候显示。在做汇报的时候,这一点尤其要注意,别让老板看得一头雾水。
3. 实操:半小时搭建一张区域销售地图
3.1 准备一份可用的省级边界文件
要让形状地图真正跑起来,第一步是拿到一份合格的 GeoJSON 或 TopoJSON 文件。假设你现在需要一张省级地图,下载的公开数据一般会包含几十个 Feature,每个 Feature 对应一个省级区域,properties 里会有名称字段。
拿到文件后,先做三件事。
第一,确认根节点是 FeatureCollection。这个结构是 Power BI 正确解析的基础,如果你手头是别的结构,就需要先转换。第二,确认坐标系是 WGS84 经纬度坐标,也就是 EPSG:4326。如果文件里面坐标像"3456789, 2345678"这种大数字,大概率是投影坐标,需要先转成经纬度。第三,确认文件编码是 UTF-8,建议保存为 UTF-8 无 BOM 格式,避免中文名称乱码。
文件大小也要控制。完整的高精度省级边界有时能达到几十 MB,直接加载会很卡。建议用在线简化工具把坐标精度从 6 位小数降到 4 位,同时删掉不必要的属性字段,只保留 name 和必要的标识字段。简化后一般能压到 1~3 MB,加载速度会明显好转。
可以打开文件看一眼结构:
{ "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "name": "某省" }, "geometry": { "type": "Polygon", "coordinates": [ [ [102.5, 25.3], [104.1, 26.2] ] ] } } ] }注意这里只是示意,实际文件里每个 Feature 的 coordinates 会比这个长得多,而且一个省可能有多个相互独立的面,geometry.type 可能是 MultiPolygon。Power BI 能处理这两种情况,你不需要对文件做太多结构改造。
3.2 把文件加载进形状地图
在 Power BI Desktop 里新建一页报表,在可视化窗格中找到"形状地图"图标并点击,画布上会出现一个默认形状的区域。
接下来在右侧格式窗格里找到"地图"分类,展开后选择"自定义地图"。你可以直接点"打开"选择本地 GeoJSON 文件,也可以填入一个可访问的 URL。我的建议是使用本地文件,因为文件会被打包进报表,发布到服务以后不依赖额外的网络访问。如果用 URL,Power BI 服务还需要能访问到那个地址,一旦链接失效,地图就会静默失败。
加载完成后,画布上应该会看到省份边界轮廓。如果什么都没出现,先检查 JSON 是否能用在线工具校验通过,再看是不是编码乱码。这一步成功之后,后续的字段绑定才有意义。
3.3 绑定位置字段和颜色字段
现在把省份字段拖入视觉对象下方的"位置"框,把销售额字段拖入"颜色饱和度"框。这里有一个核心机制:位置字段的每一个值,都要和 GeoJSON 里某个 Feature 的 name 属性完全一样,差一个空格都可能匹配不上。
如果你发现地图上某些区域没有填充颜色,多半是匹配失败。解决方法是回到数据源,把位置字段的取值统一成地图文件里的标准名称。最稳妥的做法是在 Power Query 里维护一张标准区域名称对照表,用合并查询把原始字段映射成标准字段。这样以后加数据、换地图文件,都不用来回改主表。
颜色饱和度绑定后,默认可能是一个单一颜色渐变。你可以在"数据颜色"设置里选择是否按值分段,也可以自己设定最大值、最小值和中间值的颜色。一般建议用浅色到深色的单色渐变,业务可读性最强。
3.4 把地图调到最佳展示状态
地图绘制出来只是第一步,展示效果还要靠格式设置撑。格式窗格里几个值得调整的地方:
地图边框颜色和粗细,建议用白色或浅灰色,让每个区域边界清晰;地图图层的透明度可以略微降低,方便叠加底色;默认视图的中心点和缩放倍数要手动调整,否则地图可能跑到画布角落或者大小不合适;标题和图例尽量补全,避免老板还要猜颜色深浅代表的业务含义。
这里我特别提醒一点:形状地图没有自动地名标签。如果怕汇报时认不出区域,可以封装一个工具提示字段进去,比如"省份:某省,销售额:123456",鼠标悬停就能看到。这种方式比强行插标签更干净,也不容易挡住地图信息。
4. 从旧内置地图迁移到形状地图的完整流程
4.1 迁移前先给数据做一次"地名体检"
旧内置地图对地名匹配有一定的容错能力,形状地图没有。所以迁移前要优先处理字段的一致性。把数据表里的位置列去重拉一份清单,再打开地图文件里的 properties.name 列,两列放一起对比。常见差异包括:数据里是"某省",地图里是"某";数据里带全角空格;数据里是繁体,地图里是简体;还有直辖市在数据里叫"某市",但地图里只有"某"。
差异并不可怕,真正可怕的是一张表里混了好几种写法。我的建议是不要把修正逻辑写死在视觉对象里,而是在数据查询阶段做标准化。用条件列或者对照表生成一个"标准区域名"字段,后续视觉对象统一拖标准区域名。
可以做一张简单的核对表:
| 数据中现有值 | 地图文件中 name | 是否匹配 | 处理方式 |
|---|---|---|---|
| 某某省 | 某某省 | 匹配 | 直接使用 |
| 某某市 | 某某 | 不匹配 | 建议修改地图文件 name |
| 带空格值 | 无空格值 | 不匹配 | 数据清洗时去空格 |
把这类清单贴在项目文档里,以后交接给同事也方便。
4.2 替换视觉对象的操作顺序
不要一上来就删除旧地图对象,稳妥的方式是分阶段替换。
先在报表旁新建一条空页,复制一版原报表的数据结构参考,插入形状地图,完成地图文件加载和字段配置。接着把旧地图上所有已经设置的格式项,包括颜色阈值、标题、边框、工具提示,逐一对照到新形状地图里。这里容易出现遗漏的是工具提示,很多人换完视觉对象发现悬停效果没了,其实是工具提示字段没补上。
确认新地图在测试页上表现正常后,再回到原报表页,删除旧地图对象。不要试图同时保留两个地图对象做对照太久,否则报表页会显得很乱,而且刷新和加载性能也会受影响。删除前建议另存一份备份文件,万一后续要追溯旧效果,还有退路。
4.3 多级下钻怎么处理
内置地图支持从省份向下钻取到城市,这在老看板里很常见。形状地图本身不会自动根据层级变化切换地图边界,所以你需要换个思路。
最简单的方式是单独做一张市级地图页,省级地图只展示省级汇总数据。在省级地图页配置钻取字段时,把"省份"和"城市"字段加到钻取字段区域,然后把市级形状地图放在一个新的报表页。当点击省级地图中的某个区域时,Power BI 会通过钻取功能跳转到市级地图页,并自动应用当前区域的筛选条件。
另一种做法是用书签做联动。两个形状地图视觉对象放在同一页,一个控制省级、一个控制市级,用切片器选择省份后,市级地图动态展示该省的城市数据。对于非技术背景的查看者,这种方式更直观,也比钻取更容易理解。缺点是需要多放一个视觉对象,页面布局要花点心思。
5. 常见问题与排查技巧实录
5.1 症状速查表:一张表定位 80% 的问题
做项目的时候,地图相关的问题翻来覆去就那么几类。整理成速查表,方便团队自查:
| 症状 | 可能原因 | 排查方向 |
|---|---|---|
| 地图空白不显示 | GeoJSON 格式非法或根节点不对 | 用在线 JSON 校验器检查,确认 FeatureCollection 结构 |
| 位置列全部显示"未识别" | 数据中的区域名与地图 name 不一致 | 打开地图文件,逐项对比 name 列表 |
| 地图显示了但没有填充颜色 | 颜色饱和度字段未绑定 | 检查字段框,确认数值字段已拖入 |
| 加载非常慢 | 地图文件太大 | 简化坐标精度,删除多余属性 |
| 地图位置整体偏移 | 坐标系不是 WGS84 | 转成 EPSG:4326 经纬度坐标 |
| 省份名乱码 | 文件编码不是 UTF-8 | 另存为 UTF-8 无 BOM 格式 |
这六类问题覆盖了绝大多数场景,遇到卡壳先对照表格定位,能省下不少查资料的时间。
5.2 数据匹配问题是最大的隐形坑
有一次我接手一张带地图的报表,地图一直显示不出某个区域,查了很久才发现数据表里的省份后面藏了一个全角空格。这种字符在表格里几乎看不出来,但一旦进入匹配环节就会让你抓狂。从那次以后,我在清洗区域字段时都会顺手做一次去空格和 trim,避免类似问题反复出现。
还有一次,地图文件里的省名在编辑器里看着正常,Power BI 加载后却变成乱码。后来发现文件虽然是 UTF-8,但带上了 BOM 头,某些情况下会影响解析。解决方法是把文件统一另存为 UTF-8 无 BOM,这一步在国内制作地图文件时特别实用。
如果一张表里位置值有几十个,建议用 Power Query 的合并查询做一个对照关系,而不是手动一个一个改。手动改的快,但下次刷新数据时又会冒出来,因为原始数据源并没有变。只有上游清洗才是可持续的做法。
5.3 遇到"此视觉对象不再可用"怎么办
这个问题多出现在旧地图视觉对象已经进入淘汰期之后。如果你打开存量报表看到这个提示,不要幻想通过设置或更新驱动解决,直接替换视觉对象就行。
具体操作还是按第 4 节流程来:新建形状地图、加载地图文件、绑定字段、重新设置格式。如果报表文件比较陈旧,建议先用最新版本 Power BI Desktop 打开一次,确认其他视觉对象没有因为升级而产生兼容问题,再做地图迁移。
5.4 数据刷新后地图闪烁或变慢
本地加载的地图文件不会像在线地图那样因为网络波动而闪,但大型文件会在每次报表刷新时重新解析一次,刷新频率高时肉眼可见卡顿。优化的方向不是改报表,而是降低文件复杂度。
把 GeoJSON 转换成 TopoJSON 能明显减小体积,因为 TopoJSON 会把重复的边界共享存储。另外在简化坐标时,保留到小数点后 3~4 位已经足够省级地图缩放,不用追求过分精细。很多看起来好看的高精度边界,在 Power BI 画布里根本体现不出来,只会拖慢性能。
6. 如果需求更细,还有哪些免费路线可以组合
6.1 只需要点位展示时,用散点图搭配形状地图
如果你只是要在图上显示门店位置、客户分布,不需要给区域填充颜色,传统地图其实是大材小用。更轻量的做法是用内置散点图,把经纬度字段分别放到 X 轴和 Y 轴,就能画出点。但散点图没有底图边界,看起来像一张抽象坐标图,不太符合业务直觉。
这时候可以把形状地图作为底层背景:加载一份省级边界文件,不绑定数值字段,让它只显示轮廓;再叠加一个透明的散点图视觉对象,对齐位置展示点位。这个玩法需要一些对齐调试,两个视觉对象要用同样的缩放比例和中心点才能对上。如果你想省事,直接用第三方带在线地图的视觉对象更简单,但要注意数据外发和授权问题。
6.2 市级、区县级地图要放到同一套逻辑里
方法本身没有区别,只需把 GeoJSON 换成对应级别的边界文件。市级地图就放市级的区域 name,区县级地图就放区县级的 name。这里最容易犯的错是:数据已经精细到区县,但地图文件仍然用省级,导致数据只能聚合到省,地图上什么也看不出来。
如果你的看板需要省、市、区县三级切换,建议按三级分别准备地图文件,并用报表导航或书签联动。不要试图把三级边界塞进同一个视觉对象里,Power BI 形状地图不支持运行时切换地图文件,层级下钻需要靠页面切换来模拟。
6.3 第三方中国地图视觉对象到底要不要用
很多人为了图快,会选择 AppSource 上现有的中国地图视觉对象。这类视觉对象确实好看,安装也简单,但我建议你先确认三件事:免费版有没有水印、行数限制或到期提示;数据字段会不会发送到第三方服务器;项目停更后,报表还能不能长期稳定显示。
如果只是做一次临时汇报,用第三方对象完全没问题。但如果是公司核心看板,我仍然推荐形状地图。虽然前期准备地图文件稍微花点时间,但它把自由度交还给了你,后续维护成本其实更低。
6.4 几个方案放在一起怎么选
| 方案 | 成本 | 外部依赖 | 适合场景 | 上手难度 |
|---|---|---|---|---|
| 旧内置地图(已移除) | 已不可用 | 高 | 无 | 无 |
| 形状地图 + 本地 JSON | 免费 | 无 | 省级/市级区域分析 | 中 |
| 第三方地图视觉对象 | 免费/收费 | 有 | 快速出效果 | 低 |
| 散点图 + 经纬度 | 免费 | 无 | 点位分布 | 低 |
| Python/R 视觉对象 | 免费(需环境) | 低 | 复杂专题地图 | 高 |
这张表可以帮你快速判断:大多数业务看板,形状地图就是那个性价比最高的选择。
7. 让形状地图真正稳起来的三个收尾习惯
7.1 地图文件要纳入版本管理
GeoJSON 文件和报表本身一样重要。行政区划会有变动,比如某些县改成市辖区、某些开发区被合并,这些变化都会影响地图显示。我在项目里会把地图文件放进代码仓库,文件名带上日期,更新时备注变更内容。这样一旦地图出现异常,可以快速回滚到上一个可用版本。
不要把地图文件放在网盘或者个人电脑默认下载目录里,团队协作时容易互相覆盖。统一维护一份标准地图文件,所有报表都引用这个标准,才能避免一个项目里出现多套不一致的地图。
7.2 发布到服务后,要确认地图还能正常显示
在 Power BI Desktop 里显示正常,不代表发布到服务端后一定正常。如果用的是本地文件方式,Power BI 会把地图文件打包进报表,服务端渲染基本不受影响。如果你之前图省事用了 URL 方式,那就要确认服务端能访问这个 URL,否则打开报表会看到空白地图。
国内做项目我尤其建议走本地文件路线,少一层外部访问就少一个故障点。发布到服务端后,第一次打开报表时要亲眼看一眼地图是否渲染完整,别等到老板打开才发现问题。
7.3 颜色对比度和可读性,必须在投屏前检查
最后说一个不怎么起眼但很影响汇报的细节。形状地图的配色如果边界线和填充色对比度不够,在投影仪上很容易糊成一片。我在实际做项目时踩过坑:花半天做好的地图,开会投屏时发现相邻省份颜色分不开,数据故事全废了。
我的习惯是,完成地图后至少做两次检查。第一次是看桌面端显示,确认颜色是否符合业务语义;第二次是模拟投屏或导出 PDF,看小字号、低分辨率下边界是否清楚。边框颜色建议用白色或浅灰色,填充色用中等透明度,避免高饱和度撞色。这个检查看似小事,却能直接决定地图看板在关键场合的表现。
我个人实际操作中的体会是,地图可视化真正考验人的不是绘图工具,而是地名匹配的耐心和文件准备的习惯。这次内置地图移除,正好把所有国内用户拉回同一条起跑线——与其依赖一个始终不稳定的在线服务,不如把地图数据掌握在自己手里,用形状地图这种免费的本地方案,稳稳当当地把报表做下去。