重要!很重要!非常重要!理解PQ里的数据结构(四、根据内容定位及筛选行)

2021-08-31 10:13:02 浏览数 (1)

小勤:有没有办法像筛选一样去定位一个表里的信息呢?而不是非得用行标,比如定位姓名为“大海”的行(记录Record)

大海:PQ里实际提供了根据内容直接定位记录的机制,但是,因为是对记录的定位,所以仅针对有唯一记录的情况,如果是多个记录的话,实际上就不是定位的概念,而是筛选的概念,除了操作筛选功能来实现之外,可以用函数Table.SelectRows来实现。

小勤:那记录定位的方法是怎样的?

大海:比如我们定位姓名为“小勤“的记录,是唯一的,可以用公式=源{[姓名=“小勤”]}

即用{[字段名=内容]}的判断方式代替行标。

小勤:那定位“大海”的试试?

大海:咱们修改一下:

你看,出错了:

小勤:是不是这个意思?表名加大括号内行标的方式,实际上大括号内应该是一个能唯一标识某行内容的条件,如果不是唯一的话,就会出错。

大海:对的。所以,反过来说,只要能标识出唯一的值,那么就可以正确定位,比如表里的大海有2行,但如果加上数量这个条件,就能定位到唯一值,如定位到姓名为“大海”且数量为20的行(记录):

结果就是对的:

小勤:那如果是要得到筛选的内容呢?比如获得所有姓名为“大海”的行。

大海:可以用函数Table.SelectRows来实现,比如从“源”表里获得所有姓名为“大海”的行,公式= Table.SelectRows(源,each [姓名]="大海")

函数Table.SelectRows,即根据条件筛选出一个表里的符合条件的行

用法:

  • Table.SelectRows(表, 筛选条件)

参数:

  • 表:要进行筛选的表
  • 筛选条件:用于筛选行的条件

结果如下:

小勤:原来定位行跟筛选行还有这样的差别,定位行实际得到的是一个行记录,而筛选实际得到的是一张表

大海:说的很对。

0 人点赞