小勤:上次在《理解PQ里的数据结构(二)》里大概了解了行、列、“单元格”的基本引用方法,但只能引用当前行,实际上在做数据处理时经常要取其他行的内容和当前行做对比,怎么做呢?

大海:嗯,这在Excel里处理数据的时候的确是个常见的内容,比如当前行和上一行内容的比较等,经常出现。这里我们举个例子来说明一下怎么灵活地实现引用其他行来与当前行的内容进行比较。我们先把数据放进PQ里。

重要!很重要!非常重要!理解PQ里的数据结构(三、跨行引用)_数据处理


假设我们要判断姓名列当前行是否与上一行的内容一致,这时就需要在当前行引用上一行的内容。在Excel里只要直接选择单元格就行了,但PQ里需要借助索引列来定位。我们首先添加索引列:


重要!很重要!非常重要!理解PQ里的数据结构(三、跨行引用)_自定义_02


有了索引列,我们就可以根据索引来获得不同位置的行了,比如我们要取上一行的姓名,添加自定义列,公式=​已添加索引{[索引]-1}[姓名]

重要!很重要!非常重要!理解PQ里的数据结构(三、跨行引用)_数据处理_03

这样,我们通过{[索引]-1}的方式取得了上一行的内容,结果如下:


重要!很重要!非常重要!理解PQ里的数据结构(三、跨行引用)_数据处理_04


当然,其中第1行因为没有上一行,所以出现了错误值,如果需要对错误值进行处理,可以加上try…otherwise…语句(参考文章《​​PQ-M及函数:试一下…错了的话再…​​​》),将上一步骤的公式修改为=​try 已添加索引{[索引]-1}[姓名] otherwise ""


重要!很重要!非常重要!理解PQ里的数据结构(三、跨行引用)_数据_05


结果如下,第一行错误值已被置空:

重要!很重要!非常重要!理解PQ里的数据结构(三、跨行引用)_数据_06

小勤:嗯。理解了,实际就是加个索引列,然后就可以通过索引列增加或减少一定的量作为行标实现动态的引用。

大海:对的。