实例:Excel Power Qeury 拆分字符串再合并

今天接着给大家讲解一个关于Excel Power Query的例子。
这个问题也是一个朋友问题,解决的方法有很多种,这里给大家展示两个很常见的例子。

如下图所示:
file
将第1行与第2行的数据先按逗号“,”进行拆分,再按竖线“|”进行拆分后,取每个逗号的分隔的第一个数字用逗号连接;然后再取每个逗号前的两个竖线中间的数字进行连接。
将第1行与第2行的原始数据上载至Excel Power Query编辑器中。

接着看下面的两种方法。

方法1

首先上代码给的的看一下:
file

let
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    trans_1 = Table.TransformColumns(源,
                                    {
                                        "输入"
                                        ,each 
                                            Record.ToList(
                                                [
                                                    a=Text.Split(_,","),
                                                    b=
                                                        [
                                                            t1=Text.Combine(
                                                                List.Transform(a
                                                                            ,each 
                                                                                    Text.BeforeDelimiter(_,"|")
                                                                                    )
                                                                                    ,","),
                                                            t2=Text.Combine(
                                                                List.Transform(a
                                                                                ,each 
                                                                                    Text.BetweenDelimiters(_,"|","|")
                                                                                    )
                                                                                    ,",")
] 
                                                ]   
                                                 [b])                   
                                    }
                                    )
                                      [输入],
    transf_2 = Table.FromColumns(trans_1,{"content"})
in
    transf_2

这个思路相对来说比较简单:首先使用Text.Split拆分字符串,分隔符为逗号,拆分list.然后再使用List.Transform遍历每一个list,继续使用Text.Split进行拆分。然后使用Text.Combine合并。最后使用Record.ToList转化成list后再转化成table即可。

这里注意使用的思路是:先按逗号拆分,再按竖线拆分,最后取出自己想要的即可。

方法2
首先上代码给的的看一下:
file

let
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    trans = Table.TransformColumns(源,
                {
                    "输入",
                    each 
                        List.Transform(
                                        Text.Split(_,","),
                                        (x)=>List.RemoveLastN(
                                            Text.Split(x,"|")
                                                            ,1) 
                                            )            
                }
                )
                  {0}
                     [输入],
    trans_1 = Table.FromRows(trans,{"a","b"}),
    trans_2 = Table.FromColumns(
                {
                    {
                        Text.Combine(trans_1[a],","),
                        Text.Combine(trans_1[b],",")
                    }
                }
                ,{"content"}
                )
in
    trans_2

这个思路与上面的方法2的思路基本上也是一样的,这次拆分的时候代码的重复度较低。但是大体的思路是一样的。

方法3

首先上代码大家看一下。
file

let
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    trans_1 = Table.TransformColumns(源,
                                     {
                                         "输入"
                                         ,each 
                                            Text.SplitAny(_,",|")
                                    }
                                    )
                                    {0}
                                       [输入],
    trans_2 = Table.FromRows(
                                {
                                    {
                                        Text.Combine(
                                            List.Alternate(trans_1,2,1,1)
                                                    ,",")
                                    },
                                    {
                                        Text.Combine(
                                            List.Alternate(
                                                List.Skip(trans_1,1),2,1,1)
                                                    ,",")
                                    }
                                }
                                ,{"content"}
                            )
in
    trans_2

这个思路较前面的两个思路的话更加地简洁方便。使用了Text.Split函数的增强版Text.SplitAny函数,拆分起来更加地方便。另外还使用了另外一个函数即List.Alternate函数,类似于Excel工作表函数中的Offset函数。

Excel和PowerBI聚焦:小必