一、概述

 1.1 配置

系统:win11

excel:office2019

 

 

 1.2 PQ个人看法

Power Query 简称PQ

Power Pivot  简称PP

可以做到读取数据并合并、清理格式、行操作、列操作者、行列操作、透视逆透视、数字计算等;
优于Excel函数,但是清理格式、行操作、列操作、行列操作等有SQL可以完成;
透视逆透视、数字计算等有PP可以实现;

独特的优势读取数据并合并;还有可以实现SQL或者PP难以实现的极端情况;

定位:PP的准备工作,连接数据库与PP的桥梁;无数据库或者数据简单的不二选择,数据复杂用Python;

 

 1.3 知识导图

pd 数据索引只读取一行 power query 索引_pd 数据索引只读取一行

 

  

 

 

二、重要函数

PQ是 M函数 ,区分大小写,不建议花大量时间学习。了解即可。

 

 2.1 Excel.Workbook

pd 数据索引只读取一行 power query 索引_pd 数据索引只读取一行_02

 

 2.2 Text.Combine

pd 数据索引只读取一行 power query 索引_Data_03

 

 

 2.3 try

pd 数据索引只读取一行 power query 索引_自定义_04

 

 

三、读取数据

PQ智能读取表格,不能读取区域

 3.1 汇总同一文件夹的数据

  3.1.1 原始文件路径

文件夹路径:E:\PowerBI学习\素材

Excel工作簿:1001组.xlsx;1002组.xlsx

要求:所有工作表的表头、格式完全一致

具体入下图

pd 数据索引只读取一行 power query 索引_pd 数据索引只读取一行_05

 

 

 

  3.1.2 PQ操作

pd 数据索引只读取一行 power query 索引_自定义_06

 

 

 

