(已解决) 关于 P.groupc() 第一参数的问题
大佬们,早上好!😄 😄
关于 P.groupc() 行转列时前两个参数发现有如下问题,恳请大佬们得闲时帮忙看看🙏 🙏
使用场景描述如下,需要把左表转换成右表,关系这一列中描述的户主都在每一户的第一行:
这个问题不难,方法也并不只有 groupc 这一种,只是相对来说使用 groupc 会更简洁直观,首先想到的就是用 groupc 来实现。以往的使用场景表格都很规整,要处理的那一列都是局部连续一样的,而这个场景更像是 group@i 这种相邻之间的判断,我不是说要加选项变成 groupc@i。我尝试写了一下:
首先,用 A.groupc() 时没有问题,结果符合预期:
=spl("=i=0,?.groupc([i+=if(~3==$[户主],1)];~.m(:2))",B3:D11)
可以看到,此时 A.groupc()的第一参数可以是表达式,灵活好用。但对于强迫症患者来说,表头需要另外书写,不能一起生成,略有美中不足,此时用 A.groupc() 算不得最佳实践。当然函数没有错,是方法选错了。
于是,想着用 P.groupc() 试试,结果报错了,如下所示:
=spl("=i=0,E(?).groupc(i+=if(关系==$[户主],1):序号;姓名,身份证;)",B.:.D)
此时第一参数似乎不能用表达式,识别不了列名。根据函数说明,一参可以是字段或者表达式,二参可以指定某几列,二参省略时默认为除了第一参数以外的其他字段。上图中如果把二参中的列名写全,可以出结果,说明 1 参支持表达式:
如果把 2 参省略,能跑但结果有问题:
另外,一参中的列名好像不能用 #n 的形式代替,比如:
在 2 参中写成 #n 的形式没有问题,但是在 1 参是表达式时,2 参也要写全,不能省略或者指定其中某几列:
再一个,1 参写成列名跟写成 #n 结果不同,比如 1 参不用表达式时,
写成列名时的结果如下,这个结果符合预期:
写成 #n 的形式时结果跟预期不符:
猜测主要是 P.groupc() 中第一参数的问题:
1、第一参数用表达式时,第二参数存在某种冲突;
2、第一参数不支持 #n 的形式,而第二参数支持字段名也支持#n 的形式。
测试数据如下,可复制使用:
A | B | C | |
1 | 姓名 | 身份证 | 关系 |
2 | 李大 | 101 | 户主 |
3 | 李二 | 102 | 子 |
4 | 陈大 | 201 | 户主 |
5 | 陈一 | 202 | 子 |
6 | 陈二 | 203 | 女 |
7 | 邱大 | 301 | 户主 |
8 | 王大 | 401 | 户主 |
9 | 王一 | 402 | 子 |
10 | 王二 | 403 | 子 |
以上问题恳请大佬们得闲时给予帮助!
因为这种使用场景平时碰到的还是蛮多的,SPL 洞察到位,自从创造了 P.groupc()这个函数,我就不想用其他手法解决此类问题了,这种问题的最佳实践 (Best Practice) 就是用 P/A.groupc。
谢谢🙏
P.groupc(g:G,…;F,…;N,…) 在 g 不是字段名时表达式计算处理的有点问题,此问题已修正,可更新开源代码使用。
谢谢大佬,我问题比较多😄 给你添麻烦了🙏
👍 👍 Works like Magic…the Best of the best…谢谢大佬🙏 🙏