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,一经查实,立即删除!

相关文章

android so文件崩溃,android 7.0 因为.so文件而崩溃事件解决

菜鸟进场,方圆十里,寸草不生现在基本都在用第三方的分享,但是不知道为什么,脑残的准备自己集成微博的第三方分享,本来一路躺坑都过来了,不过遇到一个奇葩的问题,软件在android N上会崩溃&#x…

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

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

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

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

html播放rtmp直播流,video.js实现浏览器播放rtmp协议直播流的问题

<!DOCTYPE html><html><head><meta charset"UTF-8"><title>使用video.js实现rtmp流的直播播放</title><!--引入播放器样式--><link href"http://vjs.zencdn.net/5.19/video-js.min.css" rel"stylesheet…

plsql打开sql窗口快捷键_巧用Navicat for MySQL的快捷键

php中文网最新课程每日17点准时技术干货分享巧妙地使用 Navicat for MySQL 快捷键&#xff0c;可以大大提高工作效率&#xff0c;本篇经验将分类介绍Navicat for MySQL快捷键。ctrlq 打开查询窗口ctrl/ 注释sql语句ctrlshift / 解除注释ctrlr 运行查询窗口的sql语句ctrlshiftr …

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

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

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

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

python将列表中反序输出_python中sorted怎么反序排列

2017-10-30 回答 【python】 sorted函数 我们需要对list、dict进行排序&#xff0c;python提供了两个方法 对给定的list l进行排序&#xff0c; 方法1.用list的成员函数sort进行排序&#xff0c;在本地进行排序&#xff0c;不返回副本 方法2.用built-in函数sorted进行排序&…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

python求两数之和的命令_python计算两个数的百分比方法

工作中遇到了要计算两个数百分比的问题&#xff0c;python 2.7 环境。 代码&#xff1a; #!/usr/bin/env python #function: 计算百分比 #USAGE: python calculator.py num1 num2 import sys asys.argv[1] afloat(a) bsys.argv[2] bfloat(b) print "%.2f%%" % (a/b*1…

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

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

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

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

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

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

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

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