iview table增加一行减少一行_PQ入门函数:Table.ReplaceValue

一、基础介绍

Table.ReplaceValue函数的官方说明如下:
Table.ReplaceValue(table as table, oldValue as any, newValue as any, replacer as function, columnsToSearch as list)

该函数实现的功能是将Table中的值替换成新值,语法翻译成汉语大致如下:

Table.ReplaceValue(要替换的Table, 要被替换的旧值oldValue, 要替换成的新值newValue, 替换规则函数, 在Table的哪列里替换)

我们首先可以通过基础操作来看一下替换效果。如下有一个Table,是不同的店仓编号对应的库存数量,要求将第一列“店仓编号”中的字母A替换成“仓库”两个字。

1bd9e1bb92e190370cfad7acbe6d17c9.png

选中第一列,点击【转换】-【替换值】,第一个对话框输入A,也就是要查找A,第二个对话框中输入“仓库”,也就是要被替换成的值,点击确定后可以看到第一列中的A都被替换成了“仓库”两个字。

673c6534f74d13f5006ca47df5962efe.png

生成的函数如下:

= Table.ReplaceValue(Source,"A","仓库",Replacer.ReplaceText,{"店仓编号"})

其意思是,在Source这个Table的{"店仓编号"}里查找“A”这个字母,替换成“仓库”,替换方式为Replacer.ReplaceText,也就是替换文本。

45d974890033a22589d5901906b74028.png

因为刚才要替换的值是文本,所以替换方式为Replacer.ReplaceText,字符串中的A都被替换成“仓库”。如果在刚才的替换界面勾选【单元格匹配】(上图中的步骤4),替换方式会变成Replacer.ReplaceValue,由于没有完全匹配的,因此替换不会成功。如果要替换的是null等非文本的,就必须要用Replacer.ReplaceValue了。如果单元格中仅有A这个字符,则可被替换为“仓库”,如下图所示:

baf9c2775260993c601b42454b23f0e0.png

如果想在多列里替换呢,在最后一个参数中添加对应的列名即可。如下图,要在第一列、第三列里都把A替换成“仓库”,最后一个参数改成{"店仓编号",  "店仓编号2"}就可以了。

59da53111f9fd06b268851a01a669649.png

= Table.ReplaceValue(Source,"A","仓库",Replacer.ReplaceText,{"店仓编号",  "店仓编号2"})

二、基础细节进一步介绍

对基础用法了解之后,通过下面的例子介绍一些细节内容。如下图,第一列是级别,后面是不同子级别,分别为级别后面加上001、002、003等,没有的子级别为空(null)。

7f432549cb70e9602f97cebe3109fdf9.png

以下函数会将各个子级别中为null的替换成“无内容”字符串。替换逻辑为:第二参数被替换值为null,第三参数为要替换成的新值“无内容”这三个字。其中Table.ColumnNames(Source)获得标题名称的List,用List.Skip去掉第一个标题后获得包含所有子级别名称的List。

= Table.ReplaceValue(Source,null,"无内容",Replacer.ReplaceValue,List.Skip(Table.ColumnNames(Source)))

75bdac0e4565025f48d3252ed9f7a746.png

以下函数会将各个子级别中为空的替换成“级别”对应的文本。替换逻辑为:被替换值为null,要替换成的内容为each [级别](也即每一行对应的[级别]内容)。

= Table.ReplaceValue(Source,null,each [级别],Replacer.ReplaceValue,List.Skip(Table.ColumnNames(Source)))

fe0358f536f44419299bd8fc304d3163.png

将null改成each null结果和上面的一样:

= Table.ReplaceValue(Source,each null,each [级别],Replacer.ReplaceValue,List.Skip(Table.ColumnNames(Source)))

如下代码将子级别1的每个元素替换成“级别”中对应的值,相当于将级别那一列复制到子级别1的那一列。

= Table.ReplaceValue(Source,each [子级别1],each [级别],Replacer.ReplaceValue,{"子级别1"})

0891395b09dbe6bc24fca757bb6d9b86.png

如下代码将子级别1的每个元素替换成“替换测试”字符串。

= Table.ReplaceValue(Source,each [子级别1],"替换测试",Replacer.ReplaceValue,{"子级别1"})

3d3e2afad3db2158b1e37defa0581af7.png

三、进阶内容介绍

重新回顾一下Table.ReplaceValue函数的各个参数:

