0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M语言(PowerQuery)指令

Last updated at Posted at 2025-03-12
  1. 变更某列里面的数据,比如将TEXT型的日期+时间数据切成日期数据

    FunctionName = Table.TransformColumns(Sorce, {"变的更列名", each Text.Start(_,     10)}),
    
  2. 添加新的列

    FunctionName = Table.AddColumn(Source, "新的列名", each [已有的列名] * 2, type number)
    
  3. 用于将某列里面的8位字符型日期转换成yyyy/MM/dd格式

    FunctionName = Table.AddColumn(Source, "新的列名", each Text.Middle([yyyymm的年月列], 1, 4) & "/" & Text.Middle([yyyymm的年月列], 5, 2) & "/01", type text),
    

    置换值,将某(几)列的值置换成另外的值,如,将null置换成0

    置换值= Table.ReplaceValue(Source, null, 0, Replacer.ReplaceValue, {"置换列的名字"}),
    

    其中null是被置换的值,0是置换值
    也可以像下面这样,同时置换若干列

    置换值 = Table.ReplaceValue(Source, null, 0, Replacer.ReplaceValue, {"置换列的名字1", "置换列的名字2", "置换列的名字3"})
    
  4. 将日期列里的年向后推一年

    置换列 = Table.TransformColumns(Source, {{"日期列", each DateTime.ToText(Date.AddYears(DateTime.FromText(_), 1), "yyyy-MM-ddTHH:mm:ss")}}),
    
  5. 表连接,将两个表连接在一起,相当于SQL的LEFT JOININNER JOIN

    表连接 = Table.NestedJoin(表1的名字, {"表1的链接键1", "表1的链接键2"}, 表2的名字, {"表2的链接键1", "表2的链接键2"}, "连接之后新的列名", JoinKind.LeftOuter),
    
  6. 删除重复数据(获取唯一值)

    重複削除 = Table.Distinct(Source, {"去重的列名1", "去重的列名2"})
    
  7. 表展开,将连接在一起的表展开,一般Source"表连接"

    Expand_FROM = Table.ExpandTableColumn(Source, "连接之后新的列名", {"需要展开的列1", "需要展开的列2", "需要展开的列3"}, {"将需要展开的列展开之后的名字1", "将需要展开的列展开之后的名字2", "将需要展开的列展开之后的名字3"}),
    
  8. M使用if根据条件向列输出组合值。下面的示例,在表中增加一列,这列的值如果是条件1,则输出then后面的组合,如果不符合条件1,则输出else后面的组合

    如何使用if = Table.AddColumn(Source, "新增列名", each 
      if Text.From(Date.Year([日期的列名])) = "2022" then "二零二二" & [组合值的列名] 
      else if Date.Year([日期的列名]) = Date.Year(DateTime.LocalNow()) then "今年" & [组合值的列名] 
      else Text.From(Date.Year([日期的列名])) & [组合值的列名]
    ,type text)
    
  9. 在if条件里面写函数的方法

    重置值 = Table.AddColumn(Source, "新列名", each 
    if [条件列1] = "条件1" or [条件列2] = "条件3" then
      let
        随机数 = Number.Mod(Number.RoundDown(DateTime.LocalNow() * 1000) , List.Count(数组1)),
        数组下标 = Number.RoundDown(Number.RandomBetween(0, List.Count(数组1)))
      in
        数组1{数组下标}
    
    else 
      let
        随机数 = Number.Mod(Number.RoundDown(DateTime.LocalNow() * 1000) , List.Count(o数组2)),
        数组下标 = Number.RoundDown(Number.RandomBetween(0, List.Count(数组2)))
      in
        数组2{数组下标}
    , type text )
    
  10. 利用if里面写函数的方法,建立新列,并根据条件随机填入数据

      数据列1 = {"A", "B", "C", "D"},
      数据列2 = {"AA", "BB", "CC", "DD"},
      数据列3 = {"AAA", "BBB", "CCC", "DDD"}  
      根据条件赋值列 = Table.AddColumn(Source, "新列名", each 
      if [条件列1] = "条件1" or [条件列1] = "条件2" then
        let
          重置随机值 = Number.Mod(Number.RoundDown(DateTime.LocalNow() * 1000) , List.Count(数据列1)),
          取值 = Number.RoundDown(Number.RandomBetween(0, List.Count(数据列1)))
        in
          数据列1{取值}
    
      else if [数据列1] = "条件1" and [数据列2] = "条件2" then
        let
          重置随机值 = Number.Mod(Number.RoundDown(DateTime.LocalNow() * 1000) , List.Count(数据列2)),
          取值 = Number.RoundDown(Number.RandomBetween(0, List.Count(数据列2)))
        in
          数据列2{取值}, type text
    
      else 
        let
          重置随机值 = Number.Mod(Number.RoundDown(DateTime.LocalNow() * 1000) , List.Count(数据列3)),
          取值 = Number.RoundDown(Number.RandomBetween(0, List.Count(数据列2)))
        in
          数据列3{取值}, type text
    )
    
  11. 过滤掉非数字型的值

    过滤值 = Table.SelectRows(Source, each Value.Is(Value.FromText([目标列]), type number)),
    
  12. 多个if条件一起判断

    if List.Contains({"条件1","条件2","条件3"}, [目标列]) then "值1"
        else if List.Contains({"条件4","条件5","条件6"}, [D目标列]) then "值2"
        else null
    
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?