Menu

Topic 2 of 8

Semantic Model Readiness

Learn Semantic Model Readiness for free with explanations, exercises, and a quick test (for Data Architect).

Published: January 18, 2026 | Updated: January 18, 2026

Who this is for

This lesson is for Data Architects and Analytics Engineers who design dimensional models and need them to be plug-and-play in BI tools like Power BI, Looker, and Tableau.

Prerequisites

  • Comfort with star schemas (facts, dimensions, grain)
  • Basic SQL and data types
  • Awareness of SCD strategies (Type 1 vs Type 2)

Why this matters

Semantic Model Readiness means your dimensional model can be safely and quickly consumed by BI semantic layers. In real work, this translates to fewer ad-hoc fixes, consistent metrics, and faster dashboards.

  • Sales dashboards calculate revenue, margin, and conversion consistently across teams.
  • Finance can close monthly books without manually reworking measures.
  • Analysts can self-serve with friendly names, sensible defaults, and clear hierarchies.

Concept explained simply

Dimensional modeling organizes data for analytics. Semantic readiness makes that model directly usable by BI tools: business-friendly names, clear grain, defined relationships, validated measures, and secure access.

Mental model

Think of semantic readiness as a pre-flight checklist. Your star schema is the plane; the checklist ensures it’s safe and easy to fly in any BI tool, without last-minute fixes.

Semantic readiness checklist

Naming & usability
  • Business-friendly names in the semantic layer (e.g., "Orders" not "fct_order").
  • Column descriptions for key fields (e.g., "Gross Revenue before discounts").
  • Default aggregations (sum, avg, count distinct) are sensible and safe.
Grain & relationships
  • Fact table grain is explicitly documented (e.g., one row per order line).
  • Primary keys and foreign keys are clean; no orphaned fact rows.
  • Role-playing dimensions are surfaced (e.g., Order Date, Ship Date).
Dimensions & SCD
  • Conformed dimensions align across facts (same keys and definitions).
  • SCD Type 2 includes effective_from, effective_to, is_current flags.
  • Type 1 for current attributes is intentional and documented.
Measures & calculations
  • Measures categorized: additive, semi-additive, non-additive.
  • Time-intelligence definitions are clear (MTD, QTD, YTD, rolling windows).
  • Denominators for ratios are unambiguous (e.g., unique customers vs orders).
Hierarchies & navigation
  • Common hierarchies pre-defined: Date (Year > Quarter > Month > Day), Product (Category > Subcategory > SKU).
  • Geography levels are consistent (Country > State > City).
Data types, units, and nulls
  • Appropriate numeric types (currency uses decimals with correct precision).
  • Units documented (e.g., USD, kg, hours) and consistent.
  • Null-handling policy defined (e.g., null vs 0 vs "Unknown").
Security & privacy
  • Row-level security attributes exist (e.g., region_id on facts or bridge table).
  • PII fields are masked or excluded as required.
  • Role definitions and allowed columns are documented.
Performance & modeling strategy
  • Star schema shape kept for BI; avoid excessive snowflaking in the semantic layer.
  • High-cardinality columns indexed/partitioned upstream; aggregates considered.
  • Bridge tables used for many-to-many where needed (e.g., customers to segments).
Freshness, quality, and lineage
  • Audit columns (load_ts, source_system, row_hash) present where helpful.
  • Row count and referential integrity checks automated.
  • Source-to-target mapping and definitions versioned and discoverable.

Worked examples

Example 1: Sales analytics star schema readiness

Scenario: fact_sales at order line grain with dim_date, dim_customer, dim_product, dim_geography.

  • Naming: Expose as "Sales" with measures "Revenue", "Units Sold", "Discount Amount".
  • Grain: One row per order line; documented in model description.
  • Role-playing dates: Order Date and Ship Date via dim_date role aliases.
  • Measures: Revenue = unit_price * quantity - discount; Margin = Revenue - cost.
  • Time intelligence: YTD Revenue and 28-day rolling Revenue defined.
  • Security: Region-level RLS using dim_geography.region_id mapped to user roles.

Outcome: Analysts can drag-and-drop with correct totals and drill-down by Date > Product > Customer.

Example 2: Subscription metrics (MRR and churn)

Issue: MRR is semi-additive across time; simple summing across days double-counts.

  • Modeling: Create a monthly snapshot fact_subscriptions_monthly at subscriber-month grain.
  • Measures: MRR = sum(mrr_amount); Churn Rate = churned_subscribers / prior_month_active.
  • Time logic: Period-end snapshot used for cumulative views.

Outcome: Monthly and quarterly comparisons are correct without custom analyst logic.

Example 3: Inventory on hand (semi-additive)

