Skip to main content
Question

Best practices modelling architecture DSA, MDW and star scheme

  • July 2, 2026
  • 3 replies
  • 44 views

Forum|alt.badge.img

Hi all,

I am looking for architectural advice on designing a future-proof multi-ERP data warehouse setup in TimeXtender.

We currently have multiple ERP systems feeding into one data warehouse. The goal is to create a scalable pattern that works now, but also remains maintainable when more ERP systems are added later.

The main question is around where and when to create keys, especially super natural keys / business keys, and where to perform the joins between facts and dimensions. I found some scattered articles on keys and stuff, but not really an proposed best practice in TimeXtender. I understand there are multiple ways to Rome depending on the setup/preferences/performance etc. but I reckon there would be an advices standard based on TimeXtender working and fundamentals. 

Example simplified architecture:

DSA.ERP1.Customers
- CustomerID
- CustomerName
- DW_SourceCode
- SNK_Customer = DW_SourceCode + CustomerID

DSA.ERP1.Invoices
- InvoiceID
- CustomerID
- Amount
- DW_SourceCode
- SNK_Invoice = DW_SourceCode + InvoiceID
- SNK_Customer = DW_SourceCode + CustomerID

DSA.ERP2.Customers
- CustomerID
- CustomerName
- DW_SourceCode
- SNK_Customer = DW_SourceCode + CustomerID

DSA.ERP2.Invoices
- InvoiceID
- CustomerID
- Amount
- DW_SourceCode
- SNK_Invoice = DW_SourceCode + InvoiceID
- SNK_Customer = DW_SourceCode + CustomerID

Then in staging:

DSA.dim_customer
- DW_ID / surrogate key - system generated
- Customer_SNK
- Source
- Customer_ID
- Customer_Name
DSA.fact_turnover
- Invoice_SNK
- Customer_SNK
- Customer_FK
- Amount

The intended logic is:

Source invoice tables in all ERP’s
    ↓
Create SNK_Invoice and SNK_Customer in DSA in every ERP invoice table
    ↓
Union/insert into staging.fact_turnover
    ↓
Lookup Customer_FK by joining fact_turnover.Customer_SNK to dim_customer.Customer_SNK
    ↓
Use Customer_FK as the relationship to dim_customer.DW_ID

 

  1. Is this the recommended pattern in TimeXtender for a multi-ERP architecture?
  2. Should SNKs be created directly in the individual DSA source tables, or later in a consolidated staging layer?
  3. At which layer would you normally perform the lookup the fact to the dimension to get the dimension surrogate key, in this case DW_ID. In the DSA or in the MDW?
  4. Are there TimeXtender-specific features or best practices we should use for this, such as SCD for dimensions, hashing over SNK or just have multiple PK columns?

It would be great if there’s like a template already for a multi ERP environment on how to best build your dimension and facts and where to do which transformation in the knowledge base. If not, it might be an idea to create one.

3 replies

rory.smith
TimeXtender Xpert
Forum|alt.badge.img+8
  • TimeXtender Xpert
  • July 3, 2026

Hi,

afaik there are at least a few discussions on supernatural key vs. dw_id surrogate keys in the community. My preference is to avoid supernatural keys unless the situation explicitly demands it as they are quite computationally expensive. You can make them less slow by only generating them in dimension tables and using a conditional lookup to pull the key value into facts instead of the integrated way of adding them.

The core training I give covers surrogate keys and history quite deeply as those are the trickiest for people to get used to (and there are some sneaky things involved). 

What you choose to do tends to depend on the team you are working with and specifics of the organisation you work for. You may have many instances of the same ERP but be required to separate the data due to policy for instance.

In my opinion clarity and fit with your team is more important than squeezing the last drop of performance out of things.


  • Contributor
  • July 6, 2026

Hi Rory,

What core training are you talking about?

 

Pieter


rory.smith
TimeXtender Xpert
Forum|alt.badge.img+8
  • TimeXtender Xpert
  • July 6, 2026

Hi,

that's how we organize our TimeXtender trainings: Core is a two-day course that covers the Basics / Optimization topics from the TimeXtender trainings.