终极玩转Power BI中Drill-down Choropleth 地图

article/2025/9/12 19:15:51

故事背景

最近有个Power BI的项目有个功能点,颇令我头痛,说来话长,先捋一下需求:
1, 中国地图(包含港澳台)
2, 可以下钻到省市级,而且是中国->Region->Area->城市,客户需求里面,‘省’这个概念可以淡化,由excel里面的Region(例如,中区,东区)和Area(例如东区下面的‘江苏安徽’组)等把各城市关系串联起来。
3, 中国周围不能有颜色,用纯黑代替(也就是说必应地图不行)

地图选型

好了,看了这需求后,我开始上网搜索比较接近需求的地图了(以前做的地图项目,级基本都是机带必应地图就可以搞定了,所以没怎么用过其他地图的经验)。通过搜索,发现了下面几种网上常用的地图,可是,都各有优缺点。
i. 必应
优点:可以下钻,可以关联到具体城市。
缺点:Bing地图是唯一没有替代底图的背景(可以离线)
在这里插入图片描述
ii. 上北
优点:可以下钻,可以关联到具体城市,可离线
缺点:收费(否则有水印),省份的颜色不能根据region来定义,是根据每个省份的例如销售额,然后从浅到深显示。如果要改成和客户需求一样,还需要另外购买,而且机器也只能指定某几台。
在这里插入图片描述
iii. Drilldwon Choropleth
优点:可以下钻,去到具体城市
缺点:在线json文件,目前找到的文件没有中国的港澳台地区

在这里插入图片描述

iv. Synoptic Panel
优点:支持离线地图,有全中国地区,周边也是可以用背景色代替
缺点:不可以下钻,如果要下钻,就必须通过下拉文本框选择对应省份或者城市。
在这里插入图片描述
iv. shape map
在这里插入图片描述
要网络版power bi(黄色图标)那个才可以使用,而且不可以下钻,要自己独立选jason地图。
在这里插入图片描述
如果作为普通演示,问题不大。

解决方案

综合了以上考虑,最接近客户需求的,只能是’Drilldown Choropleth’这种了,这里的关于控件的前期安装,基本机制,我就不说了,因为我也是参考Power BI里面一位博主叫‘罗叔’的文章的,老实说,他这篇文章给了我很大的帮助,让我对这个控件也多了很多认识,这里要感谢一下罗叔。
https://cloud.tencent.com/developer/article/1586638

但是,然而,罗叔也是调皮了一下,留了个小作业,就是给出的Json文件里面,中国地图里面是没有了港澳台。这怎么行啊?这是原则问题啊。后来,我自己再深深思考了一下,干脆自己把Json重做,所以本文的精髓,在于分享一下我对于重做Json文件的一些心得,和遇到的困难以及解决办法。所以我相信,接下来的分享,在目前互联网上的对应中文心得,我是首创,希望对大家有更多的帮助。

接下来关于材料,我要再次提醒下两个重要的工具网站。
http://datav.aliyun.com/tools/atlas/#&lat=33.50475906922609&lng=104.2822265625&zoom=4
地图选择器,里面有中国地图,省-市-区三个级别的Json生成文件,大家可以从这里下载相应的Json文件,不过这里要提醒一下,这里下载的,是GeoJson,而PowerBI里面drilldown那个控件,要求的是TopoJson,关于这两个文件类型有什么不同,我这里就不说了,大家自行百度。(敲黑板,记住我们要用的是TopoJson)后面简称Geo和Topo

好了,对于我们手上已经下载的Geo,我们需要转换啊,于是大家要用到第二个工具了
https://mapshaper.org/

这个是可以根据输入的Geo转换成Topo。但目前发现,如果要全部省市份弄出来一个Json的话,还是需要有点耐心。因为地图选择器里面,去到省市级的话,是要逐个导出的,例如下图,我要导河南和广东。必须一次拖两个Json进去。

在这里插入图片描述
在这里插入图片描述

当然了,这个例子是为了说明具体做法而用了两个位置距离比较远的城市,大家就苦力一点把省份全部导出呗。反正我觉得地图选择器的中国地图比较良心的,还有南海诸岛,很炫。

在这里插入图片描述
好了,第一层(全国省),第二层(全国市)都准备好了之后,就可以把地图放上一个公网了。这里要说一下,就是drilldown控件,指支持http的URL,我还准备做一个私服把这两个文件弄上去,因为每次都要联网的话,有点慢,如果在Load过程中,出现Invalid Json File,大家千万不要慌,未必是Json文件有问题,可能是load不出而已。
在这里插入图片描述
接下来,我要把文件,暂时放到Github上去了,这个过程也不多说了,因为相信大部分人,都用过GitHub。
有了两张地图,其实还不够,因为这样的话,第一层和第二层,还没有关联起来的,只是形成一种‘各玩各’的状态,也就是说,你在powerbi里面,放‘省’的值时,它就出现‘省’,放‘市’的值时它就显示市,那么我们怎么关联起来呢?这里,就开始另一个比较复杂的工作量了,我们要在Json文件里,加Flag。

