基本函數(2)——Power Query M語言


 

基本函數2

Text.ToList和Text.Split

  • Text.ToList從給定的文本值Text返回字符值列表

Text.ToList(Text) as list

示例:= Text.ToList("Hello World")

輸出:{"H","e","l","l","o"," ","W","o","r","l","d"}

 實例:拆分數字

= List.Transform(更改的類型[QQ號], each Text.Combine(Text.ToList(_), "-"))

 

Text.Split返回根據指定的分隔符Separator拆分文本Text而得到的文本值列表

示例:= Text.Split("Name|Address|PhoneNumber", "|")

輸出:{"Name","Address","PhoneNumber"}

 實例:統計人數

= List.Transform(源[名單], each List.Count(Text.Split (_,"、")))

 

實例3:分離數字

= List.Transform(源[代碼], each Text.Combine(List.Select(Text.ToList(_), each _<="9"), "\"))

 

Text. Length、Text. Start、Text. End、Text. Middle、Text. Range

Text. Length

  • 返回字符串的長度


Text. Start與Text. End

  • Text. Start(字符串,個數) 返回字符串的前幾個字符(從左提取)
  • Text. End(字符串,個數) 返回字符串的后幾個字符(從右提取)


Text. Range與Text. Middle

  • Text. Range(字符串,起始位置,長度)
  • Text. Middle(字符串,起始位置,長度)

 

示例1:

= Text.Range("abdcdef", 8)

報錯:超出范圍

= Text.Middle("abdcdef", 8)

不報錯:空

 

示例2:提取復姓

= Table.AddColumn(更改的類型, "自定義", each Text.Start([姓名], Number.From(List.PositionOf(復姓[復姓表], Text.Start([姓名], 2))<>-1)+1))

 

示例:成績分級{90,80,60,0}

 

 

 = Table.AddColumn(源, "自定義", (n)=>Text.Range("差中良優",List.Sum(List.Transform({90,80,60,0},  each Number.From(n[成績]>=_)))-1,1))

 

示例:分隔

= Table.AddColumn(源, "自定義", (n)=>Text.Combine(List.Transform({0..Number.From(Text.Start(Text.From(Text.Length(n[賬號])/4), 1))}, each Text.Middle(n[賬號],_*4,4)), "-"))

 

Text與Number

字符與字符編碼的轉換

  • Character.FromNumber 數字轉字符
  • Character.ToNumber 字符轉數字
  • 字符表達方式:#(4位或8位16進制編碼)
  • 10進制轉16進制:Number.ToText(10進制數,”X”)
  • 控制字符:tab(制表符-9) lf(換行符-10) cr(回車符-13)
  • #(tab)
  • #(tab,cr) #(000A,000D)

數字與文本值的轉換

  • Text.From 將值轉為文本類型(數字,日期,時間)
  • Number.From 將文本轉為數字(數字,日期,時間,邏輯值)

Value.FromText

  • 將文本格式的:數字,日期,時間,邏輯值等轉為真正的格式

 

示例:

示例:

 

 

 

 

實例:

let
    源 = Excel.CurrentWorkbook(){[Name="表43"]}[Content],
    a = 源[分數],
    b = List.Transform(a, each Text.Split(_, ",")),
    c = List.Transform(b, each List.Zip(List.Transform(_, each Text.Split(_, "-")))),
    自定義1 = List.Transform(c, each Text.Combine(_{0}, "\")&"#(lf)平均分:"&Number.ToText(List.Average(List.Transform(_{1}, each Value.FromText (_))),"f2"))
in
    自定義1

 

 

Text. Remove與Text.RemoveRange

Text. Remove

Text.Remove(文本,移除字符 as Any)

Text.RemoveRange

Text.RemoveRange(文本,移除起點位置,移除字符長度)

 

示例:

 

 

實例:

1 let
2     源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
3     a = Table.AddColumn(源, "自定義", each Table.FromColumns(List.Transform({{"0".."9"}, {"一".."龥"}}, (n)=> List.Transform(Text.Split(Text.Remove([名單], n), "、"), each Value.FromText(_))),{"姓名","分數"})),
4     #"展開的“自定義”" = Table.ExpandTableColumn(a, "自定義", {"姓名", "分數"}, {"姓名", "分數"}),
5     刪除的列 = Table.RemoveColumns(#"展開的“自定義”",{"名單"})
6 in
7     刪除的列

 

Text.PositionOf與Text.PositionOfAny

Text.PositionOf

Text.PositionOf(字符串,定位文本,0/1/2)

  • 定位文本可以一單個字符,也可以是多個字符。
  • 0:返回第1個
  • 1:返回最后1個
  • 2:返回全部

 

Text.PositionOfAny

Text.PositionOf(字符串,文本 as list,0/1/2)

  • 定位文本必須是單個字符,也必須是列表,
  • 0:返回第1個
  • 1:返回最后1個
  • 2:返回全部

 

 

 

實例:

提取最后一串字符
統計每個級別的次數

 

1 let
2     源 = Excel.CurrentWorkbook(){[Name="表53"]}[Content],
3     列表 = 源[編號],
4     a = List.Transform(列表, each Text.Middle(_, Text.PositionOf(_, "-", 1)+1, 99 ))
5 in
6     a

1 let
2     源 = Excel.CurrentWorkbook(){[Name="表52"]}[Content],
3     a = Table.AddColumn(源, "自定義", each Text.Combine(List.Transform({"優","良", "中", "差"}, (n)=> Number.ToText(List.Count(Text.PositionOf([級別], n, 2)), n&":" &"(0個)")), "#(lf)"))
4 in
5     a

Or

1 let
2     源 = Excel.CurrentWorkbook(){[Name="表52"]}[Content],
3     a = Table.AddColumn(源, "自定義", each Text.Combine(List.Transform({"優", "良", "中", "差"}, (x)=> Number.ToText(List.Count(List.Select(Text.ToList([級別]), each _=x)), x&":"&"(0個)")), "#(tab)"))
4 in
5     a

 

Text. Replace\ Text.ReplaceRange\ Text.Insert

Text. Replace

Text. Replace(字符串,要查找字符,替換成新字符)

Text.ReplaceRange

Text.ReplaceRange(字符串,起始位置,字符個數,替換的新值)

Text.Insert

Text.Insert(字符串,插入位置,新值)

 

 

 

 

實例:

let
    源 = Excel.CurrentWorkbook(){[Name="表66"]}[Content],
    //a = Table.AddColumn(更改的類型, "自定義", each List.Transform(Text.Split([入圍成員], "、"), (n)=> Text.Replace([成員], n, "")))  //這樣是逐個遍歷,達不到累計效果
    a = Table.AddColumn(源, "自定義", each Text.Combine(List.Select(Text.Split(List.Accumulate(Text.Split([入圍成員], ""), [成員],(x,y)=> Text.Replace(x, y, "")), ""), each _<>""), "\")),
    刪除的列 = Table.RemoveColumns(a,{"組別", "成員", "入圍成員"})  
in
    刪除的列

1 let
2     源 = Excel.CurrentWorkbook(){[Name="表67"]}[Content],
3     已添加自定義 = Table.AddColumn(源, "自定義", each List.Accumulate({1..Text.Length([編號])/3-1},  " "&[編號], (x,y)=>Text.Insert(x, y*4,"-"))),
4     去除的文本 = Table.TransformColumns(已添加自定義,{{"自定義", Text.Trim, type text}})
5 in
6     去除的文本

let
    源 = Excel.CurrentWorkbook(){[Name="表68"]}[Content],
    更改的類型 = Table.TransformColumnTypes(源,{{"品名", type text}}),
    已添加自定義 = Table.AddColumn(更改的類型, "自定義", each Text.Insert([品名], List.Count(List.Select(Text.ToList([品名]), each _>"z")), "#(lf)"))
in
    已添加自定義

 

1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM