Lazy loaded imageFAQ 001:Power Query (M语言) 中,[]和{}在不同场景下两种用法

type
status
date
slug
summary
tags
category
icon
password
notion image

(本文3000字,阅读需要8分钟左右)
notion image

FAQ-001:

之前不是说[]代表的是行的信息,{}代表的是列的信息,为何上面的取值[]取得是列,而{}取的是行的信息呢?

这确实是一个初学者最容易“晕车”的地方,这里其实并没有矛盾,因为同一个符号 [ ] 在不同的“语境”下,有两个完全不同的用法
为了彻底搞清这个,我们把它拆解为:“我是谁” 和 “我要找谁”

1. 第一种用法:定义数据结构(“我是谁”)

——这里,[ ] 代表一个“记录 (Record)”,也就是“一行数据”。
如下所述:
"记录 Record:相当于Excel中的行,在Power Query中使用中括号 [] 来表示记录。"
  • 场景:当你手写创建一个 Record 时。
  • 代码:[ 姓名="张三", 年龄=30 ]
  • 含义:这是一个包(Container),里面装了张三的信息。这个包本身就是一行数据

2. 第二种用法:取值操作符(“我要找谁”)

——这里,[ ] 代表“按名字取东西”。
这是我们在 表[姓名] 里用到的。它的核心逻辑是:告诉我名字,我给你东西。
  • 场景 A:对着“一行数据”用 [ ]
    • 假设你手里只有一行数据(一个 Record):我的行 = [ 姓名="张三", 年龄=30 ]
    • 你说:我的行[姓名] (嘿,把叫“姓名”的那个值给我)
    • 结果:得到 "张三" (一个值)。
  • 场景 B:对着“一张表”用 [ ]
    • 假设你手里是整张表(Table)。表里虽然有很多行,但只有是有名字的。
    • 你说:源[姓名] (嘿,把这张表里叫“姓名”的那一部分给我)
    • 关键点来了:对于一张表来说,叫“姓名”的部分,是整整一列
    • 结果:得到 List { "张三", "李四", "王五" } (一列数据)。

总结对比表(防止混淆)

符号
作用对象
含义
结果
{ } 大括号
列表 / 表
按位置(下标)找
给我第 N 个东西(取行)
[ ] 中括号
记录 / 表
按名字(字段)找
给我叫 XXX 的东西(取列)

回头看你的那个“精准定位”公式

= 源{[姓名="王五"]}
这个公式最“坏”,它把两种用法混在一起了:
  1. 里面的 [姓名="王五"]
      • 这是第一种用法。它定义了一个**“记录”**(Row)。
      • 意思说:我要找一个长成 [姓名="王五", ...] 这样样子的记录。
  1. 外面的 { ... }
      • 这是取行操作
      • 结合起来的意思:请去 源 表里,找到({})那一行,哪一行呢?就是长得像 [姓名="王五"] 的那一行。

一句话口诀

  • 看到 [ ] 单独出现(比如 [a=1]):它就是一行(Record)。
  • 看到 表名 后面紧跟 [列名]:它是取列
  • 看到 表名 后面紧跟 {数字}:它是取行
现在是不是清晰多了?[] 在表后面时,是因为我们要叫出“列的名字”,所以它变成了取列的神器。

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