原生Json是没有name_connect这个值的,只有name,但如果去到‘市’那个文件,name就变成市了,没有了‘省’的名。所以,在第一层里面,我们要加上一个flag,是和第二层名字一样的,那么这个name_connect,也需要出现在第二层里。
第一层文件的截图:

在这里插入图片描述
第二层文件的截图:
在这里插入图片描述
因为默认是name会与数据源表里面的字段匹配,如果怕容易造成混乱,也可以在控件的ID里面指定:

在这里插入图片描述
所以接下来,如果有像我这种特殊Region,Area需求的同学,只需要在每层文件里面加上需要的一些标识,基本就可以搞定这个地图了,下面是一些截图。

在这里插入图片描述
当点击两个省其中一个(因为现在两个省是形成一组area),它就会去到里面的两个省共有的城市,点击之前一定要标黑下钻小箭头,不然不能下钻的。

在这里插入图片描述

后续:

1, 依然是回归到上面Json文件的摆放位置,考虑到Github由于是外国网站,读取的时候对网络条件还是有点要求,如果因为有时的卡顿,就会认不到,所以,如果在国内连接外网的话,我会推荐上去一个叫‘七牛云存储’的网站,这个网站是我试过的最稳定的又可以外放json文件供软件读取的网站,其他什么百度之类,全都是要验证的。
2, 如果RS服务器,想搭配到本地,IIS又在本地的话,那就更方便了。关于IIS的http文件服务器快速搭建,可以参考下面这个网站:
https://www.cnblogs.com/wuy401120html/p/9219255.html

但是,其实这样还不够,如果按照上面搭配好的网站,充其量你可以在网页里面打得开,就像这样:

但其实power bi还是不能读取的,为什么呢,因为跨域问题。所以还要在IIS里面的web.config文件里面,加上下面这句:

<httpProtocol><customHeaders><remove name="X-Powered-By" /><add name="Access-Control-Allow-Origin" value="*" /><add name="Access-Control-Allow-Headers" value="*" /><add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" /></customHeaders></httpProtocol>

这样才能真正解决IIS本地部署的问题。

3, 关于一些控件不能与地图联动的问题,其实主要是如果下钻到最底层的话,要把下钻小箭头标白,便可以做到了。
在这里插入图片描述
好了,今天的分享先到这里,如果大家有什么问题,可以随时留言,我们一起交流,共同进步。


http://chatgpt.dhexx.cn/article/C84LISPC.shtml

相关文章

C语言计算阶乘及阶乘的和

计算 n的阶乘。要实现这个阶乘的值并不难&#xff0c;只需要运用到for循环依次相乘即可&#xff0c;但要注意for循环i的初始值一定是从1开始到n结束。 #include<stdio.h> int main() {int i,n;int ret 1;//用于存放阶乘的值scanf("%d", &n);for (i 1; i…

c语言求阶乘的两种算法(递归和循环)

循环法 循环法还是比较简单的&#xff0c;很常规&#xff0c;就先输入你要求的阶乘n&#xff0c;然后一直自减 #include <stdio.h> main() {long n,sum1;//10 以上的阶乘就比较大了&#xff0c;所以用longint i;printf("请输入你要求的阶乘呀&#xff1a;");…

【C语言】求一个数的阶乘

#include <stdio.h> //包含标准库的信息int main(void) //每个程序都从main函数的起点开始执行 { //函数开始int p 1;int n;printf("请输入所求阶乘&#xff1a;\n");scanf("%d",&…

C语言求1到20的阶乘之和

#include<stdio.h>int main() {int i, j;long long sum 0, jieCheng;for (i 1; i < 20; i){jieCheng 1;for (j 1; j < i; j){jieCheng * j;}sum jieCheng;}printf("%lld", sum);return 0; }

C语言基础 阶乘:输入一个数,输出它的阶乘。

升级打怪 C语言基础第一题 题目&#xff1a; 输入一个数字&#xff0c;输出它的阶乘。 求阶乘有很多种方法&#xff0c;我下面来例举一种使用while语句的方法&#xff01; 1.首先定义变量&#xff1b; 2.输入所要求的阶乘&#xff1b; 3.使用while循环 fact*i 就是 fac…

阶乘求和 C语言实现求阶乘之和 三种方法实现 先阶乘再累加

题目&#xff1a; 此处题目是以1-20的阶乘之和举例 方法一&#xff1a;使用一层for循环实现 代码简单快捷容易理解 代码示例如下&#xff1a; #include<stdio.h> int main() {double a 1, sum 0;//因为最后值可能会超出int所能接收的范围 故用doubleint n, i;scanf…

