前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PQ获取TABLE的单一值作为条件查询MySQL返回数据

PQ获取TABLE的单一值作为条件查询MySQL返回数据

作者头像
陈学谦
发布2020-04-14 15:41:06
3.5K0
发布2020-04-14 15:41:06
举报
文章被收录于专栏:学谦数据运营学谦数据运营

下午,我正爽歪歪地喝着咖啡,看着Power BI每秒钟刷新一次,静静等待某个分公司完成本月绩效任务,自动调用Python在钉钉群中发送喜报:

紧接着再次调用Python将Power BI云端报告中的各分公司最新完成率数据和柱状图截图发在群里:

用的自然是下面这两篇文章的骚操作:

如果雇一个人7d×24h每10秒刷新一次Power BI,我需要每月支付他多少钱?

用Python任意刷新Power BI国际版

要说代码嘛,还是灰常简单滴:

当然,你可不要直接用啊,导入的库是本地生成的。详情请阅读以上两篇文章。

以上不是重点,说正事:

忽然,领导微信发来一张excel表,让我做一下简单分析,顺便发表一下看法。

领导安排活得赶紧的呀,放下咖啡,打开excel表-全选-插入表格-转换数据-powerquery

一顿操作猛如虎,分析了一下谁谁谁是二百五。

领导表示,说得对,就这么办。还有,把他上个月销售记录附在这张表后面,发我看看。

问题来了:这个时候如果是你,你会怎么完成这个任务?(前提,数据库中有所有人的全部记录。)

常规思路是,直接在数据库中查找这个人,按条件返回即可,只不过还得写一个导出到文件,然后打开文件复制到原来的表中,说实话还真有点繁琐。

PowerQuery能帮助我们很简便地解决这个问题。为简化模型,我们采用下面的数据来讲解:

比如我们要查询的人是moon,那么首先在powerquery编辑器中右键moon然后深化:

这样就得到了显示的值:moon。注意这里的值是一个单纯的值,而不是一个一行一列的表。当然,如果你关闭并上载,的确会得到一张一行一列的表:

由于我们并不想要这张表,而是想得到这个值,所以直接在这个查询后,将查询结果作为下一步查询的输入值。

得到了这个值,我们就可以调用MySQL去查询了:

let 源 = Excel.CurrentWorkbook(){[Name="表2"]}[Content], 更改的类型 = Table.TransformColumnTypes(源,{{"ID", Int64.Type}, {"NAME", type text}, {"销售额", Int64.Type}}), NAME = 更改的类型{1}[NAME], OUTPUT= MySQL.Database("localhost", "test1", [Query="select * from sheet1 WHERE销售员='"&NAME&"'"]) in OUTPUT

加载得到如下的返回表:

关闭并上载,保存文件,发送领导即可。

美滋滋,继续喝咖啡。

喝着喝着,我就开始琢磨这个查询了。

我按销售额从大到小的顺序排列,然后在查询结果表中点击右键刷新,发现:

诶?出问题了吧,一看查询到的结果,全都是infi的记录,这是怎么回事呢?

我们到查询编辑器中看看:

注意第三行:

NAME = 更改的类型{1}[NAME],

M语言允许我们通过坐标的方式获取表中单一的值,[NAME]代表NAME列,而{1}代表第2行,因为表都是从标号为0的行开始的。

而我们的原始表中,moon处于第2行:

而经过排序后的数据,第二行变成了infi:

因此,返回的查询一定也是infi的。

这样就有问题了,因为变动原始表,调整顺序,删除、增加行是经常会发生的事情,我不能每次去都修改moon所在的行吧?

主键的作用

我们知道,在关系型数据库SQL中,是存在主键的。那在Power Query中有没有可能设置主键呢?在UI上并没有设置的位置,但是我们还是可以想其他办法的,有这么几种方式:

1.从带有主键的数据库中导入数据

2.在pq中对table某一列去重,那么这一列就可以作为主键

3.使用Table.AddKey()函数对表操作

一旦设置主键,表中的每一个值就有了另外一种体现其坐标的方式。

我们对表的ID列进行去重(虽然其本身已经没有重复项,但这个操作必须得有),当做主键:

同样,选中moon右键-深化:

此时我们再来看看查询编辑器:

注意这个时候的第四行:

NAME = 删除的副本{[ID=3322]}[NAME]

它不再是以行号作为条件去匹配,而是以主键的名。而这种方式,对比用行号的方式,优势在于不论如何插入数据和改变排序,取值只看主键,所以查询结果不会变。我们测试一下:

不论怎么调整顺序,或者删除数据,只要表中还有moon,那么返回的结果都是不会变的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI生命管理大师学谦 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档