Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now! Learn more

Reply
divumj
Helper I
Helper I

Comparing two tables columns by columns

Hi all

 

I have system where data flow from one system to another system and I have output from those two system, data is ditto same line by line.

 

Now I have to perform check to ensure Data flow is correct, for which I  have create a unique in both tables and then join them to create a new table, then compare two columns by creating a custom formula. But it is very time consuming as I have to compare 70 odds columns.

 

Is there any quick way to compare data columns to columns

 

Table 1

 

Unique  col A    colB

Xxxxx.     False.    False

Yyyyyy.    False.    True

 

Table 2

Unique.    Col A.  Col B

Xxxxx.       False  False

Yyyyy.       True.   True

1 ACCEPTED SOLUTION
Anonymous
Not applicable

Hi @divumj ,
You can ttry the following code

let
    // Load Table 1
    Source1 = #"Table 1",
    // Load Table 2 and rename columns to avoid conflict
    Source2 = Table.RenameColumns(#"Table 2", List.Transform(Table.ColumnNames(#"Table 2"), each {_, _ & "2"})),
    // Merge Tables
    MergedTables = Table.NestedJoin(Source1, "Unique", Source2, "Unique2", "Table2", JoinKind.Inner),
    // Expand the merged table
    ExpandedTable = Table.ExpandTableColumn(MergedTables, "Table2", Table.ColumnNames(Source2)),
    // Get the list of columns to compare
    ColumnsToCompare = List.RemoveItems(Table.ColumnNames(Source1), {"Unique"}),
    // Function to compare columns
    CompareColumns = (table as table, columns as list) as table =>
        List.Accumulate(
            columns,
            table,
            (state, current) =>
                Table.AddColumn(
                    state,
                    "Compare_" & current,
                    each if Record.Field(_, current) = Record.Field(_, current & "2") then "Match" else "Mismatch"
                )
        ),
    // Apply the comparison function
    Result = CompareColumns(ExpandedTable, ColumnsToCompare),
    // Remove unnecessary columns
    FinalResult = Table.SelectColumns(Result, List.Combine({{"Unique"}, List.Transform(ColumnsToCompare, each "Compare_" & _)}))
    in
        FinalResult

Final output

vheqmsft_0-1726041728895.png

 

Best regards,
Albert He


If this post helps, then please consider Accept it as the solution to help the other members find it more quickly

 

View solution in original post

7 REPLIES 7
Anonymous
Not applicable

Hi @divumj ,
You can ttry the following code

let
    // Load Table 1
    Source1 = #"Table 1",
    // Load Table 2 and rename columns to avoid conflict
    Source2 = Table.RenameColumns(#"Table 2", List.Transform(Table.ColumnNames(#"Table 2"), each {_, _ & "2"})),
    // Merge Tables
    MergedTables = Table.NestedJoin(Source1, "Unique", Source2, "Unique2", "Table2", JoinKind.Inner),
    // Expand the merged table
    ExpandedTable = Table.ExpandTableColumn(MergedTables, "Table2", Table.ColumnNames(Source2)),
    // Get the list of columns to compare
    ColumnsToCompare = List.RemoveItems(Table.ColumnNames(Source1), {"Unique"}),
    // Function to compare columns
    CompareColumns = (table as table, columns as list) as table =>
        List.Accumulate(
            columns,
            table,
            (state, current) =>
                Table.AddColumn(
                    state,
                    "Compare_" & current,
                    each if Record.Field(_, current) = Record.Field(_, current & "2") then "Match" else "Mismatch"
                )
        ),
    // Apply the comparison function
    Result = CompareColumns(ExpandedTable, ColumnsToCompare),
    // Remove unnecessary columns
    FinalResult = Table.SelectColumns(Result, List.Combine({{"Unique"}, List.Transform(ColumnsToCompare, each "Compare_" & _)}))
    in
        FinalResult

Final output

vheqmsft_0-1726041728895.png

 

Best regards,
Albert He


If this post helps, then please consider Accept it as the solution to help the other members find it more quickly

 

Ahmedx
Super User
Super User

Based on your description, I created data to reproduce your scenario. The pbix file is attached in the end.

slorin
Super User
Super User

Hi, @divumj 

 

let
Source = Table.Combine({Table1, Table2}),

Compare = (t) =>
[a = Table.DemoteHeaders(t),
b = Table.Transpose(a),
c = Table.CombineColumns(b,{"Column2", "Column3"}, each _{0} = _{1}, "Compare"),
d = Table.Transpose(c),
e = Table.PromoteHeaders(d)][e],

Columns = List.Difference(Table.ColumnNames(Source), {"Unique"}),
Group = Table.Group(Source, {"Unique"}, {{"Data", each Compare(Table.RemoveColumns(_, "Unique")), type table}}),
Expand = Table.ExpandTableColumn(Group, "Data", Columns, Columns)
in
Expand

Stéphane 

@slorin sorry I am not that good with query writing, could you please explain a bit of your code.

Hi  @divumj

another solution

 

let
Source = Table.Combine({Table1, Table2}),

Columns = List.Difference(Table.ColumnNames(Source), {"Unique"}),
Group = Table.Group(Source, {"Unique"},
{{"Data", each #table(
Columns,
{List.Skip(
List.Transform(
List.Zip({Record.ToList(_{0}), Record.ToList(_{1})}),
each _{0} = _{1}))}), type table}}),
Expand = Table.ExpandTableColumn(Group, "Data", Columns, Columns)
in
Expand

the principle is to combine 2 tables and then group according to the "Unique" column

We obtain 2 rows per grouping and we compare the values of these 2 rows (the first of table 1 and the second of table 2)

Stéphane

 

 

PwerQueryKees
Super User
Super User

It depends a bit on what you would see in case of differences.

 

Some approaches coming to mind:

  • Do a merge on all columns full outer join. Expand the table and check for null in any field that should never have null and you have a discrepancy. Hard to diagnose where it is though.
  • Or add an index column to both tables, unpivot all columns except the index column, Do an inner join on the index and attribute columns. Anywhere the 2 values are not equal you have a discrpancy. Will give a mess when you are missing a record somewhere.
  • Or, same as last, but use an existing unique key instead of the index. Missing records are easier found.

I hope this gives you some ideas...

@PwerQueryKees Thanks I am almost doing same thing...but problem is our main focus is to not just identify records but also to look for any unwanted data transformation in any of the column...for which I have created a calculated filed in merge table...Colum a = table2.column a.

 

To write this formula I have literary type columns name one by one, which is very time consuming and I have to create multiple transformation on same grounds.

Helpful resources

Announcements
Power BI DataViz World Championships

Power BI Dataviz World Championships

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now!

November Power BI Update Carousel

Power BI Monthly Update - November 2025

Check out the November 2025 Power BI update to learn about new features.

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.