龙空技术网

Table.Group 根据条件添加列

可乐之滨 113

前言:

如今我们对“js往table追加行”大概比较关切,朋友们都需要分析一些“js往table追加行”的相关知识。那么小编在网上收集了一些关于“js往table追加行””的相关资讯,希望咱们能喜欢,小伙伴们一起来学习一下吧!

本期案例是针对不同的日期,如果出现首行tp为空的情况,则新增加pl列,其值为tp或者sl列与enty列值的差。前后转换效果如下:

解题套路

1.Table.Group

解题思路:根据date进行分组,这里关键是要确定首行,因为最终的值是要落到首行位置的。因此可以通过添加索引列的方式,通过索引是否为0,[tp]{0}是否为空进行赋值。

Table.Combine(Table.Group(源,"date",{"a",each Table.RemoveColumns(Table.AddColumn(Table.AddIndexColumn(_,"index"),"pl",(x)=>if [tp]{0}=null and x[index]=0 then List.Sum([tp]&[sl])-List.Sum([entry]) else ""),"index")})[a])

这里是否可以直接使用Table.PositionOf?其实可以发现第一、二行数据是一样的,那么起结果会导致两行都会进行填列,不符合要求。

2.Table.PositionOf

解题思路:通过添加索引列对每一行进行区分,这样就能确保每个date分组的首行在使用位置函数时都显示为0,最后依据是否满足前述条件进行赋值。

let Tab=Table.AddIndexColumn(源,"idx") in Table.RemoveColumns(Table.AddColumn(Tab,"pl",each let tab=Table.SelectRows(Tab,(x)=>x[date]=[date]) in if [tp]=null and Table.PositionOf(tab,_)=0 then List.Sum(tab[sl]&tab[tp])-List.Sum(tab[entry]) else ""),"idx")

以上是本期内容。

标签: #js往table追加行