Forum Discussion

jaryszek's avatar
jaryszek
Super User
6 years ago
Solved

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

 

  • jaryszek 

    // 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

  • ziying35's avatar
    ziying35
    Impactful Individual

    jaryszek 

    // 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-msft's avatar
    v-juanli-msft
    Community 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.