【重磅来袭】Power BI 中使用Python(4)——PQ数据导出&写回SQL

各位小伙伴们,大家好,我是学谦,咱们又见面了。


《在Power BI 中使用Python》系列的前三篇文章我们分别讲解了:


如何在Power BI中使用Python来获取数据:

如何在Power BI中使用Python进行数据清洗:

如何在Power BI中使用Python进行可视化呈现:

今天我们继续讲解第四篇——PQ数据导出与写回SQL


众所周知,Power BI对于数据的输出是有一定限制的,至少有以下两点:


1.可视化对象导出CSV格式限制3万行数据,这对于数据量动辄上百万甚至上亿的表来说是不可接受的;

2.而一直广为诟病的powerquery数据困难的问题更是一时半会也得不到解决。


那应该怎么办呢?


第一个问题,推荐使用DAX Studio,轻松导出十万、百万条记录;

第二个问题,没有现成的工具可以直接解决,但是结合本系列第二篇的内容,我们是否可以想到如何用Python将powerquery中的表输出为excel甚至实现数据回写到SQL中呢?


这就是我们今天要学习的内容:


【重磅来袭】Power BI 中使用Python(4)——PQ数据导出&写回SQL

我们在第二讲中说过:


Python的处理结果以Dataframe形式输出,M将Dataframe自动转换为Table格式。M将其Table类型的数据传递给Python,Python会自动将Table转换为Dataframe。


M将其Table类型的数据传递给Python,Python会自动将Table转换为Dataframe。那么Python中Dataframe如何输出呢?


想必了解pandas库的战友们已经想到答案了。


只要一行简单的代码:

<code>= Python.Execute("# 'dataset' 保留此脚本的输入数据#(lf)dataset.to_excel(r""C:\\Users\\\\xxxxx\\Desktop\\abc.xlsx"")",[dataset=源])/<code>

简单吧!


【重磅来袭】Power BI 中使用Python(4)——PQ数据导出&写回SQL


运行一下:

简单吧!


【重磅来袭】Power BI 中使用Python(4)——PQ数据导出&写回SQL


运行一下:

【重磅来袭】Power BI 中使用Python(4)——PQ数据导出&写回SQL


OK啦!


关键是:


只有一行代码!

只要一行代码!

只需一行代码!


重要的事情强调三遍!


多年来powerquery广为人们诟病的——数据清洗后无法导出结果的问题就这么被一行代码轻松地解决,美滋滋。

【重磅来袭】Power BI 中使用Python(4)——PQ数据导出&写回SQL


好了,既然知道了如何导出excel文件,那么各位,写回MySQL数据库的操作是否可以举一反三自行解决呢?


我们直接看下图的神操作:

【重磅来袭】Power BI 中使用Python(4)——PQ数据导出&写回SQL


看到了吗,mysql数据库中本来是一张空表,我们在powerquery中运行了一段Python代码后,表中有了数据。

【重磅来袭】Power BI 中使用Python(4)——PQ数据导出&写回SQL


关键代码解释:

<code>db = pymysql.connect("localhost","用户名","密码","nc" )
#连接数据库
query = 'insert into `全球疫情_country`(id,displayName,areas,totalConfirmed,totalDeaths,totalRecovered,lastUpdated,lat,long,parentId)values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'
#键入数据

for r in range(len(dataset)):
#按行获取数据

id0=dataset.iat[r,0]
displayName=dataset.iat[r,1]
areas=dataset.iat[r,2]
……
values = (id0,displayName,areas,totalConfirmed,totalDeaths,totalRecovered,lastUpdated,lat,long,parentId)
cursor.execute(query, values)

cursor.close()
db.commit()
db.close()
#提交数据并关闭数据库/<code>

代码没什么难度,用的是Python的一个常用库:pymysql,将dataset中的数据按行导入MySQL中。


但是有一个大BUG一点小问题:


因为全球只有200左右个国家和地区,country层面的数据应该只有200左右。但是,我习惯性地瞥了一眼MySQL右下角,发现:

【重磅来袭】Power BI 中使用Python(4)——PQ数据导出&写回SQL


难道最近的国际局势变化这么大,已经有567个国家和地区了?不可能吧。抓紧查询一下,发现果然有问题:

【重磅来袭】Power BI 中使用Python(4)——PQ数据导出&写回SQL


全球每一个国家和地区的数据都显示了三次,567/3=189,这还差不多。


而且清空表后再刷新运行,就会发现有的时候是2次,有的时候5次,这意思就是Python代码运行了多次,造成了数据重复,这背后的原因我们无从得知。这样可不行啊,总不能每次使用的时候先去重吧,不太现实,如果有时候疏忽了就麻烦了,那该怎么办呢?


这个问题先一放,我们来看另一个问题:


每个国家的每日数据我们只保留一次,即便powerquery每次刷新只向MySQL数据库写入一次,但我们也不能保证编写模型的时候只刷新一次吧,因为一旦人工刷新多次,造成的结果和上面被动造成的结果一致,所以,只要我们解决了人工刷新造成数据重复的问题,查询刷新时被动写入多次的问题也就顺带解决了。


我们看一下数据,有一列“lastupdated”,是时间格式,也就是查询的时间,由于我们只关心日期数据,因此只取出日期就可以。所以只要每次写回MySQL之前,先判断一下数据库中是否已经存在当日的数据,如果有,就先删除,再将新的数据写入,这样就达到我们的目的了。


添加以下代码:

<code>#添加一列日期
dataset.insert(loc=10,column="updateday",value=dataset["lastUpdated"].str[0:10])

#获取日期
today_date=dataset.iat[0,10]

#删除当日的已有数据
query_delete='DELETE FROM `全球疫情_country` WHERE updateday='+today_date/<code>

运行一下代码:

【重磅来袭】Power BI 中使用Python(4)——PQ数据导出&写回SQL


MySQL数据库的表中初始有378条数据(因为包含了3月27日和3月28日两天的数据,共189个国家和地区的数据),运行代码后,仍然是378条,之前已有的3月28日的数据被删除,然后添加了刚刚查询到的最新数据。


完美解决!


好了,写回MySQL数据库的全部操作和遇到的问题与解决措施到这里就讲解完毕了。你学会了吗?


写这篇文章的时候不知道怎么的,远程计算机的MySQL数据库总是出问题,导致我这边文章前前后后写了五六个小时。


本节内容细节的点特别多,大家一定要自己动手操作几遍,后续我会逐步安排相关的视频讲解,大家请注意关注,跟上队伍。




以下仍然是下期预告环节:

【重磅来袭】Power BI 中使用Python(4)——PQ数据导出&写回SQL


下一篇我们将继续介绍一个重磅功能——数据条件触发预警并邮件通知


说到数据预警,微软自家的Flow可以设置预警条件并发送邮件,这是原生功能,有兴趣的朋友可以去了解。


【重磅来袭】Power BI 中使用Python(4)——PQ数据导出&写回SQL




感谢您对【学谦数据运营】的关注、支持与厚爱,如果本文对您有用,请不要吝惜您的点赞、转发和点亮在看,有任何问题欢迎大家在留言区询问,谢谢。


分享到:


相關文章: