Skip to main content

Hi team,

I’ve solved duplicates in Object table, Object Change table and Events tables with ROW_NUMBER() OVER (PARTITION BY A."CASE_KEY") meaning each row is unique, and still I receive the below error from Celonis:

 

The data model contained joins that could not be executed in the user-defined direction due to duplicates in the dimension table. Please review the foreign key connections in Data Integration. The joins of the following tables have been executed successfully in the reverse direction: [Event table]1 --> N[Object table]
 

Does someone have any idea on how to solve it?

When there are duplicates on both tables, the model doesn’t even upload. In this case the duplicates seem to be in the Dimension table (I assume, is this the object table?) and therefore the model has been uploaded, but I’m not sure all the connections have been applied. 

 

Any ideas to solve this?

 

Thank you in advance!

Hello there!
 

This error happens because Celonis found duplicate IDs in a table that should only have one unique record per ID. This usually occurs when joining tables or calculating attributes.

Here’s a simple checklist to find and fix those duplicates:

  • Check the Object Table Itself:

    • Action: Run a query to group and count your main Object IDs (GROUP BY [ID] HAVING COUNT(*) > 1).

    • Goal: Ensure the source data for your primary object has only one row per unique ID.

  • Check Custom Attribute Joins:

    • Action: Look closely at the transformation logic that combines your main object with any custom attributes (the x_custom_celonis_Object tables).

    • Goal: Ensure your logic isn't accidentally multiplying the main object rows (e.g., if one object has two slightly different timestamps, but you're treating them as unique attributes).

  • Review Transformation Logic (Deduplication):

    • Action: Make sure any functions like ROW_NUMBER() or DISTINCT are running after all data is fully joined and processed.

    • Goal: If you have to keep duplicate records for an object (like multiple timestamps), you must aggregate or filter them (e.g., keep only the MAX timestamp or FIRST record) so that only one unique ID is passed to the next step.

  • Final Step: Reload the Data Model after fixing the transformation logic to apply the change.
    Hope it helps!