步骤解释:

  1. 源:= Folder.Files("E:\PowerBI学习\cnblogs\读取") 

      获取文件夹下得所有工作表

  2. 删除的列:= Table.RemoveColumns(源,{"Extension", "Date accessed", "Date modified", "Date created", "Attributes", "Folder Path

           非必要操作,个人行为,列太多看着难受

  3. 已添加自定义:= Table.AddColumn(删除的列, "自定义", each Excel.Workbook([Content],true))

            核心操作,这一步必须自己写;无法通过点击而完成;其他步骤都可以通过点击完成。核心是 Excel.Workbook([Content],true)。

pd 数据索引只读取一行 power query 索引_pd 数据索引只读取一行_07

  4. 展开的“自定义”:= Table.ExpandTableColumn(已添加自定义, "自定义", {"Name", "Data", "Item", "Kind", "Hidden"}, {"自定义.Name", "自定义.Data", "自定义.Item", "自定义.Kind", "自定义.Hidden"})

    将新增的列[自定义]展开:也就是读取工作簿中的工作表

  5. 展开的“自定义.Data”:= Table.ExpandTableColumn(#"展开的“自定义”", "自定义.Data", {"省份", "姓名", "收入"}, {"自定义.Data.省份", "自定义.Data.姓名", "自定义.Data.收入"})

         读取工作表中的内容

  6. 删除的其他列:= Table.SelectColumns(#"展开的“自定义.Data”",{"Name", "省份", "姓名", "收入", "自定义.Item"})

       选取需要列

  7.重排序的列:= Table.ReorderColumns(删除的其他列,{"Name", "自定义.Item", "省份", "姓名", "收入"})

      个人习惯

  8.重命名的列= Table.RenameColumns(重排序的列,{{"Name", "工作簿"}, {"自定义.Item", "工作表"}})

   个人习惯

 

 

 3.2 复制

           没什么大用,将查询复制一份

pd 数据索引只读取一行 power query 索引_pd 数据索引只读取一行_08

 

 

 

 3.3 注意csv文件

主要是注意编码:如果出现乱码;选择encoding=936

另外csv的Content是可以直接展开的;无需新增列。

office2019好像可以智能识别编码;

友情提示:在Python、Navicat读取csv和同样要注意编码

pd 数据索引只读取一行 power query 索引_数据_09

 

 

 

 

 

四、清理格式

 4.1 修改数据类型

极其重要的一个操作,主要是PP无法像SQL可以隐形对数据进行转换,如果是文本格式,则无法对其进行数学运算

pd 数据索引只读取一行 power query 索引_数据_10

 

 

 

 4.2 检测数据类型

对数据类型进行检测并更改;建议还是使用修改数据类型,毕竟工作量不大

 

 4.3 格式

选中要做的步骤,上面有解释;不多解释

pd 数据索引只读取一行 power query 索引_pd 数据索引只读取一行_11

 

 

 

 4.4 替换

类似于replace

pd 数据索引只读取一行 power query 索引_自定义_12

 

 

 

 

 4.5 填充

 如果本行缺失数据,向下填充,则下面的空值会以上面的数据填充,例如下图中的null值会填充为"江苏";向上填充同理

pd 数据索引只读取一行 power query 索引_Data_13

 

 

 

 

五、行操作

 5.1 将第一行用作标题

有时PQ无法识别行,或者其他行才是标题,需要将其他行调整到第一行,在将第一行用作标题。

pd 数据索引只读取一行 power query 索引_自定义_14

 

 

 

 

 5.2 删除行

pd 数据索引只读取一行 power query 索引_pd 数据索引只读取一行_15

 

 

 

 5.3 保留行

 

 

 

  5.4 筛选

pd 数据索引只读取一行 power query 索引_自定义_16

 

 

 

 

 5.5 排序

pd 数据索引只读取一行 power query 索引_Data_17

 

 

 

 

 5.6 反转行

将行的顺序颠倒,最后一行变为第一行。

pd 数据索引只读取一行 power query 索引_自定义_18

 

 

 

六、列操作

 6.1 删除列

pd 数据索引只读取一行 power query 索引_数据_19

 

 

 

 6.2 选择列

pd 数据索引只读取一行 power query 索引_自定义_20

 

 

 

 6.3 移动列

调整列的位置上,选中列移动即可

 

 6.4 条件列

pd 数据索引只读取一行 power query 索引_自定义_21

 

 

 

 6.5 索引列

如果担心排序之后原来的顺序忘记了,可以提前建一个索引列;索引列的顺序即为原始数据

pd 数据索引只读取一行 power query 索引_pd 数据索引只读取一行_22

 

 

 

 6.6 重复列

将某列进行复制

 

 6.7 示例中的列

PQ根据某种规则智能提取数据;只对文本和日期格式有效

pd 数据索引只读取一行 power query 索引_自定义_23

 

 

 

 6.8 自定义列

辅助列的终极大招,对函数要求比较高;

 

pd 数据索引只读取一行 power query 索引_pd 数据索引只读取一行_24

 

 

 

 6.9 拆分列

pd 数据索引只读取一行 power query 索引_数据_25

 

 

 

 6.10 提取

可以通过先分列在删除非目标列来实现。

pd 数据索引只读取一行 power query 索引_自定义_26

 

 

 

 6.11 合并列

将两列合并为一列,拆分列的逆操作

pd 数据索引只读取一行 power query 索引_数据_27

 

 

 

 6.12 重命名列

对列进行重命名

pd 数据索引只读取一行 power query 索引_数据_28

 

 

 

七、行列操作

 7.1 追加查询

在现有表的下方填写新的行数据,相同字段的内容进行合并;如果字段不一样,则会新增字段。

pd 数据索引只读取一行 power query 索引_自定义_29

 

 

 

 7.2 合并查询

类似SQL中的JOIN;Excel中的VLOOKUP

  • 左外部(第一个中的所有行,第二个中的匹配行):ABCDE
  • 右外部(第二个中的所有行,第一个中的匹配行):DEFG
  • 完全外部(两者中的所有行):ABCDEFG
  • 内部(仅限匹配行):DE
  • 左反(仅限第一个中的行):ABC
  • 右反(仅限第二个中的行):FG

 

 

 

pd 数据索引只读取一行 power query 索引_pd 数据索引只读取一行_30

 

 

 

 

 7.3 转置

就是把行变成列,列变成行,进行行列转换。 

 

pd 数据索引只读取一行 power query 索引_pd 数据索引只读取一行_31

 

 

 

 

 

 7.4 透视与逆透视

透视可以参考透视表,重点是逆透视,可以看成是PQ的一个大招。

逆透视参考博客:

 

pd 数据索引只读取一行 power query 索引_Data_32

 

 

 

 

 

八、其他

 8.1 对行进行计数

任一选择一列,查看有多少行;

该功能更适合PP来操作

 

 8.2 分组依据

也类似于透视表。

该功能更适合PP来操作

pd 数据索引只读取一行 power query 索引_数据_33

 

 

 

 

 

 

 8.3 数字计算

 对数字类型进行的计算

pd 数据索引只读取一行 power query 索引_自定义_34

 

 

 

 8.4 日期

 对日期类型进行的计算;

涉及日期的一般有一个单独的日期维度表

pd 数据索引只读取一行 power query 索引_自定义_35

 

 

 

 

 8.5 多行属性合并

参考博客:

核心函数:Test.Combine

 

 

 九、解决错误

错误的出现必须解决掉,因为错误不会影响到上传到模型和上传到表;所有的错误值会变成空白。

例如下图,处“十五”外,其他都是数字,当把格式设置成小数格式,上传之后会提示1个错误

 

pd 数据索引只读取一行 power query 索引_pd 数据索引只读取一行_36

 

 

 

 9.1 点击错误的超链接

pd 数据索引只读取一行 power query 索引_pd 数据索引只读取一行_37

 

 

 

 9.2 使用try函数

使用该函数的前提是知道错误列

字段“错误.HasError”为TRUE,则为错误选项;

建议进行排序,因为PP室友行数显示限制的,如果TRUE在行数范围之外,则无法筛选出来。

如果配合索引,则可精确定位错误行

pd 数据索引只读取一行 power query 索引_pd 数据索引只读取一行_38

 

 


 

 

 

 

参考文档:

https://pqfans.com/1104.html

https://docs.microsoft.com/zh-cn/powerquery-m/