数据可视化之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生成日期表就使用了自定义函数,

可以点击图片查看该文,了解利用自定义函数制作日期表的用法。
通过以上的介绍,基本可以对自定义函数有个初步的了解,其实自定义函数的用法很广泛,以后在进行复杂的数据处理时还会经常用到它。
数据可视化之PowerQuery篇(三)学会使用PowrQuery的自定义函数的更多相关文章
- 数据可视化之PowerQuery篇(四)二维表转一维表,看这篇文章就够了
https://zhuanlan.zhihu.com/p/69187094 数据分析的源数据应该是规范的,而规范的其中一个标准就是数据源应该是一维表,它会让之后的数据分析工作变得简单高效. 在之前的文 ...
- 数据可视化之PowerQuery篇(十九)PowerBI数据分析实践第三弹 | 趋势分析法
https://zhuanlan.zhihu.com/p/133484654 本文为星球嘉宾"海艳"的PowerBI数据分析工作实践系列分享之三,她深入浅出的介绍了PowerBI ...
- 数据可视化之PowerQuery篇(七)Power Query应用技巧:批量更改列名
https://zhuanlan.zhihu.com/p/130460772 今天分享一个PowerQuery的小技巧,导入到PowerBI中的数据,如果想要更改数据的列名,可以在PQ编辑器中直接双 ...
- 数据可视化之PowerQuery篇(六)PowerQuery技巧:批量合并Excel表的指定列
本文来源于一个星友的问题,他有上百个Excel表格,格式并不完全一样,列的位置顺序也不同,但每个表都有几个共同列,这种情况下,能不能通过Power Query把这些表格共同的列批量合并呢? 当然是可以 ...
- 数据可视化之PowerQuery篇(二)这个方法帮你快速计算列
https://zhuanlan.zhihu.com/p/81846862 PowerQuery中,对两列或者多列的计算一般通过添加自定义列来实现,以下表为例, 如果需要1月和2月数据的合计,可以添加 ...
- 数据可视化之PowerQuery篇(十八)Power BI数据分析应用:结构百分比分析法
https://zhuanlan.zhihu.com/p/113113765 本文为星球嘉宾"海艳"的PowerBI数据分析工作实践系列分享之二,她深入浅出的介绍了PowerBI ...
- 数据可视化之PowerQuery篇(十六)使用Power BI进行流失客户分析
https://zhuanlan.zhihu.com/p/73358029 为了提升销量,在不断吸引新客户的同时,还要防止老客户离你而去,但每一个顾客不可能永远是你的客户,不可避免的都会经历新客户.活 ...
- 数据可视化之PowerQuery篇(十二)客户购买频次分布
https://zhuanlan.zhihu.com/p/100070260 商业数据分析通常都可以简化为对数据进行筛选.分组.汇总的过程,本文通过一个实例来看看PowerBI是如何快速完成整个过程的 ...
- 数据可视化之PowerQuery篇(十一)使用Power BI进行动态帕累托分析
https://zhuanlan.zhihu.com/p/57763423 上篇文章介绍了帕累托图的用处以及如何制作一个简单的帕累托图,在 PowerBI 中可以很方便的生成,但若仅止于此,并不足以体 ...
随机推荐
- 安装并配置Samba
1. 安装 samba ~$sudo apt-get install samba 2. 修改 samba 的配置文件 ~$sudo gedit /etc/samba/smb.conf 添加如下内容 [ ...
- JVM源码分析之Object.wait/notify(All)完全解读
概述 本文其实一直都想写,因为各种原因一直拖着没写,直到开公众号的第一天,有朋友再次问到这个问题,这次让我静心下来准备写下这篇文章,本文有些东西是我自己的理解,比如为什么JDK一开始要这么设计,初衷是 ...
- Sharding-JDBC 快速入门第一课
1. 概述 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC.Sharding-Proxy和Sharding-Sidecar(计划中)这 ...
- vue 深度拷贝 除去空的参数
// 去除数组里面为空的属性及子数组 export function deepCopy (source) { var result = [] //var result = {} for (var ke ...
- Windows 安装RabbitMQ后,启动服务就自动停止
在做SpringCloud消息总线的时候,需要用到RabbitMQ,于是在windows上下载安装了一个,erlang的安装包不是官网下载的,而是朋友分享给我的,没注意它的版本(9.3). 安装完成后 ...
- linux shell编程子bash变量
参考视频:https://www.imooc.com/u/279399/courses?sort=publish https://www.imooc.com/video/6516 慕课网 用户的自定义 ...
- Javascript的单线程和异步编程
运行时概念 下面的内容解释了一个理论上的模型.现代 JavaScript 引擎着重实现和优化了描述的几个语义. 可视化描述 栈 函数调用形成了一个栈帧. function foo(b) { var a ...
- Idea配置JRebel插件的详细配置及图解
Idea最新JRebel插件的详细配置及图解 地址:https://blog.csdn.net/nyotengu/article/details/80629631#commentBox Ⅰ安装jreb ...
- 【转载】张一鸣:为什么 BAT 挖不走我们的人才?
很多企业失败的时候,总说是政策的变化.市场的变化.消费者需求的变化.技术发展的变化等等,导致了失败,其实这都是瞎说,归根结底还是人的原因,都是因为你招的人不行.可见,人才对于一个企业的重要性. 互联网 ...
- Python实用笔记 (13)函数式编程——返回函数
函数作为返回值 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n ret ...