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

Domain-Oriented Marts/Data Products with Shared Enterprise Dimensions and Metrics

Design domain-owned analytical products that move quickly while reusing shared customer/product/date semantics and governed metrics, with clear ownership and change-propagation contracts.

Intermediate → Advanced145–180 minutesDomain product contract + dependency labFinance · Marketing · OperationsLast reviewed: September 2026

Learning outcomes

01

Define a domain data product as an owned analytical contract, not merely a table.

02

Reuse conformed dimensions and governed metrics while allowing domain-specific extensions.

03

Make ownership, refresh, quality, access, discovery, and version dependencies explicit.

04

Design marketing, finance, and operations marts with different outputs but shared semantics.

05

Handle breaking upstream changes through versioned dependency propagation rather than silent copies.

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. From “mart table” to domain data product

A domain data product is a maintained analytical output with named consumers, owner, semantics, quality/freshness expectations, access policy, lineage, and change process. The word “product” does not require a particular architecture. In AtlasMart, finance, marketing, and operations can own their delivery surfaces while the warehouse/semantic platform supplies standardized connection points.

Domain contract sketch
{  "finance": {    "owner": "finance-analytics",    "shared_contracts": ["gross_revenue_usd.v1", "fact_sales"],    "domain_outputs": ["daily revenue", "daily cost", "daily gross profit"]  },  "marketing": {    "owner": "growth-analytics",    "shared_contracts": ["gross_revenue_usd.v1", "dim_customer", "fact_sales"],    "domain_outputs": ["customer-day revenue slices", "campaign-specific extensions"]  },  "operations": {    "owner": "operations-analytics",    "shared_contracts": ["fact_sales", "dim_product", "dim_date"],    "domain_outputs": ["orders", "units", "fulfillment/stock extensions"]  }}

2. Shared core, domain-owned edge

Finance owns presentation choices for revenue/cost/profit, marketing owns campaign/audience extensions, and operations owns fulfillment/inventory extensions. They do notgross_revenue_usd.v1. This is the same enterprise-bus principle applied to team ownership: build incrementally by domain, integrate through conformed contracts.

Asset Shared or domain? Owner Allowed change
fact_sales grain Shared warehouse Version/migrate
gross_revenue_usd.v1 Shared finance-analytics Version/deprecate
Customer durable identity Shared customer-data stewardship Governed migration
Campaign creative family Marketing-only marketing analytics Domain-controlled
Warehouse pick-wave code Operations-only operations analytics Domain-controlled

3. Observable dependent mart outputs

Certified mart controls
Finance certified mart  revenue_usd: 820.00  cost_usd:    495.00  profit_usd:  325.00Operations certified mart  orders:      8  units:       12Marketing certified mart  revenue_usd: 820.00  customers:   5Certified wide delivery surface  rows:        10  revenue_usd: 820.00

The three domains answer different questions and therefore expose different grains. They still reconcile where they overlap: finance and marketing both see 820 USD because they consume the same governed revenue semantics. Operations can focus on 8 orders and 12 units without being forced into finance's presentation schema.

4. Consumer contract: more than columns

Example mart contract
{  "name": "mart_finance_daily",  "owner": "finance-analytics",  "grain": "one row per order_date",  "dependencies": ["fact_sales", "gross_revenue_usd.v1"],  "freshness": "after certified daily warehouse load",  "quality": ["revenue/cost/profit reconcile to atomic facts"],  "access_class": "finance-certified",  "change_policy": "breaking changes require new contract version"}

Discoverability comes from publishing this metadata in whatever catalog the organization uses. The mechanism is independent of catalog product choice.

5. Edge case: shrinking a shared dimension

A domain does not always need every customer attribute. A marketing mart may expose only customer ID, segment, and geography. That can still be conformed if the exposed attributes preserve the same domains and meanings as the governed dimension. Copying a subset is different from remapping G-EAST to a team-local “East-ish” bucket while retaining the same column name.

6. Change propagation without blocking domain delivery

When an upstream shared metric publishes a new version, existing domain products keep their pinned version until migration acceptance passes. Domain-only attributes can evolve on the domain cadence. This separates coordination where semantics are shared from autonomy where they are not. A dependency registry makes the blast radius queryable instead of relying on meetings and memory.

Impact query concept
SELECT mart_nameFROM mart_dependencyWHERE upstream_object='gross_revenue_usd.v1'ORDER BY mart_name;

7. Security and ownership boundaries

Ownership means responsibility for quality, freshness, documentation, support, and change—not unrestricted privilege. Domain teams may own a certified mart while access enforcement remains centralized in the database/semantic layer. The lab's access_class is metadata only; a production system must map it to actual identities, roles/policies, export controls, and audit logs.

8. Production judgment

Domain data products are useful when team accountability improves time-to-delivery and support, but they should consume shared contracts for enterprise concepts. Correctness: cross-domain controls must reconcile. Freshness/history: products state upstream watermark/version. Idempotency: rebuilds should not duplicate facts. Observability: owner, SLA, failures, and lineage are first-class. Cost: persist only where domain query/performance/value justifies duplication. Compatibility: catalog/RLS/materialization features vary by engine. Rollback: pin previous dependency versions until new certification succeeds.

9. Bridge to Lesson 3

Domain products still need ergonomic shapes. Lesson 3 examines the temptation to flatten everything into permanent wide reporting tables and shows how to keep convenience without creating a second semantic system.

Knowledge check

Check your understanding

  1. What makes a dataset a data product rather than just a table?
  2. Can a domain own a mart but not own the shared revenue definition?
  3. What permits a shrunken customer dimension to remain conformed?
Review the answers

1. Ownership plus consumer/semantic/quality/freshness/access/change contracts.

2. Yes; ownership of delivery and ownership of shared semantics are separable.

3. Reused attributes retain the same domain/content/meaning as the governed dimension.

Authoritative references

10. 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.