Table.ReplaceValue(table as table, oldValue as any, newValue as any, replacer as function, columnsToSearch as list)

可以看到,被替换值可以是任意类型,替换的新值也可以是任意类型,并且替换规则是个函数,这样Table.ReplaceValue的函数应用就不仅仅限于替换个别字符串或文本了。

首先来看一下第四参数,上面用到的是Replacer.ReplaceValue这个函数,这个函数属于替换器函数,语法如下:

Replacer.ReplaceValue(value as any, old as any, new as any) as any

它的功能是将old值替换成新值new,将其放入Table.ReplaceValue函数后可以将Table.ReplaceValue函数改写成以下形式:

Table.ReplaceValue(table as table, oldValue as any, newValue as any, (value,old,new)=>函数表达式, columnsToSearch as list),其中(value,old,new)=>函数表达式是一个三参数的函数,一般也写成(x,y,z)=>函数表达式,其中z代表newValue,y代表oldValue,x代表包含要被替换值的数据,下面通过一些例子来说明。

示例一:成绩表

43108273dc73b9add4cfadca35c9113e.png

有如上两次考试成绩记录,第2次考试有些人缺考,成绩处为null。

下面的代码将第2次考试中为null的改为“缺考”,有成绩的改成“参考”。代码中的y代表第二参数each [2次],也就是第2次考试中的每个值,如果y是数值(number)就返回“参考”,否则返回“缺考”(这里z代表“参考”但未引用z)。

= Table.ReplaceValue(Source,each [2次],"缺考",(x,y,z)=>if y is number then "参考" else "缺考",{"2次"})

f54868638d40998f9274398a74e25b6a.png

将“缺考”改成z,返回结果一样。也就是说一定条件下替换时可以不去引用所有的xyz。

d68be6097fdd971113587a478ef4533c.png

下面的代码第2次考试中有成绩的改成999,没有成绩的改成“缺考”。其中z代表第三参数“缺考”的文本,y代表999,x代表第2次那一列(因为最后一个参数为{"2次"},代表要在2次那列里去判断,所以x就代表第2次那一列的值)每个要去判断是否要替换的值。替换逻辑是:x如果是null(也就是第2次那列是null),就返回z(“缺考”),否则返回y(999)。

= Table.ReplaceValue(Source,999,"缺考",(x,y,z)=>if x is null then z else y,{"2次"})

c82afcb4a2b12141b099619f0d34940d.png

下面的代码中y=“不及格”,z=“缺考”,x代表1次、2次那两列中要判断是否替换的值。判断替换的逻辑是:如果x(第1次、2次中的值)是null就返回z(缺考)。如果不是null,如果x大于等于60就替换成“及格”,否则替换成y(不及格)。

= Table.ReplaceValue(Source,"不及格","缺考",(x,y,z)=>if x is null then z else if x >=60 then "及格" else y,{"1次","2次"})

dc0366e8d021864cde5a6ca50e996952.png

下面再看个判断是否及格的例子,再次说明可以不引用y、z。有如下成绩表,科目大于等于60的返回T,小于60不及格的返回F。

a61e3a6758f4b97495491364731db5d6.png

具体代码如下,根据x的值是否大于等于60返回T或F。T和F具体在(x,y,z)=>函数规则中作出判断,y设置成0,z设置成1,或者其他的任何值都不影响结果。同时,即使引用y、z也不必原封不动的返回y和z,因为y和z可能是List、Table等(示例二中有说明)。

= Table.ReplaceValue(Source,0,1,(x,y,z)=>if x>=60 then "T" else "F",List.Skip(Table.ColumnNames(Source)))

d080a89124fab7e2c937cc8e3e46d875.png

示例二:两个表之间内容的替换

如下图,有一个仓库编号和仓库名称的对应表如下,定义为“对应表”

20d7bdc11d02ccabb1bc9eb0686ff221.png

有一个包含仓库编号、数量的表格如下,定义为“替换表”。要求将第一列的仓库编号替换成仓库名称。

9313112186a335d6a0b6145c78a0f6ed.png

替换代码如下:

= Table.ReplaceValue(替换表,each [店仓编号],对应表,(x,y,z)=>z[店仓名称]{List.PositionOf(z[店仓编号],x)},{"店仓编号"})

