Chapter 21 · Data Marts, Domain Data Products, Self-Service Analytics, and Ownership

Dependent vs Independent Marts and Why Independent Silos Break Conformance

Separate dependent and independent marts by lineage, reproduce a deliberate revenue fork, and prove why enterprise conformance must be inherited rather than recreated by each team.

Intermediate → Advanced140–175 minutesDependent vs independent mart drift lab820 USD governed vs 665 USD driftLast reviewed: September 2026

Learning outcomes

01

Distinguish dependent marts from independent marts by lineage and semantic ownership, not by database location.

02

Explain why copying source data plus local metric definitions creates incompatible analytical silos.

03

Reproduce a many-team failure in which a mart still looks plausible but reports a different enterprise revenue.

04

Repair the mart by inheriting governed dimensions/metrics and verify conformance with control totals.

05

Judge when autonomy helps delivery and when it crosses into semantic fragmentation.

Continuity and explicit mart-layer addition

Chapter 21 begins from Chapter 20's governed warehouse/semantic truth: 10 current paid lines, 8 orders, 12 units, 820 USD gross revenue, 495 USD cost, and 325 USD gross profit. The canonical fact grain remains one current paid order line. The active semantic contracts remain gross_revenue_usd.v1, active_customers.v1, and period_retention.v1. This chapter does not redefine those facts or metrics. It adds domain delivery surfaces—marts, data products, sandboxes, and certified outputs—whose shared concepts must inherit the governed contracts.

Lab contract

Runtime: Python standard library plus SQLite; generation evidence uses the local runtime reported by the script. Environment: local/in-process, synthetic, and no-cost. Storage: one SQLite file plus JSON evidence; views stand in for dependent marts. Source: the Chapter 20 AtlasMart fact/dimension fixture. Time: warehouse order_date semantics remain UTC and are not silently converted. Currency: governed gross revenue is USD-only. Security: access-class labels are metadata in this lab, not database-enforced authorization; production enforcement belongs in the warehouse/semantic/security stack. History: existing SCD/history semantics are unchanged. Portability: the mart concepts are vendor-neutral; view syntax, catalog metadata, masking, policy enforcement, and materialization are engine-specific.

1. The realistic problem: three teams need answers now

Finance wants daily revenue/profit, marketing wants customer and campaign slices, and operations wants orders and units. A data mart is a curated analytical dataset optimized for a bounded audience or subject. A dependent mart derives its shared business meaning from governed warehouse assets. An independent mart derives directly from source systems or team-local copies and owns its own definitions. The physical database can be identical in both cases; the dependency and semantic contract are what differ.

The business decision is whether AtlasMart can let domains deliver quickly without making “customer” and “revenue” mean different things. The source event is still one paid order line. The declared warehouse grain has not changed. The consumer changes—from enterprise semantic queries to domain-specific delivery surfaces—and that is exactly where drift can be introduced.

2. A mart boundary is not a permission to redefine enterprise meaning

Question Dependent mart Independent mart
Where does revenue semantics come from? gross_revenue_usd.v1 Team-local SQL/filter
Where does customer meaning come from? Governed dim_customer Copied/reshaped source
Can shared definitions change independently? No; versioned upstream contract Yes, often silently
Can domain-specific fields exist? Yes, if clearly owned/namespaced Yes, but shared concepts are not automatically conformed

Domain autonomy and conformance are not opposites. A marketing team may own campaign attribution logic while still consuming the enterprise customer identity and governed revenue metric.

3. Controlled failure: the independent marketing mart

A practitioner copies paid order lines and decides the sales channel is “not marketing,” so it adds channel <> 'sales'. The result is then named simply revenue. Nothing crashes. The dataset is syntactically valid and the output looks reasonable.

Unsafe independent mart
CREATE TABLE sandbox_marketing_revenue ASSELECT order_date, SUM(amount_cents)/100.0 AS revenueFROM fact_salesWHERE status='paid' AND currency_code='USD'  AND channel <> 'sales'GROUP BY order_date;
Observed semantic drift
governed gross_revenue_usd.v1:        820.00 USDindependent marketing "revenue":        665.00 USDdelta:                                 -155.00 USDreason: hidden predicate channel <> 'sales'certification decision before repair:   BLOCKcertification decision after repair:    CERTIFY

