Lazy loaded imagePower Query (M语言) 中,如何从三大核心容器(列表、记录、表)中获取数据(钻取)?

type
status
date
slug
summary
tags
category
icon
password
notion image

(本文3000字,阅读需要8分钟左右)
今天以下表来给大家开启M函数的第一节正课:在Power Query(M语言)中,如何从三大核心容器(列表、记录、表)中获取数据(钻取)。
notion image
进入Power Query编辑器后台进行以下操作,在公式栏里输入下面的代码,亲自体验一下“指哪打哪”的感觉:
notion image

1. 基础取值:取“整列”和“整行”

  • 取“姓名”这一整列 (List)
    • 符号:[ ] (中括号取列)
    • 代码= 源[姓名]
    • 结果:得到一个列表 { "张三", "李四", "王五" }。
    • 直观理解:就像把 Excel 的 A 列单独拿出来,变成了一个清单。
  • 取“第一行”这一整条记录 (Record)
    • 符号:{ } (大括号取行,注意下标是从0开始)
    • 代码= 源{0}
    • 结果:得到一条记录 [ 姓名="张三", 年龄=30, 班级="二班", ... ]。
    • 注意:虽然界面左边显示的是 1,但在 M 函数里,第一行永远是 0

2. 坐标定位:取具体的“单元格”

比如我们要取 第二行(李四)的年龄(35)。这就是我们在 Excel 里常说的 B2 单元格的值。这里有两种走法,结果一模一样:
  • 走法 A:先取行,再取列 (推荐,逻辑更顺)
    • 代码= 源{1}[年龄]
    • 解读:先找到下标为 1 的行(也就是李四那一行记录),再从这行记录里拿出 [年龄] 字段。
    • 结果:35
  • 走法 B:先取列,再取行
    • 代码= 源[年龄]{1}
    • 解读:先拿到 [年龄] 这一整列数据(变成一个列表),再从这个列表里拿第 2 个数。
    • 结果:35

3. 精准取值(不依赖行号)

这是最有价值的一点!假设你想知道 “王五” 的班级,但你担心明天数据刷新后,王五可能不在第 3 行了。这时候千万别用 {2}。
  • 场景:查找“姓名”是“王五”的那一行,取出他的“班级”。
  • 代码= 源{[姓名="王五"]}[班级]
  • 解读
      1. 源{[姓名="王五"]}:这部分就像 Excel 的 VLOOKUP。意思是:去 源 表里找,找到那个 [姓名] 字段等于 "王五" 的记录(Record)。
      1. ... [班级]:从找到的那条记录里,提取 [班级] 的值。
  • 结果:"六班"
  • 优势:无论王五跑到第几行,只要他叫王五,这个公式永远能抓到他的班级!

4. 多层嵌套取值(套娃模式)

把这个表在Excel打开后,选择“数据”,“来自表格/区域”,然后再看Power Query的公式编辑栏,就可以见到已经展示了一个绝佳的“多层嵌套”案例!
notion image
请看你截图中最上面的公式:
= Excel.CurrentWorkbook(){[Name="表1"]}[Content]
我们来像剥洋葱一样拆解它,看看它是怎么拿到你眼前这张表的:
  1. 第一层Excel.CurrentWorkbook()
      • 这会抓取当前 Excel 文件里所有的表。结果是一个大列表(包含很多张表的信息)。
  1. 第二层{ [Name="表1"] }
      • 这是在取行(精准取值)。它在那个大列表里寻找:名字叫 "表1" 的那一行记录。
  1. 第三层[Content]
      • 这是在取字段。它取出了那行记录里名为 Content 的内容。而这个内容,恰恰就是你看到的这张具体的二维表!
如果要来个终极套娃,取这张表里“张三”的名字,代码连起来就是:
= Excel.CurrentWorkbook(){[Name="表1"]}[Content]{0}[姓名]
  • Excel.CurrentWorkbook() -> 抓所有对象
  • ...{[Name="表1"]} -> 锁定表1这条记录
  • ...[Content] -> 拿出里面的表数据
  • ...{0} -> 拿这张表的第一行(张三的记录)
  • ...[姓名] -> 拿这条记录的姓名

5.与从3大容器取值相关的FAQ问题

 

如果本篇文章对您有帮助或启发,请帮我们点赞、转发、推荐、关注,让更多想转型财务BP、锻造数据分析和可视化洞察能力的财务同行们看到,关注【老汪洞察】,不迷路!
若想获得更多制造业成本本管控、核算、全面预算、业财融合方面的落地实操干货,加入我们的大本营是你的不二之选,快点击下方卡片看看吧!
温馨提示
🙏🏻
如果您不想错过【老汪洞察】的文章,请将我们设为"星标",这样每次最新文章推送才会第一时间出现在您的订阅列表里。 方法:点击文章页面左上角蓝色文字“老汪洞察”进入主页,点击关注后,再点主页右上角"...",然后选择"设为星标",即可完成,感谢您的支持。
 
上一篇
完全免费、无需编程基础,使用 Notion + GitHub + Vercel 来搭建网站(博客)的教程。
下一篇
FAQ 001:Power Query (M语言) 中,[]和{}在不同场景下两种用法
Loading...
文章列表
让财税成为经营的力量
电脑与网络
从Power Query到Power BI,入门到精通
知识运用