Power Query条件合并表:仅合并已存在的年度数据表
解决PowerQuery合并年度表时的不存在表异常问题
原代码会生成从2011到当前年份的所有年度表名并尝试合并,但年初时当年的年度表尚未生成,直接访问会触发异常。以下是修改后的代码,仅合并实际已存在的年度表:
let currentYear = Date.Year(DateTime.LocalNow()), // 生成所有可能的年度表名格式 allPossibleTables = List.Transform({2011..currentYear}, each "INCC_" & Text.From(_)), // 筛选出#shared环境中实际存在的表 existingTables = List.Select(allPossibleTables, each Record.HasFields(#shared, {_})), // 合并所有存在的年度表 combinedTable = Table.Combine(List.Transform(existingTables, each Record.Field(#shared, _))) in combinedTable
关键改动说明
- 新增
existingTables筛选步骤:通过Record.HasFields检查每个表名是否在全局#shared环境中存在,只保留已加载的有效表 - 合并逻辑仅基于筛选后的列表,彻底避免访问不存在的表引发的错误
额外优化:单个年度表的容错处理
如果年度表是通过网页抓取生成的,建议在单表获取逻辑中增加错误捕获,避免因数据未更新导致的表加载失败:
let year = 2024, // 可替换为动态年份参数 // 捕获网页抓取异常,失败时返回空表 tryGetData = try let Fonte = Web.Page(Web.Contents("http://indiceseconomicos.secovi.com.br/indicadormensal.php?idindicador=59")), Data29 = Fonte{29}[Data], #"Tipo Alterado" = Table.TransformColumnTypes(Data29,{{"Header", type text}, {"Mês", type text}, {"índice", type number}, {"Var% Mês", Percentage.Type}, {"Acum. Ano%", Percentage.Type}, {"Acum. 12 meses%", Percentage.Type}}) in #"Tipo Alterado" otherwise Table.FromRecords({}), // 空表时返回null,后续合并会自动忽略 finalTable = if Table.RowCount(tryGetData) = 0 then null else tryGetData in finalTable
内容的提问来源于stack exchange,提问作者Cooper
相关产品推荐
相关产品推荐