The missing 155 USD is not a database bug: it is the two paid sales-channel lines (75 + 80). If the team wanted a marketing-attributed metric, it needed a different, explicitly named metric with an attribution contract. Reusing the generic word “revenue” hides a business-rule fork.

4. Repair: inherit shared meaning, extend only the domain-specific surface

Repaired marketing mart
CREATE VIEW marketing_revenue_v1 ASSELECT f.order_date,c.segment,c.geography_code,       SUM(f.amount_cents)/100.0 AS governed_revenue_usdFROM fact_sales AS fJOIN dim_customer AS c USING(customer_id)WHERE f.status='paid' AND f.currency_code='USD'GROUP BY f.order_date,c.segment,c.geography_code;

The mart now inherits customer conformance and the Chapter 20 revenue filter/currency semantics. Marketing remains free to add campaign, audience, or channel-specific measures, but those should use distinct names and owners when their semantics differ from the enterprise metric.

5. Make the dependency structure observable

Mart dependency map
mart_finance_daily  <- fact_sales  <- gross_revenue_usd.v1mart_operations_daily  <- fact_salesmart_marketing_customer_daily  <- fact_sales  <- dim_customer  <- gross_revenue_usd.v1mart_marketing_wide  <- fact_sales  <- dim_customer  <- dim_product  <- gross_revenue_usd.v1marketing_revenue_v1 (after repair)  <- fact_sales  <- dim_customer  <- gross_revenue_usd.v1

This graph is lineage, not just documentation. It answers impact questions: if gross_revenue_usd.v1 is deprecated, which marts must migrate? If dim_customer changes geography semantics, which certified products require regression tests?

6. Edge case: central governance can become a bottleneck too

A different failure is to require the central platform team to approve every domain-only attribute before a marketer can experiment. That protects conformance by stopping delivery. The safer boundary is: shared enterprise concepts are governed centrally/federatively; domain-only concepts are domain-owned but must be documented, versioned, and not masquerade as shared definitions. A sandbox can move fast; certification is the point where enterprise reuse requirements become mandatory.

7. Production judgment

Choose a dependent mart when consumers need domain ergonomics but enterprise metrics/dimensions must remain comparable. An independent analytical dataset may be justified for isolated research, acquisition data, or external datasets that have no enterprise identity yet, but do not certify it as an enterprise mart until shared semantics are reconciled. Correctness: row counts alone do not prove conformance. Freshness: mart SLAs cannot exceed upstream truth without disclosing staleness. Retry/replay: rebuilds should be deterministic from versioned dependencies. Security: copying data may create new bypass paths. Performance/cost: duplication may reduce query latency while increasing storage/refresh cost. Rollback: retain the previous certified contract and route consumers back to the governed semantic layer if promotion fails.

8. Bridge to Lesson 2

Lesson 1 established the non-negotiable rule: shared meaning is inherited. Lesson 2 turns that into a practical domain-data-product contract with owners, dependencies, SLAs, access boundaries, and independently evolvable domain extensions.

Knowledge check

Check your understanding

  1. Can a mart be physically separate and still be dependent?
  2. Why is 665 USD dangerous even though its SQL is valid?
  3. What should marketing do if it really wants channel-attributed revenue?
  4. What is the central platform allowed to own?
Review the answers

1. Yes; dependency is semantic/lineage, not physical co-location.

2. It silently reuses the generic revenue name while changing the population.

3. Define/version a distinct owned metric with explicit attribution semantics.

4. Shared contracts and certification guardrails, not every domain-only experiment.

Authoritative references

9. Lab cleanup/reset

Delete atlasmart_ch21_lab (or your configured local output directory) and rerun python ch21_lab.py to recreate a clean deterministic state. No cloud resource or repository file is modified by the lab.

Keep knowledge open

Help the academy stay free and grow.

If these tutorials save you time, a small donation supports new lessons, technical review, diagrams, examples, and long-term maintenance.

ETHEthereum / ERC-20 only
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0

Send only Ethereum or ERC-20 compatible assets to this address.