小勤:有没有办法像筛选一样去定位一个表里的信息呢?而不是非得用行标,比如定位姓名为“大海”的行(记录Record)
大海:PQ里实际提供了根据内容直接定位记录的机制,但是,因为是对记录的定位,所以仅针对有唯一记录的情况,如果是多个记录的话,实际上就不是定位的概念,而是筛选的概念,除了操作筛选功能来实现之外,可以用函数Table.SelectRows来实现。
小勤:那记录定位的方法是怎样的?
大海:比如我们定位姓名为“小勤“的记录,是唯一的,可以用公式=源{[姓名=“小勤”]}:
即用{[字段名=内容]}的判断方式代替行标。
小勤:那定位“大海”的试试?
大海:咱们修改一下:
你看,出错了:
小勤:是不是这个意思?表名加大括号内行标的方式,实际上大括号内应该是一个能唯一标识某行内容的条件,如果不是唯一的话,就会出错。
大海:对的。所以,反过来说,只要能标识出唯一的值,那么就可以正确定位,比如表里的大海有2行,但如果加上数量这个条件,就能定位到唯一值,如定位到姓名为“大海”且数量为20的行(记录):
结果就是对的:
小勤:那如果是要得到筛选的内容呢?比如获得所有姓名为“大海”的行。
大海:可以用函数Table.SelectRows来实现,比如从“源”表里获得所有姓名为“大海”的行,公式= Table.SelectRows(源,each [姓名]="大海")
函数Table.SelectRows,即根据条件筛选出一个表里的符合条件的行
用法:
- Table.SelectRows(表, 筛选条件)
参数:
- 表:要进行筛选的表
- 筛选条件:用于筛选行的条件
结果如下:
小勤:原来定位行跟筛选行还有这样的差别,定位行实际得到的是一个行记录,而筛选实际得到的是一张表。
大海:说的很对。