У меня есть простая формула XLOOKUP, которая ищет строку в листе master_list, и если она существует в листе Weekly_update, она должна обновить содержимое выбранных столбцов в master_list содержимым листа Weekly_update.
В настоящее время я делаю это вручную с помощью XLOOKUP, но, поскольку это много столбцов и это нужно делать каждые несколько дней, я пытаюсь реализовать это с помощью PQ. Текущий код, который у меня есть для запроса на слияние (Source1 = master_list, Source2 = Weekly_update):
let
// Merge Source1 and Source2
MergedTables = Table.NestedJoin(Source1, {"ID Number"}, Source2, {"ID Number"}, "Source2Data", JoinKind.LeftOuter),
// Expand Source2 columns
ExpandedSource2Data = Table.ExpandTableColumn(MergedTables, "Source2Data",
{"Title", "Description", "Status", "Disposition"},
{"Source2_Title", "Source2_Description", "Source2_Status", "Source2_Disposition"}),
// Replace columns from Source1 with columns from Source2 (Conditional logic with change check and null handling)
UpdatedColumns = Table.TransformColumns(ExpandedSource2Data, {
{"Title", each if [Source2Data] <> null and (try Text.From([Title]) <> [Source2Data][Title] otherwise false) then [Source2Data][Title] else [Title], type text},
{"Description", each if [Source2Data] <> null and [Description] <> [Source2Data][Description] then [Source2Data][Description] else [Description], type text},
{"Status", each if [Source2Data] <> null and [Status] <> [Source2Data][Status] then [Source2Data][Status] else [Status], type text},
{"Disposition", each if [Source2Data] <> null and [Disposition] <> [Source2Data][Disposition] then [Source2Data][Disposition] else [Disposition], type text}
}),
// Remove temporary columns
FinalTable = Table.RemoveColumns(UpdatedColumns,
{"Source2_Title", "Source2_Description", "Source2_Status", "Source2_Disposition"})
in
if Table.RowCount(FinalTable) > 0 then FinalTable else null // Return the entire table or null if empty
Это всегда возвращает объединенную таблицу без обновления столбцов, и я не могу понять, чего мне не хватает.
PS: Я новичок в Power Query, поэтому прошу прощения за очевидные оплошности.
Один из способов сделать это в Powerquery:
//code for Master Table
let Source = Excel.CurrentWorkbook(){[Name = "SourceDataMasterList"]}[Content],
#"Merged Queries" = Table.NestedJoin(Source, {"ID Number"}, weekly_update, {"ID Number"}, "weekly_update", JoinKind.LeftOuter),
Replace1=Table.ReplaceValue(#"Merged Queries", each [Title], each [weekly_update][Title]{0}??[Title] ,Replacer.ReplaceValue,{"Title"}),
Replace2=Table.ReplaceValue(Replace1, each [Description], each [weekly_update][Description]{0}??[Description] ,Replacer.ReplaceValue,{"Description"}),
Replace3=Table.ReplaceValue(Replace2, each [Status], each [weekly_update][Status]{0}??[Status] ,Replacer.ReplaceValue,{"Status"}),
Replace4=Table.ReplaceValue(Replace3, each [Disposition], each [weekly_update][Disposition]{0}??[Disposition] ,Replacer.ReplaceValue,{"Disposition"}),
#"Removed Columns" = Table.RemoveColumns(Replace4,{"weekly_update"})
in #"Removed Columns"
Примечание. x??y вернет x, если только x не равно нулю, и в этом случае возвращается y.