PowerBI M language Learning

Text.SplitAny 分开的函数 只适合文本 不能用list

= Table.AddColumn(自定义1, “A”,each Table.FromRows({List.Combine(List.Zip(Record.ToList([a=List.Select(Text.SplitAny([产品信息],字母),each _<>""),b=List.Select(Text.SplitAny([产品信息],Text.Combine(a)),each _<>"")])))}))

深化与查询

深化引用查询

1.担当vlookup

=Table.AddColumn(源,“部门”,each 某表{[业务员=[业务员]}[部门]})

其中的表可以是不同的表 也可以是在一张表中的不同操作步骤

动态引用多工作簿内容

1.深化多个工作簿
2.选择各个表中的列的汇总值进行汇总

合并一个文件夹中多个表格
= Table.Combine(Table.Combine(List.Transform(源,each Excel.Workbook(_,true,true)))[Data])

合并多个表中的相同位置的值采用深化即可。

合并多个表中的不同位置的列的方式

Record 可以将1列进行提取对应的列转换为Record然后展开成多列

=Table.TransformColumns(“表”,{‘Data’,each [数量={[型号=“合计”]}[商品数量],金额={[型号=“合计”]}[商品金额]]})

自定义函数

查询 当let中的语句只有一句话的时候 就不用加LET

累计求和

添加自定义列进行求和

当用传递行数的时候可以 设置为参数

累计求和中创建的索引列应该从1开始;

=Table.AddColumn(已添加索引,“累计求和”,each List.Sum(List.FirstN(已添加索引[销售业绩],[索引])))

传递函数:

Table.AddColunmn(已添加索引,“累计求和”,(x)=> List.Sum(List.FirstN(已添加索引[销售业绩],x[索引])))

构建Record

=Record.Combine({查询1,查询2}) =Record.Combine({[姓名=“万金发”],[年龄=35],[性别=“男”]]}) 必须为List 格式

Table.ToList

Record.FromList(源,{“title1”,“title2”})

Record.ToList(Record)

通过一个record 来获得列表的时候 的列字段 名称 必须是 Name Value

Record.FromTable

Table.Range 重新获取数据

Table.FromRecords({})

Table.ToRecords 为将title与每一条明细变成Title

Record.FormTable 为原表中有一列为Name列 一列为Value列