Problem: Inventory_on_hand should not be summed across days.

  • Modeling: fact_inventory_snapshots at daily product-location grain.
  • Measure: Inventory on Hand uses last non-empty value when aggregating over time.
  • Performance: Optional weekly aggregates for faster reporting.

Outcome: End-of-month stock levels remain accurate across month filters.

Step-by-step: Make a model BI-ready

Step 1: Confirm grain. Write it in the model description.
Step 2: Validate keys and relationships (no orphans; enforced in tests).
Step 3: Define measures with formulas, type (additive/semi/non), and default aggregation.
Step 4: Add role-playing dimensions and hierarchies.
Step 5: Set data types, formats, and units; document them.
Step 6: Implement row-level security attributes.
Step 7: Run data quality checks (freshness, duplicates, referential integrity).
Step 8: Rename to friendly labels for business users; add descriptions.

Hands-on exercises

Complete these exercises, then open the Quick Test section below. Note: The test is available to everyone; only logged-in users will have progress saved.

Exercise 1: Create a readiness plan for a retail sales model

Mirror of exercise ex1 in the Exercises panel. Produce a checklist and proposed fixes.

Exercise 2: Define measures and grain for subscriptions

Mirror of exercise ex2. Specify fact grain, key measures, and time behavior.

Self-check checklist

  • I can state the exact grain of each fact table in one sentence.
  • Every exposed measure has a clear formula and default aggregation.
  • Role-playing dimensions and hierarchies are available in the semantic layer.
  • RLS attributes exist and can be mapped to user roles.
  • Common semi-additive cases (inventory, MRR) are handled correctly.

Common mistakes and how to self-check

  • Mistake: Ambiguous grain. Self-check: Randomly pick 5 rows and verify one-row-per-grain rule.
  • Mistake: Summing semi-additive metrics across time. Self-check: Compare summed vs last-day values over a month.
  • Mistake: Missing role-playing dates. Self-check: Can you filter by both Order Date and Ship Date independently?
  • Mistake: Inconsistent conformed dimensions. Self-check: Join facts through the same dim keys and confirm matching counts.
  • Mistake: Over-snowflaked dims in BI. Self-check: Count hops from fact to attributes; prefer 1 hop.
  • Mistake: Unclear definitions. Self-check: Ask two analysts to define "Revenue"; if they differ, your definition is not ready.

Practical projects

  • Project 1: Make a Sales model BI-ready. Deliver friendly names, 6 core measures, date and product hierarchies, and region RLS.
  • Project 2: Build a Subscription monthly snapshot with churn metrics and validate semi-additive behavior.
  • Project 3: Implement data quality tests for referential integrity and freshness on two core facts.

Learning path

  • Before: Dimensional modeling basics, SCD strategies, conformed dimensions.
  • This lesson: Semantic readiness across naming, grain, measures, hierarchies, RLS, and quality checks.
  • After: Tool-specific semantic layers (Power BI/Looker), performance tuning with aggregates, governance and documentation workflows.

Next steps

  • Apply the checklist to one production star schema.
  • Document 5 critical measures with formulas and edge cases.
  • Pilot RLS for one region or business unit.
  • Run the Quick Test below to confirm understanding.

Mini challenge

Your CFO needs "Gross Margin % by Quarter by Product Category" and "Inventory on Hand end of month". Without writing custom BI logic, adjust your model so both visuals are correct by drag-and-drop. What specific changes do you make to measures, hierarchies, and time behavior?

Hint
  • Define Margin% = (Revenue - Cost) / Revenue with safe denominators and default percentage formatting.
  • Ensure Date hierarchy exists and Quarter rolls up correctly.
  • Set Inventory to last non-empty over time; avoid sum across days.

Practice Exercises

2 exercises to complete

Instructions

You have a star schema:

  • fact_sales (order_line_id, order_id, product_id, customer_id, order_date_id, ship_date_id, unit_price, quantity, discount_amount, cost_amount)
  • dim_product (product_id, sku, subcategory, category)
  • dim_customer (customer_id, customer_tier, region_id)
  • dim_date (date_id, date, month, quarter, year)
  • dim_region (region_id, region_name)

Issues found: missing role-playing date exposure, no default aggregations, unclear "revenue" definition, orphaned fact rows for some product_id, and analysts are summing inventory_on_hand across days from another fact.

Task: Produce a semantic readiness plan: fixes, measure definitions, RLS approach, and tests you would add.

Expected Output
A concise plan covering naming, grain, relationships, measures (Revenue, Units, Margin, Margin%), role-playing dates, hierarchies, RLS, data quality tests, and a note on semi-additive metrics.

Semantic Model Readiness — Quick Test

Test your knowledge with 8 questions. Pass with 70% or higher.

8 questions70% to pass

Have questions about Semantic Model Readiness?

AI Assistant

Ask questions about this tool