Power Query条件合并展开:按日期返回Hierarquia数据或NULL
解决方案:Power Query条件返回层级表字段值
不要直接展开嵌套表,而是先对嵌套的Hierarquia表做条件筛选,再展开,这样不符合条件的字段会自动返回NULL,同时保留所有行。
修改后的完整代码
let // 保持原有左连接逻辑 Data = Table.NestedJoin(União, {"cod_parceiro"}, Hierarquia, {"cod_parceiro"}, "Hierarquia", JoinKind.LeftOuter), // 添加自定义列,筛选符合日期条件的层级数据 #"筛选符合条件的层级数据" = Table.AddColumn(Data, "符合条件的Hierarquia", each let // 根据status判断使用的日期字段 判断日期 = if [status] = "PAGO" or [status] = "ESTORNO" then [data_pagamento] else [data_digitacao], // 筛选层级表中日期范围匹配的行 筛选后的表 = Table.SelectRows([Hierarquia], each 判断日期 >= [data_inicial] and 判断日期 <= [data_final]) in // 如果筛选后无数据,返回空表;否则返回筛选结果 if Table.RowCount(筛选后的表) = 0 then #table(type table[grupo_de_loja=null, nome_parceiro=null, comercial=null, regional=null, potencial=null, data_inicial=null, data_final=null], {}) else 筛选后的表), // 展开处理后的层级表字段 #"展开符合条件的层级数据" = Table.ExpandTableColumn(#"筛选符合条件的层级数据", "符合条件的Hierarquia", {"grupo_de_loja", "nome_parceiro", "comercial", "regional", "potencial", "data_inicial", "data_final"}, {"grupo_de_loja", "nome_parceiro", "comercial", "regional", "potencial", "data_inicial", "data_final"}), // 移除原有的嵌套列(可选步骤) #"移除原嵌套列" = Table.RemoveColumns(#"展开符合条件的层级数据", {"Hierarquia"}) in #"移除原嵌套列"
关键逻辑说明
- 先通过
Table.AddColumn处理每行的嵌套Hierarquia表:- 根据
status字段判断,使用data_pagamento或data_digitacao作为日期判断基准 - 用
Table.SelectRows筛选层级表中日期在指定范围内的行 - 若筛选后无匹配数据,返回结构一致的空表,确保展开后对应字段为NULL
- 根据
- 展开处理后的自定义列,此时不符合条件的行对应的层级字段自动填充为NULL,同时保留所有原始行
内容的提问来源于stack exchange,提问作者Caitano Netto
相关产品推荐
相关产品推荐