这里的y代表第2参数each [店仓编号],z代表“对应表”,x代表的是替换表中的【店仓编号】列内容。替换逻辑是:分别判断x在z表的【店仓编号】列的位置,然后返回z表的【店仓名称】对应位置的值。

990be95fcac2d572a561abcb78302d2b.png

由于没引用到y,因此y设置成任意值,例如999等,都不影响替换结果:

e461a1298c9c9a79332e4814bc20fed4.png

示例三:将null填充为合计值

如下图,不同仓库数量有汇总行的位置,但是没有合计数,要求将【数量】列中的null替换为该仓库的合计数量。

37e736f8fe5eec37d5f8b0e1592c37a8.png

首先,用Table.Group函数按仓库合并起来,并返回数量合计(表名定义为Group)。

= Table.Group(Source,"店仓编号",{"New",each List.Sum(_[数量])})

478f7d32c8f5dbced7b4f33df624663b.png

然后替换逻辑就和示例二中很相似了,将Group表中的数量填充到原表最后一列的null中即可,代码如下:

= Table.ReplaceValue(Source,each [店仓编号],Group,(x,y,z)=>if x is null then z[New]{List.PositionOf(z[店仓编号],y)} else x,{"数量"})

a7b7e6f2898626d2bce87769e0ed15e2.png

Table.ReplaceValue函数也属于一个相对强的函数了,在某些时候使用恰当的话能起到奇效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gprs模块ftp 远程升级_基于GPRS无线通信技术的冷链监测系统

GPRS(general packet radio service)是通用分组无线业务的简称,该技术建立在GSM网络的基础上,被称为2.5 代移动通信技术,它将无线通信与Internet 紧密结合。基于GPRS的远程数据采集系统是通过中国移动的GPRS无线通信网…

小米登录协议分析_联想前副总裁常程跳槽小米数月后,波澜再起

► 文 观察者网 吕栋今年初,联想集团前副总裁常程离职2天即加盟小米,这一举动是否违反竞业协议,双方当时曾各执一词。最近,由于联想方面在北京提起劳动仲裁,此事也再度引发舆论关注。9月21日,针对“联想与…

值从哪里来_Linux used内存到底去哪里了呢?

Linux used内存到底去哪里了呢?阅读文章之前请先思考这么个问题我ps aux看到的RSS内存只有不到30M,但是free看到内存却已经使用了7,8G了,已经开始swap了,请问ps aux的实际物理内存统计是不是漏了哪些内存没算?我有什么…

html文本最小长度,CSS中处理不同长度文本的几种小技巧

CSS中处理不同长度文本的几种小技巧【推荐教程:CSS视频教程 】当我们使用 CSS 构建布局时,考虑长短文本内容很重要,如果能清楚地知道当文本长度变化时需要怎么处理,可以避免很多不必要的问题。在许多情况下,添加或删除…

matlab 判断鼠标按下_Simulink(其他校验模块)+Matlabgui(鼠标响应事件)+Stateflow汽车运动逻辑状态(二)...

1 SimulinkSimulink-其他校验模块 如下图所示为一些其他的校验模块,分别为声明模块,离散梯度模块,输入分辨率检测模块;声明模块:当输入值非零时检测通过,当输入值中包含有0时,检测模块报错。…

鸿蒙电脑操作系统最新消息,5G专家预测:7年后鸿蒙将成全球第一大操作系统

在公布两年之后,华为的鸿蒙系统历尽千难万险,蓄势待发,即将在6月2日的线上发布会上正式发布。对于鸿蒙的前景,通信行业的 5G 专家项立刚在接受采访中,在谈到对鸿蒙的看法时,他表示他相信 7 年后鸿蒙会成为全…

vivado顶层模块怎么建_【第2040期】Node 模块化之争:为什么 CommonJS 和 ES Modules 无法相互协调...

前言又到周五了。今日早读文章由Shopee周雨楠翻译授权分享。周雨楠,Shopee金融事业群前端研发,自主学习前端技术3年,喜爱各类数字媒体技术、创意设计,多次参与翻译工作。福利:有两张门票,有需要的跟情封联系…

centos7 转换为lvm_(建议收藏)CentOS7挂载未分配的磁盘空间以及LVM详细介绍

简述本文主要介绍CentOS7下如何挂载未分配磁盘空间的详细操作步骤。LVMLVM,逻辑卷管理,英文全称Logical Volume Manager,是Linux环境下对磁盘分区进行管理的一种机制。是在硬盘分区和文件系统之间添加的一个逻辑层,为文件系统屏蔽…

