type
status
date
slug
summary
tags
category
icon
password
是否阅读
是否阅读
Origin
URL
和大多数语言一样,PQ 是有数据类型和数据结构的,但是它又不像栈 / 队列 / 数组 / 链表 / 图 / 树 / 堆 / 散列表那样那么丰富。M 语言的数据是以序列 / 记录 / 表(List/Record/Table)的形式储存的,值(Values)有不同的类型(Type)。
对于概念,我倾向使用官方文档,但这并不意味着,官方文档的解释就是最容易理解的,也不意味着官方文档的内容是完全正确的,可能会有打字错误,可能会有案例错误,可能会有代码无法运行的 BUG,还是需要我们自己实际使用来发现。
Value
在官方文档中是被这样解释的:A single piece of data is called a value。(A value is data produced by evaluating an expression。)
如果 a=1,b=2,那么表达式 a+b 的值是 3;
如果 a=“Hello”,b="“,c=”world!“,那么 a&b&c 的值就是 “Hello world!”。
又一般可以分为两大类:原始值(Primitive values)和结构型值(Structured values);
notion image
有了的概念,接下来就可以对值进行分类了:
notion image
1.M 语言对数据类型要求严格,工作表里面可以进行 “强制转换”(例如 1+“1”=2),但是在 M 语言中会报错:“+” 无法应用于 Number 和 Text 之间;
2.Null 这个概念有点像数学里面的空集(∅),很多人容易将∅和 {∅} 混淆,同样,很多人会将 Null 和 “” 或者 {Null} 和{}混淆。Null 是空,"" 是长度为 0 的字符串,这是不同的概念。
List,Record,Table
1. 序列(List)
从索引 0 开始,并使用大括号 “{}” 将一系列值括起来的有序序列;
notion image
从我给的定义中可以看到,list 有索引,并且从 0 开始,因此也是有序性的:
notion image
索引可以用来提取 list 中指定位置的值:
提取表达式——{a,b,c,……}{x} 表示提取序列 {a,b,c,……} 中索引为 x 的值。
notion image
和字符串一样,我们可以求 list 的长度(对值的个数进行计数):
notion image
如果 list 中的值也是 list,就形成了嵌套,可以进行连续提取值的操作:
notion image
工作当中,我们常常需要自己构建一个 list,可能里面包含大量连续的值,如果手动输入,将是一件令人绝望的事,好在 M 语言提供了一种类似 Python 里面 range 的快速构造 list 的方法:
notion image
常用的构造 list 如下:
notion image
(注:符合 Unicode 编码顺序,和 ASCII 码的顺序有一定出入)
  1. 记录(Record)
用 “[ ]” 将成对的字段名 / 字段值括起来构成的无序信息组(Fileds);
notion image
无序的意思是仅改变字段的顺序,record 值不变:
notion image
官方文档提到的有序序列 ordered sequence 如何理解?这里需要引入一个还没讲的构造 table 的方法:
当我输入:
时,结果是 FASLE,在表里面 record 充当了列标题的角色,而表里面行和列都是有序的。
notion image
notion image
notion image
字段名是标识符并且在一个 record 里面是唯一的,记录字段(包含字段名、字段值)与字段之间用半角逗号 “,” 隔开。
标识符是独立的值,例如 “Hello,world!” 就不可以直接用做标识符:
notion image
因为中间有逗号,这时需要使用构造标识符的方法——#"",见下面的例子:
notion image
Record 的提取:[a=1,b=2,……][a] 代表提取记录中 a 字段名所对应的值。
Record 的嵌套:字段值为记录 / 序列时,就形成了嵌套。
嵌套的连续提取举例:
notion image
  1. 表(Table)
表是一组被组织成行与列的值的集合。
notion image
我们可以用 #table 来构造一个表:
1.#table({标识符},{序列}):
notion image
2.#table(type table [records=types],{lists}):
notion image
使用方法 2,但是没有正确输入 type 会报错:
notion image
输入了 type,但是值的 type 对不上会正常显示:
notion image
综上所述,构造表的方法 1 比较简单,易于使用,方法 2 细节多一些,但是更加规范;当然,实际应用时,table 基本上是现成的,很少需要你来构造。
表值的提取:
Table[字段]{索引} 或者 Table {索引} [字段]
notion image
表也是可以嵌套的——表中有表,这里就不展开了。
 
相关文章
PQ 教程_字段梳理 & 数据追加
Lazy loaded image
使用 Power Query 自定义生成日期表
Lazy loaded image
Dim_Data,你值得制作的第一张维度表
Lazy loaded image
数据汇总再不愁!傻瓜式数据汇总工具教学
Lazy loaded image
PQ 教程_文本处理的简单应用
Lazy loaded image
Power Query — 基础知识
Lazy loaded image
十分钟搞懂 SQL 数据分析Power Query — 菜单操作(2)
Loading...
木木
木木
木木不吃糖
最新发布
OneClickVirt | 一键虚拟化项目
2025-11-6
3 分钟搞定热点新闻 + 文案创作,飞书多维表格 + Coze,小白也能秒上手_飞书多维表格 热点采集 - CSDN 博客
2025-4-18
记一次使用大模型处理大量数据的过程
2025-4-14
VBA 实践 + 把大纲级别分明的 word 文档转换成横向从属结构 excel 表格
2025-1-8
用了这么多年的 Excel,你会筛选的反选功能吗?
2025-1-8
Power Query — 菜单操作(1)
2025-1-8
公告
🎉-- 感谢您的支持 ---🎉