Table.ReplaceValue
官方说明:
在table的指定列中将oldValue替换为newValue。
Table.ReplaceValue( table as table, oldValue as any, newValue as any, replacer as function, columnsToSearch as list) as table
解读:
该函数为表的替换函数,简单的说就是把表中指定的对象替换为指定的值。
选中[二级]列后点击转换-替换值,把null替换为"一级":
生成的公式为:
= Table.ReplaceValue(源,null,"一级",Replacer.ReplaceValue,{"二级"})
若是对多列或全表所有列进行替换则指定第五参数即可。
= Table.ReplaceValue(源,null,"一级",Replacer.ReplaceValue,{"一级", "二级", "三级"})
那么问题来了,如果我要将二级列为null的填充为一级列的值咋办?
由于是替换为第一列的值,看语法第三参数是替换为的值可以是any对象,那能不能是相对引用呢?
联想添加列会有上下文针对每一行对象的引用,于是我尝试着写:
= Table.ReplaceValue(源,null,each [一级],Replacer.ReplaceValue,{"二级"})
居然成功了!
由于替换可以针对多列进行,于是我又改了第五参数:
= Table.ReplaceValue(源,null,each [一级],Replacer.ReplaceValue,{"二级","三级"})
再来看第四参数,类型又是function,默认的有Replacer.ReplaceValue和Replacer.ReplaceText两种。
tabletotal函数两个函数的选择主要看作用对象的类型,比如上面是替换null,而null不是text,所以只能用replacevalue。
但如果现在是要把[一级]中的"南"替换为"北",当勾选第二张图中高级选项中的"单元格匹配"时,会使用replacevalue,也就是只有作用对象="南"时才会替换,而图中没有值等于"南",不会发生任何作用。
如果不勾选,则使用的是replacetext,只要文本中包含"南",就会被替换成"北",所以"湖南"会被替换为"湖北"。
类型为function意味着我们又可以对其改造,先看下语法结构:
Replacer.ReplaceValue( value as any, old as any, new as any) as any
需要3个参数,分别为作用对象、待替换值、替换为的值,于是乎有了下面的改写:
= Table.ReplaceValue(源,null,each [一级],(value,old,new)=>if value=old then new else value,{"二级"})
或者简单点就用xyz来表示:
= Table.ReplaceValue(源,null,each [一级],(x,y,z)=>if x is null then z else x,{"二级"})
有了这个思路,我们可以使用各种其他函数对x也就是作用对象进行条件限定,实现一些复杂条件下的替换,就不一一举例了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论