基于python的图书管理系统测试步骤_Django admin实现图书管理系统菜鸟级教程完整实例...

Django 有着强大而又及其易用的admin后台,在这里,你可以轻松实现复杂代码实现的功能,如搜索,筛选,分页,题目可编辑,多选框. 简单到,一行代码就可以实现一个功能,而且模块之间耦合得相当完美. 不信,一起来看看吧!?用Django实现管理书籍的系统,并能在前台界面对书籍进行增删查改…

c# image转换为bitmap_Python PIL.Image与numpy.array之间的相互转换

前言有时我们使用PIL库读入图像数据后需要查看图像数据的维度,比如shape,或者有时我们需要对图像数据进行numpy类型的处理,所以涉及到相互转化,这里简单记录一下。方法当使用PIL.Image.open()打开图片后,如果要使用img…

计算机网络互联设备功能,计算机网络互联设备简介

一、网卡v 网络适配器,俗称网卡(NIC,Network InterfaceCard 或 Ethernet network card ) 原理:• 工作在OSI/RM中数据链路层的设备– 是局域网接入设备,单机与网络间架设的桥梁 特征:• MACaddress:– uniq…

安全使用计算机事例,计算机安全案例分析.ppt

您所在位置:网站首页 > 海量文档&nbsp>&nbsp资格/认证考试&nbsp>&nbsp安全工程师考试计算机安全案例分析.ppt35页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。下载提示1.本站不保证该用户上传的文档完整性&#…

bootstrap外不引用连接_网络编程Netty IoT百万长连接优化,万字长文精讲

IoT是什么The Internet of things的简称IoT,即是物联网的意思IoT推送系统的设计比如说,像一些智能设备,需要通过APP或者微信中的小程序等,给设备发送一条指令,让这个设备下载或者播放音乐,那么需要做什么才…

计算机基础知识与程序设计二,计算机基础与程序设计.doc

计算机基础与程序设计.doc (17页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!14.9 积分《计算机基础与稈序设计》是高等教冇H学考试工科备专业的基础课。这门课也是大部分学 生学习计算…

为什么python 为什么没有接口_python没有接口吗

接口只是定义了一些方法,而没有去实现,多用于程序设计时,只是设计需要有什么样的功能,但是并没有实现任何功能,这些功能需要被另一个类(B)继承后,由 类B去实现其中的某个功能或全部功…

画直线_在鸡面前画一条直线,为什么它会晕?西瓜视频这知识好冷告诉答案

为什么世界有那么多的未解之谜,我们无从而知,今天我们来探讨一下在鸡面前画条直线为什么会晕?你们知道吗?今天西瓜视频这知识好冷告诉你们答案,帮助你们掌握生活中所不知道的涨知识,增加我们的知识库。优秀…

永洪bi_案例分享!永洪BI助力知名三甲医院数字化转型升级

案例一:“新数据需求立刻看到结果”建院至今已有100余年的历史,现已发展成为集医疗、科研、教学为一体的某家三级甲等综合医院,通过永洪科技大数据平台,基于医院的HIS系统为数据源,分别从运营管理、药品管理、病例管理…

github mac 添加 ssh_计算机专业MAC操作技巧(二)

1、MAC 终端启动jupyter jupyter安装与配置就不赘述了,MAC终端启动jupyter有点独特。尝试了很多次都没有打开浏览器,把踩的坑总结一下:一直出现找不到浏览器的错误,在本地浏览器中一直打不开。(1)、首先先在…

计算机有必要报英语四级吗,我已工作了,现在有必要去考英语四级吗?还是 – 手机爱问...

2010-02-20有哪些是衡量好坏的重要指标呢?眼看就是春节,电视还没买回家,不是偷懒,是不晓得该如何抉择是好?需要网友帮忙。液晶显示不像PDP、CRT那样属于自发光显示。液晶面板也好,背光技术也罢。只是显示屏…

python分支结构说课_Python_3.8平台上的分支结构(模块.类.函数)_11

计算机 python语言_3.8平台上的分支结构(模块.类.函数)11上节说了,python程序有注释、缩进和程序主题。其应用软件由模块--文件*.py分割保存。模块中有变量、函数、类(数据与函数)等。模块是最基础的最小的结构要素单元。并用__main__模块演示了按照较规范的执行顺序…