本节重点:搞清 Power Query 中的表结构

    下面举例说明这个 PQ 的表结构:

    (2条消息) 30、Power Query-搞清Power Query中的表结构_少年休闲海-CSDN博客 - 图1

    我们随便选中一个单元格,右击,选择 “深化”。

    (2条消息) 30、Power Query-搞清Power Query中的表结构_少年休闲海-CSDN博客 - 图2

    显示了这个单元格的值,然后我们可以观察这个 “编辑栏”,“\= 更改的类型 {9}[总分]”。

    这个什么意思呢,“[总分]”我们好理解,是上图中的 “总分” 一列,那么 “{9}” 呢,这里不卖关子了,其实就是索引号为 “9” 的行。

    这里我们需要正视一个概念:Power Query 里面的行的索引是从 0 开始依次排序的

    那么很明显咯,这个 “更改的类型” 就是表名咯?

    那为什么不应该是 “表 1”?

    原因可以从 “高级编辑器” 里面得到答案。

    (2条消息) 30、Power Query-搞清Power Query中的表结构_少年休闲海-CSDN博客 - 图3

    1. let
    2. = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    3. 更改的类型 = Table.TransformColumnTypes(源,{{"姓名", type text}, {"班级", type text}, {"语文", Int64.Type}, {"数学", Int64.Type}, {"英语", Int64.Type}, {"总分", Int64.Type}}),
    4. 总分 = 更改的类型{9}[总分]
    5. in
    6. 总分

    这里很明显经过了一系列的操作,将“表1”改为了“源”,又将“源”改为了“更改的类型”。
    我们去掉“[总分]”,这里显示的第10行整行的记录。
    (2条消息) 30、Power Query-搞清Power Query中的表结构_少年休闲海-CSDN博客 - 图4
    若我们去掉“{9}”则显示“总分”一列下面所有的值。
    (2条消息) 30、Power Query-搞清Power Query中的表结构_少年休闲海-CSDN博客 - 图5
    并且,这个“{9}”和“[总分]”顺序颠倒都不影响结果
    然后我们新建一个空查询来验证一下这个结果(开始——新建源——其他源——空查询)。
    (2条消息) 30、Power Query-搞清Power Query中的表结构_少年休闲海-CSDN博客 - 图6

    直接输入求得“表1”的第九行记录(= 表1{8})。
    (2条消息) 30、Power Query-搞清Power Query中的表结构_少年休闲海-CSDN博客 - 图7

    下面我们就通过一个简单的综合的示例来巩固这个知识点。
    数据源如下:
    (2条消息) 30、Power Query-搞清Power Query中的表结构_少年休闲海-CSDN博客 - 图8

    查询条件如下:
    (2条消息) 30、Power Query-搞清Power Query中的表结构_少年休闲海-CSDN博客 - 图9

    我们要查询,比如姓名中包含“李”字,或者班级是“1班”的童鞋考试记录。
    这个时候我们需要将数据源表以及条件查询表都引入到PQ界面中。
    (2条消息) 30、Power Query-搞清Power Query中的表结构_少年休闲海-CSDN博客 - 图10

    首先按我们需要的结果进行手动筛选“数据源”。
    (2条消息) 30、Power Query-搞清Power Query中的表结构_少年休闲海-CSDN博客 - 图11

    (2条消息) 30、Power Query-搞清Power Query中的表结构_少年休闲海-CSDN博客 - 图12

    其实这样出来的结果是“与”(and)的效果,我们暂且不管,直接甩出代码,进入“高级编辑器”。
    (2条消息) 30、Power Query-搞清Power Query中的表结构_少年休闲海-CSDN博客 - 图13

    即刚刚操作的两步筛选就是上图中框出来的部分,按我们上面所学的表结构进行填充。
    将“李”替换成:多条件查询[姓名]{0}
    将“1班”替换成:多条件查询[班级]{0}
    上面这两个替换仅仅是第一步,目前的结果还是保持原样的。

    let
        源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
        更改的类型 = Table.TransformColumnTypes(源,{{"姓名", type text}, {"班级", type text}, {"语文", Int64.Type}, {"数学", Int64.Type}, {"英语", Int64.Type}, {"总分", Int64.Type}}),
        筛选的行 = Table.SelectRows(更改的类型, each Text.Contains([姓名], 多条件查询[姓名]{0} ) ),
        筛选的行1 = Table.SelectRows(筛选的行, each ([班级] = 多条件查询[班级]{0} ) )
    in
        筛选的行1
    


    我们的最终目的是将查询条件以“或”(or)的形式进行展示。
    我们粗略的看了这两步筛选的代码,发现了共通点,可以进行合并。
    即:
    (2条消息) 30、Power Query-搞清Power Query中的表结构_少年休闲海-CSDN博客 - 图14

    将此部分的代码移至上部分,并且以“or”连接,下面的“筛选的行1 = Table.SelectRows(筛选的行, each ([班级] = 多条件查询[班级]{0}) )”一串代码进行删除。
    这里有两个注意点:
    1、代码的结尾是没有“,”的,所以我们需要将“筛选的行”最后的“,”去掉;
    2、“in”后面接的应该是最后一条代码的名称,所以需要将“筛选的行1”替换成“筛选的行”。

    let
        源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
        更改的类型 = Table.TransformColumnTypes(源,{{"姓名", type text}, {"班级", type text}, {"语文", Int64.Type}, {"数学", Int64.Type}, {"英语", Int64.Type}, {"总分", Int64.Type}}),
        筛选的行 = Table.SelectRows(更改的类型, each Text.Contains([姓名], 多条件查询[姓名]{0}) or ([班级] = 多条件查询[班级]{0}) )
    in
        筛选的行
    

    这样即满足了我们的要求,同样的,若查询的结果需要“与”(and)操作,我们即替换为“and”就可以了。
    (2条消息) 30、Power Query-搞清Power Query中的表结构_少年休闲海-CSDN博客 - 图15