Excel:Power Query函数入门
来源:网络收集 点击: 时间:2024-06-02List.Combine从字面上也很好理解,就是把多个List合并起来:

如下图是不同家庭的数据,每家户主在第一行(如黄色标注单元格),户主下面到下一个户主之间是该家庭成员。要求每个家庭显示成一行。

首先,选中数据区域中任意单元格,点击【数据】-【自表格/区域】将数据加载到Power Query编辑器中,生成一个名字叫Source的Table。

第二步,用Table.Group函数按“与户主关系”列分组,注意使用Table.Group的第五参数。生成结果如下,每个家庭的成员放进了一个Table。

=Table.Group(Source,与户主关系,{New,each_},0,(x,y)=Number.From(y=户主))

第三步,要想办法把每个Table里的多行转化成一行,由于列名不能重复,因此姓名、性别等列名需要加上1、2、3、4等用来区分家庭里的不同成员。使用Table.ColumnNames函数获取列名,然后转换即可。

let
Source = Excel.CurrentWorkbook(){},
A = Table.Group(Source,与户主关系,{New,each
}
,0,(x,y)=Number.From(y=户主)
)
in
A

第四步,标题生成以后,还需要把每个家庭多行的人员信息(每个人信息为一个List)连接起来形成一个List,这里就用到了我们介绍的函数List.Combine!
List.Combine(Table.ToRows(_))

第五步,把生成的标题和内容连接起来生成一个新的一行的Table。

let
Source = Excel.CurrentWorkbook(){
},
A = Table.Group(Source,与户主关系,{New,(z)=
#table(
List.TransformMany(
{1..Table.RowCount(z)},each Table.ColumnNames(z),(x,y)= yText.From(x)
),
{
List.Combine(Table.ToRows(z))
}
)
}
,0,(x,y)=Number.From(y=户主)
)
in
A

最后,深化出New列,然后再将每个家庭的Table合并起来再上载到Excel工作表中就可以了。

最终代码如下:
let
Source = Excel.CurrentWorkbook(){},
A = Table.Group(Source,与户主关系,{New,(z)=
#table(
List.TransformMany(
{1..Table.RowCount(z)},each Table.ColumnNames(z),(x,y)= yText.From(x)
),
{
List.Combine(Table.ToRows(z))
}
)
}
,0,(x,y)=Number.From(y=户主)
)
in
Table.Combine(A)

个人建议
最终效果如图所示。

版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_874527.html