=Table.FromRecords(List.Transform({0…11},each Record.FromTable(Table.range(重命名的列,_*间隔数(8),获取几行(6))) 8

注意Table.Range

构建List

列表是没有字段标题的

List列表中可以嵌套其他列表元素

英文 中文 拼音的列

={“a”…“Z”}

=Text.ToList()

12345678 1
2
3
4
5
6
7
8

List.Combine

= List.Combine({{1,2},{3,4}})

LIst 中的每一个为List的 才客户

列表
List
List
List
List.Positions 获取List中的位置关系

根据初始值,总项目数,步进递增量,返回指定项数的list数字列表
List.Date List.Times,List.DateTime List.Durations

List.Repeat

List.Reverse

构建Table

=#table({字段名称},{{行值},{行值}})

注意是小写

List当中是Table 就可以用Table.Combine

Table.ToRows 拆分成一行的list 无字段

Table.FromRows从多个Rows的List进展开

=Table.FromRows(源,{字段Title})

Table.ToRecord

Table.FromRecords

Table.ToCoLumns

Table.ToList 将表中的内容设置为文本类型,然后进行合并

Table.FromList 将一列List中以逗号隔开的内容,转置为表格

注意,只能是逗号

=Table.FromList(源,each Text.Split(_,"/"),{字段标题},备选值)

Table.ToColumns

Table.FromColumns

其中的List为每个Column的值

三大容器构建宇宙

指定的列进行分组

Table.Group 分组 是将表格中的所有内容进行分组,如果需要将表格中的某列进行合并需要深化出来

=Table.Group(表,{“年级”},{“姓名”,each Text.Combine(_[姓名]," ")})

List.Zip

支持结构

=List.Zip({{1,2},{3,4}})

Output

{1,3},{2,4}

了解函数语法及常用聚合函数

Table.Group 局部分组 和 全局分组

=Table.Group(table,{分组字段},{{分组的列},{分组的列}},全局,大小写)
0 局部
1或者缺省为全部

其中全局为根据分组依据,将表中所有行进行汇总
局部分组为根据表格的上下文,进行分组 ,不是统计全部的表,相邻进行统计。

区分大小写 Comparer.Ordinal
Comparer.OrdinalIgnoreCase
Comparer.FromCulture

可以制作多列
List 聚合函数

Text.Combine

List.Product 乘法

List.Count

List.NonNullCount

List.Mode 众数
List .Modes

1
3

2
4

3
5

实现乘法

扩展分组套路

统计不同班级 同类科目中的第一名

=Table.Group(源,{“班级”},{“a”,each Table.Max(_,“语文”)})

=Table.Group(源,{“班级”},{“a”,each Table.First(Table.Sort(_,{“语文”,1}))})

=Table.First(_)

=Table.Sort(表,{“排序的列”,1(升序or降序)})

扩展分组套路-纵向分组

=Table.Group(源,{“品名”},{“统计”,each “订单数量:”&Text.From(Table.RowCount())&"#(lf)"&“订单金额:”&Text.From(List.Sum([金额])})

& 连接符 前后应该为同一格式?文本格式?

横向分组:
=Table.Group(源,{“品名”},{“统计”,each [订单数量=Table.RowCount(),销售金额=List.Sum([金额])]})

拓展分组——模拟分类汇总

=Table.Group(源,{“品名”,{“品名”,each Table.FromRows(TableToRows(_)&{{={0}[品名]&“小计”,null,List.Sum([数量]),List.Sum([成本金额],List.Sum([销售金额])}}.Table.ColumnNames(源)})

拓展分组 统计连赢场次:

List.Skip(List,0) 如果忽略0 将自动默认为
Text.Length 统计一个格中的字符个数

方法1:整体分组嵌套局部分组 ,统计连赢场次 ,求最大值:

=Table.Group(源,{“球队”},{“a”,each List.Max(Table.SelectRows(Table.Group(,{“值”},{“b”,each Table,RowCount()},0),each [值]=“胜”)[b])})

方法2: 分组后,将对应的一行 转为多行的List 然后进行合并,多项拆分后,统计字符长度。

=Table.Group(源,{“球队”},{“a”,each List.Max(List.Transform(Text.SplitAny(Text.Combine(List.Skip(Table.ToRows(_){0})),“平负”),Text.Length))})

判断齐码断码

Number.Sign 将数字转换为数字符号(0,1)

Text.Contains (text,“条件”)

1.利用全局分组,局部分组进行统计 套路同上

=Table.Group(提取的符号,{“款号”},{“A”,each if List.Max(Table.Group(,{“数量”},{“b”,each List.Sum([数量])},0)[b]) > 2 then “齐码” else “断码”})

2.分组后,将一行转换成多列,统计连续的

=Table.Group(源,{“款号”},{“a”,each if Text.Contains(Text.Combine(List.Transform(List.Skip(Table.ToRows(){0},each Text.From(Number,Sign())),“111”) then “齐码” else “断码”})

转换列字段 Table.TransformColumns

转换所有字段 =Table.TransformColumns(源,{},Text.Form)
该字段的意思为去除{}内的列以为,的其他列的格式,因为{}中为空,故是所有列。

将表格中的所有的列转换为文本的格式

Table.TransformColumns(源,{{},{}}) 多个字段进行操作

根据表中某列数字从1开始进行扩展

=Table.TransformColumns(源,{“库存”,each {1…_}})

转换中的一列 务必记得添加"{}"符号

只转换表中的几列,其他的列不转换 或转换为其他类型

将表中的一列不进行转换,其他列转换为信息符号 (1,0)

=Table.TransformColumns(源,{{“款号”,each _}},Number.Sign)

如果转换的列在表中无此列,需要添加一列的

=Table.TransformColumns(源,{{“价格”,each _}},null,MissingField.UseNull)

扩展转换应用到行

将颜色防在同一采购价的同一个格中 ,以逗号的形式 ,然后分隔开,对应相应的采购价

方法一:=Table.ExpandListColumn(Table.TransformColumns(源,{“颜色”,each Text.Split(_,",")})

方法二,利用拆分列,进行拆分(excel 界面即可)

扩展转换应用到列
=Table.TransformColumns(源,{{“颜色明细”,each List.Transform(Text.Split(Text.Remove(,"]"),"["),each Record.FromList(Text.Split(,"["),{“颜色”,“尺码”})},{“尺码明细”,each List.Transform(Text.Split(Text.Remove(,"]"),"["),each Record.FromList(Text.Split(,"["),{“尺码”,“明细”}))}})

Record.FromList 格式

其中的Record 可以替换为 1,田佳兴

将列转换为表

Table.FromList

=Table.TransformColumns(源,{“产品信息”,each Table.FromList(Text.Split(,"#(lf)"),each Text.Split(,","),{“1”,“2”,“3”,“4”,“5”})})

Table.TransformRows

转换结果
=Table.TransformRows(源,each _) 将原表的每一行根据title转换成为Record

1.在每一行中间插入空行

=Table.FromList.Combine(Table.TransformRows(源,each {_,Record.FromList(List.Repeat({null},8),Table.ColumnNames(源))}))

Table.TransformRows(源,each _)

将表中的一行转换成为Records然后进行编辑

重组行

=Table.TransformRecords(源,each [日期=[日期],客户信息=[销售城市]&[客户]&[渠道],业务员=[业务员],商品单价=[商品总价]/[商品数量]])

转换行数

方法一,自学成才,哈哈哈

= Table.Combine(Table.TransformRows(源, each Table.FromRows((List.Transform({0…2},(x)=>List.Range(Record.ToList(_),x*3,3))))))

因为Table.TransformRows 中将每行转置为Record,其中将Record 的每一行转换成为List 然后 每个List中有三行,然后展开后进行Table.Combine 结合即可

方法二 使用Table.ToRows进行转换

=Table.FromRows(List.Combine(List.Transform(Table.ToRows(源),each List.Transform({0…2},each List.Range(_,x*3,3))))

方法三:将所有的列进行合并后,并重新进行分配排列

=Table.FromRows(List.Transform({0…75},each List.Range(List.Combine(Table.ToRows(源),_*3,3)))

转换列名称

转换列的数据类型

=Table.TransformColumnTypes(源,{{列名称,type date},{列名称,type number}})

更改列的名称
=Table.RenameColumns(源,{{ole,new},{old,new},{old,new}},2)
1,2 表示 如果表中无此字段时候怎么显示
2,可以添加无此列的意思

=Table.TransformColumnNames(源,{“列”}

转换表格中整体列的名称

=Table.TransformColumnNames(自定义1,each Text.Remove(_,“城”),[MaxLength=10])

MaxLength 表示 列最长的字段长度

List.Transform

Text.Combine 必须将表格中的内容转换为Text进行合并后才OK

Date.ToText (_,“yyyy年m月d日”)

此处的_,必须为Date 格式 不能为数字格式

List.Transform

除常用的对列的转换外还有 以下使用方式

在同一张表内进行跨表查询

=List.Transform(List.Positions(L2),each L2{}*L1{})

跨表相成

=List.Transform(List.Positions(L1),each L1{}*产品[商品数量]{})

其中的{_}为每一行

将公式做为内容,为一个List 对某列进行计算

=List.Transform({List.Count,List.Sum},each _(List))

笛卡儿积
List.TransformMany

=List.TransformMany({…},(t)=>{…},(x,y)=>Text.From(x*100+y))

List.TransformMany(List.TransformMany({“1”,“2”,“3”},(t)=>{“一”,“二”,“三”,“四”},(x,y)=x&“栋”&y&“单元”),(t)=>List.TransformMany({1…5},(a)=>(1…3),(x,y)=>Text.From(x*100+y)),(x,y)=>x&y)

=List.TransformMany({“红桃”,“黑桃”,“方片”,“草花”},(t)=>{“A”,“1”…“9”,“10”,“J”,“Q”,“K”},(x,y)=>x&y)

Tip

Table.CombineColumns

合并列

=Table.CombineColumns(源,{需要合并列的Title,需要合并列的Title},each ,{新合并列的名称})
=Table.CombineColumns(表,{“行业”,“省份”},each Text.Combine(
,"-"),“1”)

单元格内分组统计

套路一:深化为List 多个单元格内容合并后,进行拆分 对列进行修改。

Text.ToList

=Table.FromRecords(List.Transform(Text.Split(Text.Combine(,","),","),each [单位=Text.Remove(,{“0”…“9”}),金额=Text.Remove(_,Text.ToList(单位))]))

注意 Text.ToList 的格式 其中Record中的一列内容为Text

数字和文本为一个单元格内容时,数字为文本格式。

方法二,转换表格中的列,分列后进行转换

注意:其中的List.Transform

=Table.TransformColumns(源,{“合作方”,each List.Transform(Text.Split(,","),each [单位=Text.Remove(,{“0”…“9”}),金额=Number.From(Text.Remove(_,Text.ToList(单位)))])})

一列转置多列

Table.Range(表,起始位置(0),获取的行数)

=Table.PromoteHeanders(Table.Combine(List.Transform({0…Table.RowCount(表)/5},(x)=>Table.Transpose(Table.Range(表,_*5,5))))))

列中间隔Title

=Table.Combine(List.Transform({0…12},(x)=>Table.Range(Table.PromoterHeaders(Table.Combine(List.Transform({0…Table.RowCount(源/5},each Table.Transpose(Table.Range(源,_5,5)))))),x2,1)))

自定义行列转置

每个一列为字段名称列后 ,删除Title列后进行表格的合并
隔行取数:

Table.Range 改变表的范围

行列重组

List.Alternate(List,跳几行,获取几行,从哪行开始(1,上面的列会被保留))

Table.AlternateRows(源,从哪行开始,跳过几行,获取几行)

间隔获取行后进行重组

=Table.FromColumns(Table.ToColumns(Table.AlternateRows(源,1,1,1)&{List.Alternate(源[浏览人数],1,1,0)}),{“课程名称”,“金额”,“报名人数”})

多项目结构重组

=List.Range(List,从第几行开始,获取几行)

=Table.Group(源,List.FirstN(Table.ColumnNames(源),6),{“a”,each Table.SelectRows(Table.FromRows(List.Transform({6,8,10},(x)=>List.Range(Table.ToRows(_),x,2)),{“缺陷”,“数量”}),each _[数量]<>null)}})

转换为工资条

=Table.PromoteHeaders(Table.FromRows(List.Combine(Table.TransformRows(源,{Table.ColumnsNames(源)}&Record.ToList(_)}))))

分表汇总成总表

将多个表中的内容转换

思路:将表格转换成为List 进行合并 后为一列List, 然后截取一部分 合并为多个List后 进行拆分 然后转置为Table后进行合并

=Table.Combine(List.Transform({0…35},(x)=>Table.PromoteHeaders(Table.Transpose(Table.FromList(List.Range(List.Combine(Table.ToColumns(源)),x*8,6),each Text.Split(_,")))))

查找分组横向展开
下表为2列表 此方法主要是进行归类 将编码开头为1…7的产品 分类 统计数量

=Table.FromColumns(List.Combine(List.Transform({“1”…“7”},(x)=>Table.ToColumns(Table.SelectRows(源,each Text.Start(Text.From([商品编码]),1)=x)))),List.Combine(List.Zip(Table.ToColumns(Table.Transpose(Table.FromRows(List.Transform({0,1},each List.Range(List.TransformMany(Table.ColumnNames(源),(x)=>x&y),_*7,7))))))))

=Table.FromColumns(List.Combine(List.Transform({“1”…“7”},(x)=>Table.ToColumns(Table.SelectRows(源,each Text.Start(Text.From([商品编码]),1)=x)))),List.Combine(List.Zip(List.Transform({0,1},each List.Range(List.TransformMany(Table.ColumnNames(源),(x)=>{“1”…“7”},(x,y)=>x&y,_*7,7)))))

脑洞题将结果表转置为源表

=Table.SelectRows(Table.Combine(List.Transform({0…7},(x)=>Table.FromColumns(List.Range(Table.ToColumns(自定义1),x*2,2),each [Column1] <> null)

多维转换

将下表转置重组

=Table.FromColumns({List.Combine(List.Transform({0…4},each List.Repeat(List.Range(表1[列1],_6,1)))}&Table.ToColumns(Table.Combine(List.Transform({0…4},(x)=>List.Range(Table.ToColumns(Table.PromoteHeaders(Table.Transpose(源))),x6,6))))),{“1”,“2”,“3”,“4”,“5”,“6”,“7”})

Table.Skip

List.Range 与List.Alternate的区别 List.Range选择的数据为无位置纯数据,List.Alternate为不改变其位置 的选取
故在重组表格Title中选择字段名称需要用的是List.Range 而不是List.Alternate

方法二,

=Table.FromColumns({List.Combine(List.Transform({0…4},each List.Repeat(List.Range(源[列1],_6,1)31)))}&Table.ToColumns(List.Transform({0…4},(x)=>Table.Skip(Table.Transpose(Table.Range(源,x6)),1)))),{“班级”,“姓名”}&List.Range(源[列1],1,5))

筛选符合条件的行(Table.SelectRows)

Date.QuarterOf0Year()

Text.StartsWith

Text.EndsWith

Text.Middle

Text.Contains

Date.Year

Date.ToText

DateTime.ToText

IsInPreviousMonth

=Table.SelectRows(表,each _)

=Table.SelectRows(源,each Date.Year([日期])=2015)

=Table.Select.Rows(源,each Date. QuarterOfYear([]))

=Table.AddColumn(源,“Quarter”,each Date.QuarterOfYear([日期])

模糊匹配

=Table.AddColumn(源,“价格”,each Table.SelectRows(价格,(x)=>Text.Contains([产品名称],x[颜色])){0}[工价])

模糊匹配方法二: 通过去除产品名称中的其他

Text.SplitAny(Text,Text.Combine({}))

根据给定的任意分隔符 中的任意一个进行拆分

注意Text.Combine的用法

=Table.AddColumn(源,“A”,each List.Select(Text.SplitAny([产品名称],Text.Combine({“0”…“z”})),each _ <>null){1})

Table.AlternateRows(源,开始的行,跳过的行数,留下的行数)

获取指定位置的行

Table.Range(源,跳过的行数,获取几行)

=Table.UnPivotOtherColumns(Table.Combine(List.Transform({0…3},(x)=>Table.PromoteHeaders(Table.Range(源,x*7,5)))),{“品名”,“店铺”},“月份”,“数量”)s

间隔获取行(无需使用List.Transform,指的是在一张表中 间隔几行获取几行)

=Table.AlternateRows(源,从第几行开始跳 ,跳过几行,获取几行) 达到的目的与Table.Range一致

=Table.UnpivotOtherColumns(Table.AlternateRows(源,4,3,4),{“品名”,“店铺”},“月份”,“数量”)

获取前后位置的行 Table.FirstN

Table.FirstN (源,条件)

注:Condition 为碰到不满足条件即结束 如果不排序即到了不满足的行即停止,只获取前几行 获取的行必须排在第一行。

=Table.FirstN (源,5) 获取表中的前5行

不排序:
=Table.First.N(源,each [销售城市] = “长沙”)

将表格进行排序;如果下面的行紧接着不是广州即停止。

=Table.FirstN(排序的行,each [销售城市] = “长沙” or [销售城市] =“广州”)

获取最大行 最小行

Table.FirstN Table.MaxN
单条件进行筛选时,会将该表按照一列进行拍寻

多条件进行排序时,多个条件 以书写顺序确定先后, 并且适用遇到不符合条件为止

当用MaxN的时候只能用> ,当用MinN的时候只能用<

Table.First Table.Max

=Table.Min(源,each [商品数量])

=Table.Max(源,each [商品数量])

= Table.MaxN(源

=Table.MaxN(排序的行,{“商品数量”,“商品总价”},each ([商品总价] >3000)

会在商品数量中进行排序,然后找到商品总价大于3000的Records 碰到不满3000的计算将结束,对第二条件不进行排序筛选

区间等级判断

利用Table.Min,Table.Last进行匹配
=Table.AddColumn(源,“跳高结果”,(x)=>Table.Last(Table.MinN(标准,“跳高”,each [跳高] <=x[#“跳高(cm)”]))[评价])

MinN 一个是从大到小排列 MaxN是从小到大进行排列

选择删除行和列

=Table.SelectColumns(源,{列字段名称},0)
0,1,2 ,是否包含该列,如果无则新加一列

=Table.RemoveColumns( )

=Table.SelectRowsWithError( )

= Table.RomoveRowsWithError 删除错误行

区间等级判断

利用 Table.Last 和Table.MinN进行整理

Table 添加列

=Table.AddColumn()

Date.From 从数字中获取日期

Text.Middle

Number.IsOdd 判断奇偶数

DateTime.ToText

Date.ToText

为将长日期 和段日期转换为其他的文本格式 ,文本格式可以比较大小。

yyMMdd 如果不添加自定义格式的话将转换为标准日期格式

yyMMdd hh:mm:ss

Date.From为识别日期中的格式

日期中的年 Date.Year

利用身份证识别年龄

=Table.AddColumn(源,“年龄”,each Date.Year(DateTime.LocalNow())-Date.Year(Date.From())-Number.From(DateTime.ToText(DateTime.LocalNow(),“MMdd”)

Table.透视与逆透视列

Table.Pivot=(源,{透视的标签非重复值},“透视源的表的名称透视的列的字段名称”,“透视的值的字段名称”,函数)

=Table.Pivot(源,List.Distinct(删除的列[字段名称]),“透视的列的字段名称”,“值字段名称”,List.Sum)

=Table.Pivot(源,List.Disinct(删除的列[销售城市]),“销售城市”,“数量”,each Text.Combine(List.Transform(_,Text.From),","))

Table.UnPivotOtherColumns(源,{不逆透视列的字段名称},“转换后的字段标签字段名称”,“转换后的值列字段标签”)

Table.UnPivot(源,{透视的列字段标签},“转换后的标签字段名称”,“转换后的值列字段名称”)

Table合并连接查询

=Table.NestedJoin(左表,{“查询字段”},右表,{“查询字段”},“新字段名称”,链接方式)

JoinKind.Inner 内部连接(交集) 0
JoinKind.LeftOuter 左外链接(左差集,加上交集)1
JoinKind.RightOuter 右外 2(右差集,加上交集)2
JoinKind.FullOuter 3 所有的
JoinKind.LeftAnti 左反,显示左边有的 右边无的 4
JoinKind.RightAnti 右反 右边有的 左边没有的 5

直接在表上进行查询就会造成循环引用 ,需要新建查询进行合并

Table的展开与聚合

Table,ExpandRecordColumn (表,“展开字段名称”,{“旧列名”},{“新列名”})

Table.ExpandListColumn

Table.ExpandTableColumn

=Table.ExpandRecordColumn(Table.TransformColumns(源,{“信息”,each RecordFromList(Text.Split(_,","),{“性别”,“年龄”,“省份”})}),“信息”,{“旧Record名”},{“新列名”})

Table拆分列

Text.Split 可以用多个字符进行拆分

=Text.Split(_,“123”)

Splitter.SplitTextByEachDelimiter
({",","."})
根据多个字符逐个进行拆分

=Table.SplitColumn(源,“拆分列”,Splitter.SplitTextByDelimiter(),{“拆分后字段名称”,"",""})

True 为右 False 为左

按照指定字符进行拆分
Splitter.SplitTextByDelimiters(“abc”,QuoteStyle.Csv)

按照一些字符进行拆分,注意 拆分序列需要和表中的出现顺序一致,True为右 False为左
Splitter.SplitTextByEachDelimiters({"","","",""},QuoteStyle.None,false),{“1”,“2”,“3”,“4”,“5”})

TorF开头为小写,在写之前必须写QuoteStyle

按照制定长度进行拆分
Splitter.SplitTextByLengths({4})

=Table.SplitColumn(源,“个人信息”,Splitter.SplitTextByLength({4,4,4,2},true),{“0”,“1”,“2”,“3”,“4”})

根据指定长度进行拆分,T or F 从右 到左

按照重复长度进行拆分
Spitter.SplitTextByRepeatedLengths
=Table.SplitColumn(源,“银行卡信息”,Splitter.SplitTextByRepeatedLengths(4),{“1”,“2”,“3”,“4”,“5”})

无法区分左右。

按照位置进行拆分
Splitter.SplitTextByPositions 与Text.PositionOfAny

按照空格进行拆分
Splitter.SplitTextByWhitespace

=Table.SplitColumn(源,“产品信息”,Splitter.SplitTextByWhitespace(0),{“1”…“5”})

按照开始位置,偏移位置进行拆分
Splitter.SplitTextByRanges ({{开始位置,偏移位置}})

QuoteStyle.None 可选的引用样式

QuoteStyle.Csv 按照Csv进行拆分

Csv 如果表中拆分后的数据有其他规律性符号,选择此种数据格式可以去除标点符号

=Text.PositionOfAny(源,{“A”…“Z”},2)

0,第一个位置

1,第二个位置

3,所有位置

拆分

合并

合并要求所有列的格式为文本格式

不会去除空值,去除空值如下:

=Table.CombineColumns(源,Table.ColumnNames(源),Each Combiner.CombineTextByDelimiter("/")(List.RemoveNulls(_)),“信息”)

Table.CombineColumns(源,Table.ColumnNames(源),Combiner.CombineTextByDelimiter("/"),“NewColumnNames”)

Combiner.CombineTextByDelimiter("/")
Combiner.CombineTextByEachDelimiter({"/",“a”,"#"})
Comnbiner.CombineTextByLengths({“3”,“2”},“中华人民共和国”)
Combiner.CombineTextByPositions()
Combine.CombineTextByRanges({})

Table.CombineColumns 是对每一行的操作

=Table.ComnbineColumns(源,Table.ColumnNames(源),Combiner.each CombineTextByEachDelimiter({"/","@","#","-"})(List.RemoveNulls(_)),“信息”)

=Table.CombineColumns(源,Table.ColumnNames(源),Combiner.CombineTextByLengths({10,3,1,5,2},“哈哈哈哈哈哈哈哈哈”),“信息”)

解释: 主要是固定每个字段的字符长度进行合并 ,如果长度不够可以用指定的字符长度进行替换 前提是替换的字段的字符长度 大于每列字符的长度 否则以空格进行代替

=Table.CombineColumns(自定义2,Table.ColumnNames(自定义2),Combiner.CombineTextByPositions({0,6,9,10,18}),“信息”)

注释:类似与已经有一列,让它们在对应的位置出现,如果列的字符数超过 相隔字符数,将自动截取。不够将以null值进行填充
数字应该是逐渐增长的。

=Table.CombineColumns(自定义2,Table.ColumnNames(自定义2),Combiner.CombineTextByRanges({{},{},{},{},{},{}}),“信息”)

Table的合并拓展

=Table.CombineColumns(源,{ },each _,“b”)

添加一列名称为b的空列, 注意其中_,代表的为一列 对一列的整理和定义

=Table.CombineColumns(源,{“姓名”},each “销售部”&"-"&_{0},“名字”)

标红字段的意义相等,其中红色字段表示的为他们两个等价

=Table.CombineColumns(源,List.Skip(Table.ColumnNames(源)),each List.Transform(List.Zip({List.Skip(Table.ColumnNames(源)),List.Transform(,Text.From)}),(x)=>Text.Combine(x,",")),&"#(lf)总分:"&"Text.From(List.Sum()),"“成绩”)

=Table.CombineColumns(源,List.Skip(Table.ColumnNames(源)),each let a = Text.Combine(List.Transform(List.Select(Lsit.Zip({List.Skip(Table.ColumnNames(源)),}),each{1}>90),each Text.Combine(List.Transform(,Text.From)"/"),",") in if a = “” then “无” else a ,“成绩”)

插入替换行

=Table.InsertRows(源,位置,Table.ToRecords(表))

=Table.ReplaceRows(源,起始位置,替换行数,Table.ToRecords(替换表))

多行进行替换
=Table.ReplaceMatchingRows(源,{{[old,old],[new,new]},{[old,old],[new,new]}})

注意此对应多行替换必须将行内的内容填写完整。

=Table.ReplaceValue (源,要替换的原内容,新内容 as any,Replacer.ReplaceValue,{替换的列})

注意其中替换值为any

调用旁边的行

=Table.ReplaceValue(源,要替换的内容,each [调用旁边的列],Replacer.ReplaceValue,{替换的列})

=Table.ReplaceErrorValues(表,{{列名,新值},{列名,新值}})

Table 移除行

Table.Skip

=Table.RemoveRows(源,开始的行,移除的行)

=Table.RemoveMatchingRows(源,{{}})

=Table.FirstN

=Table.LastN()

=Table

Table.ReplaceValue(源,null,each 删除的副本{[物品代码=[物品代码]]}[物品名称],Replacer.ReplaceValue,{“物品名称”})
表中为非重复行的时候可以这么写

表中为非重复行时是可以用Record指定

你可能感兴趣的:(EXCEL,MLanguage,bi)