These standards bind every Power BI semantic model shipped from a Causeway workspace. They are not recommendations. Exceptions require a documented waiver in the PR description.

1. Sources

Danger

Databricks.Query is the first thing seasoned SQL developers reach for and the first thing to fail in DirectQuery. Custom SQL belongs in a Databricks view or dbt model that the connector reads like any other table. Enforce at review; Databricks.Query in a new model is a reject.

2. Model shape

If your Databricks gold layer is a proper star, model authoring becomes almost mechanical. If it is not, fix the marts before writing DAX.

3. Storage mode

Follow the decision tree from storage modes. Defaults:

ArtifactMode
Small static tablesImport
DimensionsImport (default) or Dual (mixed-mode models)
Facts in a model under capacity limitsImport
Facts too large to importDirectQuery with dims in Dual
Facts with the Fabric stackDirect Lake

Any deviation from these defaults requires justification in the PR.

4. Naming

ObjectPatternExample
Fact tablefct_<grain>fct_orders
Dimensiondim_<entity>dim_customers
Aggregateagg_<metric>agg_revenue_daily
Bridgebridge_<a>_<b>bridge_customer_segment
Columnsnake_casecustomer_id, placed_at
MeasureTitle Case with spacesTotal Revenue, Revenue YoY
Hidden helper measure_<Name>_Prior Period Revenue
Calculation groupTitle CaseTime Intelligence
Role<role-name>analyst, steward

Measures are user-facing and named in Title Case. Columns are storage-facing and named in snake_case. Do not mix.

5. Measures

Authoring rules (see DAX reference for details):

measure 'Revenue YoY' =
    VAR Current = [Total Revenue]
    VAR Prior   = CALCULATE([Total Revenue], SAMEPERIODLASTYEAR('dim_date'[date]))
    RETURN
        DIVIDE(Current - Prior, Prior)
    description: "Year-over-year change in Total Revenue. Blank when prior period is zero."
    formatString: "0.00%;-0.00%;0%"
    displayFolder: "Revenue"

6. Semantic model topology

See semantic models concept for the pattern.

7. Metric views

8. Refresh

See Enhanced Refresh.

9. Source control

See PBIP + Git guide.

10. Deploy

See CI/CD guide.

11. Automatic aggregations

12. Row-level security

role 'Regional Analyst'
    tableFilter
        'dim_customers' =
            'dim_customers'[region] = USERPRINCIPALNAME()

13. Documentation

Note

"Documented" means in the TMDL file, not in a Notion page. TMDL descriptions surface in Power BI's measure picker, in dbt exposures lineage, and in fabric-cicd validation. Notion pages drift.

14. Testing

15. Review checklist

PRs touching a semantic model must satisfy:

See also