zoukankan      html  css  js  c++  java
  • 数据可视化之PowerQuery篇(三)学会使用PowrQuery的自定义函数

    https://zhuanlan.zhihu.com/p/64415763

    使用Power Query进行复杂一些的数据处理,离不开M函数,目前已经有超过700个函数了,基本上各式各样的数据处理需求都可以使用M函数实现,如果你觉得这些还不够,或者使用起来不是很方便,也可以在PQ中自定义函数。

     

    自定义函数的语法

     

    如果在M编辑器中看到这个符号: => ,就是有自定义函数在里面,自定义函数的基本语法是:

     

    函数名=(参数1,参数2,参数3……)=>表达式

     

    函数名可以任意写,只要和M语言里的关键字不要重复就行,参数至少有1个,放在括号中,如果有多个参数,以逗号分隔,=>后面就是自定义函数的表达式。

     

    为了保证结果的准确性,可以预先限定参数的数据类型,假如有两个参数a和b,限制为数值型,可以这样写:

     

    函数名=(a as number,b as number)=>表达式

     

    当然不限制也是可以的,不限制就是可以为任意类型。

    参数还可以是可选的,在参数前加上optional就可以了,比如有两个参数,第一个参数a,第二个参数b是可选参数,自定义函数这样写:

     

    函数名=(a,optional b)=>表达式

     

    这样只要输入参数a,无论是否输入参数b都可以调用这个自定义函数了。

     

    自定义函数示例

     

    我们先在Power Query编辑器中创建一个简单的自定义函数,新建一个空查询,在编辑器重输入:= (x)=>{1..x},确定后出现参数调用窗口,

     

     

    这个自定义函数只有一个参数x,生成从1到x的序列,指定为自定义函数后,左边的空查询类型就变成了fx,名称可以根据自定义函数的含义进行重命名,这里把函数名改成mylist。

     

    参数x输入10,点击"调用":

     

     

    就生成了从1到10到一个序列。

    自定义函数的参数不是每次都要手动输入进去,同样可以调用其他数据,比如将上面的这个序列转化为表,然后添加一个自定义列=mylist([Column1])

     

     

     

    这个自定义列的每一行数据,就是从1到第一列数据的序列,

     

     

     

    从这里也可以看出,自定义函数mylist可以和其他标准的M函数一样使用。

     

    自定义函数也并不是一定要提前定义好,还可以在需要的时候随时自定义,并立即使用,还是上面的这张表,需要对第一列累计求和,即计算从第一行到当前行的合计数。

     

    添加自定义列,公式可以这样写:

     

    累计=List.Sum(Table.SelectRows(转换为表,(x)=>x[Column1]<=[Column1])[Column1])

     

     

     

     

    然后就生成一列累计数,和预想的一致,

     

     

     

     

    其中(x)=>x[Column1]<=[Column1]就是一个自定义函数,该自定义函数作为Table.SelectRows的条件返回小于等于当前行的所有行,然后对筛选出的这些行的[Column1]列,使用List.Sum来求和。

    不过这种在某个步骤中使用的自定义函数,只能供该查询使用,而前面生成的自定义函数mylist,可以供该文件内的所有查询使用。

    其实前面的文章中也使用过自定义函数,比如使用M生成日期表就使用了自定义函数,

     

     

    可以点击图片查看该文,了解利用自定义函数制作日期表的用法。

    通过以上的介绍,基本可以对自定义函数有个初步的了解,其实自定义函数的用法很广泛,以后在进行复杂的数据处理时还会经常用到它。

  • 相关阅读:
    nginx配置vue项目
    TexturePacker工具对素材打包
    java使用动态链接库
    java.lang.UnsatisfiedLinkError: no A in java.library.path
    pi4j与Spring Boot
    迪文屏串口修改数据
    迪文屏常用串口指令
    postcss-px-to-viewport移动端布局
    vue-lazyload延迟加载
    fastclick延迟300ms
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12843013.html
Copyright © 2011-2022 走看看