Forum Discussion
Changing defaults table based on customizations table and composite keys
Hi Guys,
I am using PQ in Excel.
i have 2 sources: t_Defaults and t_Customizations with composite Key: Topology&Tier&Function
As a base i am using t_Defaults but what i want to do this is:
1) If any row in t_Customizations is fullfilled (all columns, if one is empty - skip this row !) replace corresponding row (composite key) with corresponding composite key from t_Defaults.
2) If table t_Customizations is empty - just use t_Defaults.
Expected result:
So as you can see:
1) First row has been replaced from (Topo1&Tier1&Function1 key) t_Defaults with corresponding values from t_Customizations
2) Second row has been replaced from (Topo2&Tier2&Function2 key) t_Defaults with corresponding values from t_Customizations
3) third row from t_defaults was not replaced because key Topo3&Tier3&Function3 do not exists in t_Customizations table.
I am adding also my example Excel into google drive:
https://drive.google.com/file/d/1XhjPvYp8QANPFb1n-KJG5aMSnPz4SiZC/view?usp=sharing
Please help how to do this. I am starting my adventure with PQ currently.
Best Wishes,
Jacek
// t_Customizations let Source = Excel.CurrentWorkbook(){[Name="t_Customizations"]}[Content] in Source // output let keys = List.FirstN(Table.ColumnNames(t_Customizations), 3), acc = List.Accumulate( Table.ToRecords(t_Customizations), t_Defaults, (s,c)=>let pos = Table.PositionOf(s, Record.SelectFields(c, keys), 0, keys) in Table.ReplaceRows(s, pos, 1, {c}) ) in acc // t_Defaults let Source = Excel.CurrentWorkbook(){[Name="t_Defaults"]}[Content] in Source
2 Replies
- ziying35Impactful Individual
// t_Customizations let Source = Excel.CurrentWorkbook(){[Name="t_Customizations"]}[Content] in Source // output let keys = List.FirstN(Table.ColumnNames(t_Customizations), 3), acc = List.Accumulate( Table.ToRecords(t_Customizations), t_Defaults, (s,c)=>let pos = Table.PositionOf(s, Record.SelectFields(c, keys), 0, keys) in Table.ReplaceRows(s, pos, 1, {c}) ) in acc // t_Defaults let Source = Excel.CurrentWorkbook(){[Name="t_Defaults"]}[Content] in Source - v-juanli-msftCommunity Support
Hi jaryszek
protocol1 = IF ( RELATED ( t_Customizations1[StorageProtocol] ) <> BLANK (), RELATED ( t_Customizations1[StorageProtocol] ), t_Defaults2[StorageProtocol] ) version1 = IF ( RELATED ( t_Customizations1[ProtocolVersion] ) <> BLANK (), RELATED ( t_Customizations1[ProtocolVersion] ), t_Defaults2[ProtocolVersion] )Best Regards
Maggie
Community Support Team _ Maggie Li
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.