Interactive case study

Enterprise Power BI with SOX Controls

A SOX-regulated financial institution needs a unified mortgage-servicing dashboard that is fast, consistent, and audit-ready. This demonstrates how I design a Power BI solution that satisfies both analytical and control requirements.

Executive Summary

I demonstrate a governed Power BI solution on a star schema (FactPayments, Loan, Borrower, Calendar) with business logic standardized in SQL Server views, shaped in Power Query / M, with incremental refresh and partitioning for speed, and Row-Level Security aligned to SOX access matrices. Every measure, refresh, and access grant is documented so the report doubles as audit evidence.

98.5%
Definition consistency
1.3s
Median visual response
100%
Measures with documented lineage
4 tables
Core star schema

01 Problem — example scenario

A SOX-regulated financial institution needs a unified mortgage-servicing dashboard. Reporting definitions vary across departments, refreshes are slow, and auditors require traceability and access controls. Executives cannot agree on a single number, and every reporting cycle triggers manual reconciliation.

02 Constraints

03 Architecture — lineage diagram

Source systems flow through governed SQL views into a partitioned star schema and a documented semantic layer. The keystone is the semantic model, where definitions and security live.

Source Systemsservicing · GL
SQL Server Viewsstandardized logic
Semantic ModelDAX · RLS · lineage
Power BI ReportKPIs · drill-through

04 Dimensional model — star schema

A classic star keeps the model fast and the definitions unambiguous: one fact surrounded by conformed dimensions.

FactPayments star schema ERD — DimBorrower, DimCalendar, DimLoan, DimStatus, DimProduct and DimBranch joined one-to-many to the FactPayments fact, showing primary keys, foreign keys, and measures

05 Solution demonstration

The example dashboard standardizes definitions and makes them explorable while keeping controls intact:

06 Dashboard — interactive executive view

This dashboard demonstrates the full solution — KPI cards & drill-through, MTD/QTD/YTD time-intelligence, saved bookmarks, and live Row-Level Security: change Viewing as and watch the model filter to only the portfolios a role may see. Sample data.

Mortgage Servicing · Executive Last refresh 02:00 · 04:12 · YTD · ALL
Collections by Branch $M / mo
Payment Trend $M collected
Loan Mix by Product share of active loans
On-time Rate vs 99.0% target

07 DAX — semantic-layer measures

Measures are authored in the semantic layer with time-intelligence and clear naming so report authors never redefine business logic.

Measures — Portfolio.daxDAX
// -- Total scheduled principal + interest collected (MTD) --
Payments Collected MTD =
    CALCULATE(
        SUM( FactPayments[AmountCollected] ),
        DATESMTD( DimCalendar[Date] )
    )

// -- Delinquency rate with SOX-safe division --
Delinquency Rate =
    DIVIDE(
        CALCULATE( [Active Loans], DimStatus[IsDelinquent] = TRUE ),
        [Active Loans]
    )

// prior-period and rolling-12M variance measures follow the same pattern

08 RLS & SOX control explanation

Row-Level Security enforces SOX segregation of duties directly in the model. A security table maps each user (or AD group) to the portfolios they are authorized to view; the RLS role filters every fact query to that authorization. Because the rule lives in the model — not in each report — it is testable, documented, and auditable.

RLS Role — PortfolioAccessDAX
// Applied on DimBranch; USERPRINCIPALNAME() maps to the SecAccess security table
DimBranch[BranchKey]
    IN
    CALCULATETABLE(
        VALUES( SecAccess[BranchKey] ),
        SecAccess[UserPrincipal] = USERPRINCIPALNAME()
    )
SOX access matrix — roles mapped to portfolios, granted vs RLS-filtered
Refresh and access audit log — load durations, success rate, and access events with status

09 Outcome — demonstration

This example shows how a modern Power BI solution can, in practice:

← BackAll demonstrations Next →02 · SQL Performance & Modeling