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

紧接着再次调用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,那么返回的结果都是不会变的。

mysql 行号_PQ获取TABLE的单一值作为条件查询MySQL返回数据相关推荐

  1. 如何在mysql查询结果集中得到记录行号_获取MySQL查询结果集中记录行号的方法...

    如果需要在查询语句返回的列中包括一列以指示整个结果集中记录的行号,则ISO SQL: 2003标准建议的方法是提供ROW_NUMBER()/ RANK()函数. Oracle可以使用标准方法(版本8i ...

  2. mysql 行号_mysql的行号问题

    1.行号问题行号是指按顺序为查询结果集的行分配的连续整数.Mysql数据库在行号方面的支持并不是十分友好,没有橡其他数据库一样提供类似的row_number解决方案,因此得到行号是一个十分有技巧的问题 ...

  3. mysql skip remarks_mysql DatabaseMetaData 获取table remarks为空的解决办法

    利用java.sql.DatabaseMetaData获取数据库信息时,当数据库为mysql时,使用getTables获取表的信息时 无法获取remarks信息,一直以为是mysql驱动的bug,困扰 ...

  4. python pandas获取行号_python获取行号和函数名

    敢用自己的名字做软件名字的,都有非常强大的自信.比如,垠语言什么的. awk的命名得自于它的三个创始人姓别的首字母,都是80来岁的老爷爷了.当然也有四个人的组合:流行的GoF设计模式.但对于我这游戏爱 ...

  5. js循环获取table中的值

    <script type="text/javascript">function getTdValue() {var tableId = document.getElem ...

  6. mysql in和or扫描全表_MySQL对OR条件查询不支持优化,会进行全表扫描

    MySQL对OR条件查询不支持优化,会进行全表扫描:explain extended select * from like1 where name like 'abc%';例如:+----+----- ...

  7. js 用下标获取map值_js map方法处理返回数据,获取指定数据简写方法

    map方法处理返回数据,获取指定数据简写方法 前言 后端返回数据为数组列表时,通常比较全面,包含了很多不需要的数据,可以通过 map 方法处理返回数据,筛选出想要的数据 例如 // 返回数据 res ...

  8. mysql 行号查询

    2019独角兽企业重金招聘Python工程师标准>>> 1 SET @row_number = 0;SELECT (@row_number:=@row_number + 1) AS ...

  9. mysql 帐号开启远程_两大步骤教您开启MySQL 数据库远程登陆帐号

    在工作实践和学习中,如何开启 MySQL 数据库的远程登陆帐号算是一个难点的问题,以下内容便是在工作和实践中总结出来的两大步骤,能帮助DBA们顺利的完成开启 MySQL 数据库的远程登陆帐号. 1.确 ...

最新文章

  1. PgSQL · 应用案例 · 阿里云 RDS PostgreSQL 高并发特性 vs 社区版本
  2. 洛谷1090 合并果子
  3. 浅谈shell中的clear命令实现
  4. 用Typescript如火如荼地进行angular.js
  5. c语言先调用load函数,透过源码全流程分析+load函数初始化
  6. 帆软报表插件开发之fine-decision中的MessageEventProvider扩展
  7. 手把手教你搭建Jenkins+Jmeter+Ant自动化集成环境
  8. PostgreSQL是否区分大小写
  9. 块裁剪后的矩形边界如何去掉_如何3分钟剪辑出满意的视频号视频?
  10. 如何将Oracle卸载干净
  11. 树莓派ssh远程登录连接默认账号密码
  12. 第五章:优势策略均衡
  13. LeetCode 热题 HOT 100 -------160. 相交链表(链表)206. 反转链表(递归、回溯)
  14. Bat_PNG转PDF,读取系统剪切板
  15. java递归把list菜单列表转为菜单树
  16. 针对前端初级学者,如何在windows下搭建react-native环境详细教程
  17. 微信PC版史诗级更新,终于摆脱手机了!
  18. 轻易成就难事的 “ 美好心灵 ” 之力
  19. CAN记录仪 can数据记录仪简介和功能应用 can总线记录
  20. msp432快速入门第二节之sdk的详解

热门文章

  1. 在Ubuntu 16.04.3 LTS上搭建Go语言环境实录
  2. C++中的string::compare的使用
  3. Ubuntu 12.04 64bit或者CentOS 6.3 64bit上搭建OpenRTMFP/Cumulus服务器
  4. 雷林鹏分享:jQuery EasyUI 数据网格 - 创建属性网格
  5. ERROR: from PIL import Image ImportError: No module named PIL
  6. MyEclipse快捷键
  7. 词法作用域和动态作用域
  8. 如何用CSS快速布局(一)—— 布局元素详细
  9. sqlserver任务导出Excle
  10. 在Ubuntu上安装Snort入侵检测系统。