• Power BI Power Query 认识M语言中的结构性数据


    使用Power Query进行数据分析的时候,我们除了经常使用基础数据类型之外,还需要使用到结构性数据,在Power Query中我们主要接触的结构性数据包括:列表、记录和表。

    我们首先在Power Query中建立一个空查询

    打开Excel2016,依次点击“数据/从其他源/空白查询”,如果你当前正处于Power Query 编辑器中,那么可以在Power Query界面右侧找到“新建源/其他源/空查询”按钮

    1 1

    首先我们来创建一个列表,在公式编辑栏中输入内容:

    = {1, 2, 3}

    1

    我们得到一个列表,请注意图中左侧各个结构性数据的图标显示异同。列表具有如下特征:

    1、使用成对的花括号标识

    2、列表中各个元素使用英文逗号分隔

    3、列表中的元素不一定是相同数据类型,例如下面的列表包含数字和字符

    1

    4、列表中的元素可以使用基本数据类型,也可以嵌套使用结构性类型,例如下面的列表嵌套了一个列表元素

    1

    接下来我们来看记录,通过前面的方式我们重新创建一个空查询,然后在公示栏输入如下的公式

    = [ A = {1,11}, B =2, C = {3} ]

    1

    我们得到了一个记录,记录的特点如下:

    1、使用成对的中括号标识

    2、记录中的各个元素之间使用英文逗号分隔

    3、记录实际是键值对的集合,其中的每个元素是一个键值对,元素键值对表达式,左侧是该元素的键名,右侧是该元素的值,中间使用等号连接

    A = {1,11}

    4、记录中,每个元素的值可以使用基础数据类型,也可以使用结构性数据类型

    最后我们来看看,表的创建我们需要借助于函数才能创建,PQ里面没有为表配置像列表和记录那样的简写符

    PQ里面有很多的M函数可以创建表,其基本的结构是Table.FromXXX,这里我使用Table.FromRows来创建个一个表,其他函数,请查官方文档

    = Table.FromRows({ {1, "Bob", "123-4567"},{2, "Jim", "987-6543"}},{"CustomerID", "Name", "Phone"})

    1

    通过观察以上函数的结构可以发现:

    1、表的数据内容通过Table.FromRows函数的第一个参数指定,该参数是一个使用列表作为其元素的列表(嵌套列表)

    2、表的标题通过Table.FromRows函数的第二个参数指定,该参数是一个字符串元素构成的列表。

    表虽然没有简写的标识符,但是创建表的函数有个简写方式,如下

    = #table({"x", "x^2"}, {{1,1}, {2,4}, {3,9}})

    1

    标题列表作为函数的第一个参数,嵌套列表作为函数的第二个参数

    最后需要讨论一下如何访问结构性数据内部的元素

    对于列表和表数据类型,可以通过表达式x{y}的形式来访问子元素:

    1、x是列表,y是整数:y表示位置索引,访问的是列表x中的第y+1个元素,如果不存在则返回错误

    2、x是表,y是整数:y表示行索引,访问的是表x中的第y+1行,如果不存在则返回错误

    3、x是表,y是记录:记录y中键值与表x列名相同,且值对应相等的行记录,未找到返回错误

    {"a","b","c"}{0}                          // "a"
    #table({"A","B"},{{0,1},{2,1}}){0}        // [A=0,B=1]
    #table({"A","B"},{{0,1},{2,1}}){[A=2]}    // [A=2,B=1]

    可以使用x{y}?表达式,在未找到结果是,返回空值,但是如果找到了多个匹配项,仍然会返回错误

    {true, false}{2}?                          // null
    #table({"A","B"},{{0,1},{2,1}}){[B=3]}     // null
    #table({"A","B"},{{0,1},{2,1}}){[B=1]}     // error

    对于记录数据类型,可通过表达式x[y]形式访问子元素,同样它也有x[y]?的形式

    1、x是记录,y单元素键名:找出记录x中键名为y的值,如果未找到键名将返回错误

    [A=1,B=2][B]          // 2
    [A=1,B=2][C]          // error
    [A=1,B=2][C]?         // null

    2、x是记录,y是多元素记录:

    [A=1,B=2][[B]]        // [B=2]
    [A=1,B=2][[C]]        // error
    [A=1,B=2][[B],[C]]?   // [B=2,C=null]
  • 相关阅读:
    failed to load the jni shared library jvm
    记一个简单的保护if 的sh脚本
    linux添加自定义的命令!
    fc-san
    DDN
    Everything search syntax
    启动 Apache2.2 的问题
    tomcat4 请求的处理——初步分析
    404 Not Found !
    浏览器 的 session 如何保持?!
  • 原文地址:https://www.cnblogs.com/alexywt/p/11388857.html
Copyright © 2020-2023  润新知