C语言 求n的阶乘及阶乘和

题目 随机输入一个整数n&#xff0c;求出n的阶乘 思路 阶乘&#xff0c;每次乘的数依次递增&#xff0c;直到第n个数&#xff0c;因此我们可以设置一个变量result&#xff0c;用于储存每一次的运算结果。且每次乘的数都依次递增&#xff0c;可以使用for循环语句&#xff0c;…

C语言:运用函数实现阶乘

第一次写的时候&#xff0c;输出一直输出的为初始值&#xff0c;没有输出阶乘后的值&#xff0c;找了好久问题才发现&#xff0c;下次一定注意 编程时要考虑到0和1的阶乘 代码如下&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h>int JC(int num) {in…

【C语言】求阶乘与阶乘之和

中学我们都学习了阶乘的求法&#xff0c;比如要求整数&#xff4e;的阶乘&#xff0c;则&#xff4e;!n(n-1)(n-2)…21。现在有两个问题&#xff0c;要用&#xff23;语言编写程序求&#xff4e;的阶乘&#xff0c;以及求1!2!3!…n!&#xff0c;该如何解决呢&#xff1f;   …

【C语言】阶乘实现

&#x1f389;博客主页&#xff1a;Luo-Kuang-何 &#x1f389;座右铭&#xff1a;一起走向人生巅峰的路上&#x1f601; &#x1f389;学习进度&#xff1a;【C语言】 &#x1f389;博客声明&#xff1a;我将尽我所能&#xff0c;用心写好每一份博客&#xff0c;让更多小伙伴能…

C语言入门——计算n的阶乘

目录 一、问题 二、问题分析 三、代码实现 四、运行结果 一、问题 通过c语言编程计算n的阶乘。 二、问题分析 1、首先明确n的阶乘在数学中怎么算&#xff1a;1*2*……*(n-1)*n n! 2、怎么用c语言来实现呢&#xff1f; &#xff08;1&#xff09;首先要做的是要有这n个数…

C语言 求阶乘和

法一:利用for循环 输入n 后,我们要计算1!2!...n!,我们最容易想到的,也会写的是某单个数的循环,如 int n 5; //当输入n 5时 int i 0; int num 1;//循环总和 int renum 0;//累加总和 for(i 1; i < n; i) // 5 的阶乘 1 * 2 * 3 * 4 * 5 {num * i; } 那么对于一系列的阶…

五种C程序计算阶乘方法 c语言实现1到n的阶乘1*2*3*.....*n的累乘计算,使用不同方法实现,五种计算阶乘的方法

题目&#xff1a; 题目分析&#xff1a; 首先要清楚阶乘定义&#xff0c;所谓 n 的阶乘&#xff0c;就是从 1 开始乘以比前一个数大 1 的数&#xff0c;一直乘到 n&#xff0c;用公式表示就是&#xff1a;1234…(n-2)(n-1)nn! 具体的操作: 利用循环解决问题&#xff0c;设循环变…

毕设 深度学习卷积神经网络的花卉识别

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 今天学长向大家介绍一个机器视觉项目 基于深度学习卷积神经网络…

AlexNet实现花卉识别

AlexNet实现花卉识别 本人水平有限&#xff0c;如有错误&#xff0c;欢迎指出&#xff01; 1. AlexNet 1.1 简介 ​ AlexNet是由UToronto的Alex Krizhevsky、Hinton等人在2012年提出的8层神经网络模型&#xff0c;并获得了ILSVRC12挑战赛ImageNet数据集分类任务的冠军&#x…

基于CNN的花卉识别

程序和数据集地址&#xff1a;https://download.csdn.net/my 数据集准备&#xff1a; 如图是五种类别的花卉数据集&#xff0c;分别放在五个文件夹。 训练神经网络模型文件在CNN中 定义数据集地址和模型保存地址程序如下&#xff08;我用的是‘\’&#xff0c;建议用‘/’表示…

【实战】tensorflow 花卉识别

文章目录 实战&#xff1a;花卉识别数据集网络模型可视化画卷积图&#xff1a; 实战&#xff1a;花卉识别 数据集 数据集&#xff1a;tensorflow 花卉识别 该数据集是 分为 5 个类别 [‘雏菊’, ‘蒲公英’,‘玫瑰’,‘向日葵’, ‘郁金香’] 网络模型 可视化 画卷积图&#x…

毕业设计-基于深度学习的花卉识别分类

目录 前言 课题背景和意义 实现技术思路 一、花卉识别相关理论基础 二、基于 ResNeXt 和迁移学习的花卉种类识别 三、基于 EfficientNet 和迁移学习的花卉种类识别 实现效果图样例 最后 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后…

毕业设计 - 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 今天学长向大家介绍一个机器视觉项目 基于深度学习卷积神经网络…

【毕业设计】深度学习花卉识别系统 - 卷积神经网络 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长…