Forum Discussion

j1s's avatar
j1s
Helper I
1 year ago
Solved

Merging / appending to keep all

I have 2 tables containing the number of times people attended per week that look like this:   Table 1: Full Name 2024-11-25 2024-12-02 2024-12-09 2024-12-16 Name 1       ...
  • dufoq3's avatar
    1 year ago

    Hi j1s, I recommend Table.Join function for this purpose:

     

    Output

    let
        Table1 = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8kvMTVUwVNJRgiNDpVgdqLgRTARMGSEkjJE1IIRNoIoNMUwyxWWSGaoWhIQ5disskNQboshYYtdgaIBitVJsLAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Full Name" = _t, #"2024-11-25" = _t, #"2024-12-02" = _t, #"2024-12-09" = _t, #"2024-12-16" = _t]),
        Table2 = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8kvMTVUwVNJRAiI4FasDlTCCiBhDJY0QMsYQGQwdJkiCQAoubooQRJUwQ7UCyShzhAyq3RaoZiFpscSlxdAApx5DCwOcuiwMMbTFAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Full Name" = _t, #"2025-01-01" = _t, #"2025-01-08" = _t, #"2025-01-15" = _t, #"2025-01-22" = _t]),
        T2_RenamedColumn = Table.RenameColumns(Table2,{{"Full Name", "Full Name2"}}),
        Merged = Table.Join(Table1, "Full Name", T2_RenamedColumn, "Full Name2", JoinKind.FullOuter),
        ReplacedFullName = Table.ReplaceValue(Merged, 
            each [Full Name] is null,
            each [Full Name2],
            (x,y,z)=> if y then z else x,
            {"Full Name"} ),
        RemovedColumns = Table.RemoveColumns(ReplacedFullName,{"Full Name2"})
    in
        RemovedColumns
  • PwerQueryKees's avatar
    1 year ago

    Sorting the columns is not that easy, because your column names are text and we need a date sort.

    But this works:

    let
        #"Unpivoted Table1" = Table.UnpivotOtherColumns(Table1, {"Full Name"}, "Attribute", "Value"),
        #"Unpivoted Table2" = Table.UnpivotOtherColumns(Table2, {"Full Name"}, "Attribute", "Value"),
        #"Unpivoted Table3" = Table.UnpivotOtherColumns(Table3, {"Full Name"}, "Attribute", "Value"),
        #"Unpivoted ALL"= Table.Combine({#"Unpivoted Table1",#"Unpivoted Table2",#"Unpivoted Table3"}),
        #"Added Custom" = Table.AddColumn(#"Unpivoted ALL", "Dates", each [Attribute]),
        #"Changed Type" = Table.TransformColumnTypes(#"Added Custom",{{"Dates", type date}}),
        #"Grouped Rows" = Table.Group(#"Changed Type", {"Attribute", "Dates"}, {{"Count", each Table.RowCount(_), Int64.Type}}),
        #"Sorted Rows" = Table.Sort(#"Grouped Rows",{{"Dates", Order.Ascending}}),
        #"Pivoted Column" = Table.Pivot(#"Unpivoted ALL", List.Distinct(#"Unpivoted ALL"[Attribute]), "Attribute", "Value", List.Sum),
        #"Reordered Columns" = Table.ReorderColumns(#"Pivoted Column",#"Sorted Rows"[Attribute])
    in
        #"Reordered Columns"

    Producing this:

     

    About the missing dates: I suspect this will not be a problem in real life.

     

    But if it is:

    • create a table with all possible dates, for exapmple by querying the dat range in the orignal dataset
    • Transpose the table
    • Use Forst Row as Headers
    • And if needed, remove all rows with a Table.SelectRows(#"Promote Headers", each false)
    • and then do a Table.Union of this table with the pivoted table

    I doubt this will be worth the trouble ....

    Did I answer your question? Then please (also) mark my post as a solution and make it easier to find for others having a similar problem.
    Remember: You can mark multiple answers as a solution...
    If I helped you, please click on the Thumbs Up to give Kudos.

    Kees Stolker

    A big fan of Power Query and Excel