Business Professionals
Power BI | Power Pivot | Power Query | DAX
Cloud Flows | RPA | AI Builder | Copilot
60+ Formulas | Data Stories | Advanced Reporting & Modeling
VB Programming | Report Automation |
MS-Office Automation
Techno-Business Professionals
Power BI | Power Query | Advanced DAX | SQL - Query &
Programming
Microsoft Fabric | Power BI | Power Query | Advanced DAX |
SQL - Query & Programming
Power BI | Power Apps | Power Automate | Copilot Studio | Power Pages | Dataverse
Microsoft Power Apps | Microsoft Power Automate
Power BI | Adv. DAX | SQL (Query & Programming) |
VBA | Python | Web Scrapping | API Integration
Power BI | Power Apps | Power Automate |
SQL (Query & Programming)
Power BI | Adv. DAX | Power Apps | Power Automate |
SQL (Query & Programming) | VBA | Python | Web Scrapping | API Integration
Power Apps | Power Automate | SQL | VBA | Python |
Web Scraping | RPA | API Integration
Technology Professionals
Power BI | DAX | SQL | ETL with SSIS | SSAS | VBA | Python
Power BI | SQL | Azure Data Lake | Synapse Analytics |
Data Factory | Databricks | Power Apps | Power Automate |
Azure Analysis Services
Microsoft Fabric | Power BI | SQL | Lakehouse |
Data Factory (Pipelines) | Dataflows Gen2 | KQL | Delta Tables | Power Apps | Power Automate
Power BI | Power Apps | Power Automate | SQL | VBA | Python | API Integration
Power BI | Advanced DAX | Databricks | SQL | Lakehouse Architecture
Business Professionals
Power BI | Power Pivot | Power Query | DAX
Cloud Flows | RPA | AI Builder | Copilot
60+ Formulas | Data Stories | Advanced Reporting & Modeling
VB Programming | Report Automation |
MS-Office Automation
Techno-Business Professionals
Power BI | Power Query | Advanced DAX | SQL - Query &
Programming
Microsoft Fabric | Power BI | Power Query | Advanced DAX |
SQL - Query & Programming
Power BI | Power Apps | Power Automate | Copilot Studio | Power Pages | Dataverse
Microsoft Power Apps | Microsoft Power Automate
Power BI | Adv. DAX | SQL (Query & Programming) |
VBA | Web Scrapping | API Integration
Power BI | Power Apps | Power Automate |
SQL (Query & Programming)
Power BI | Adv. DAX | Power Apps | Power Automate |
SQL (Query & Programming) | VBA | Web Scrapping | API Integration
Power Apps | Power Automate | SQL | VBA |
Web Scraping | RPA | API Integration
Technology Professionals
Power BI | DAX | SQL | ETL with SSIS | SSAS | VBA
Power BI | SQL | Azure Data Lake | Synapse Analytics |
Data Factory | Azure Analysis Services
Microsoft Fabric | Power BI | SQL | Lakehouse |
Data Factory (Pipelines) | Dataflows Gen2 | KQL | Delta Tables
Power BI | Power Apps | Power Automate | SQL | VBA | API Integration
Power BI | Advanced DAX | Databricks | SQL | Lakehouse Architecture
Claims, utilization and risk data in insurance and healthcare is usually scattered across adjudication systems, data warehouses and vendor feeds, with different grain, different IDs and different refresh cadences. You get asked for a single view of loss ratios, care gaps and high‑cost members, and your existing Power BI reports either time out, misstate metrics, or collapse under new benefit years.
This article walks through a concrete scenario of building Power BI for Insurance & Healthcare Teams: Claims, Utilization and Risk Dashboards, focusing on how to structure the model, handle large fact tables, and design measures that actuaries, clinicians and finance will trust. The examples assume an employer‑sponsored environment in a market like Chicago, where multiple teams share Fabric and Power BI but have different analytical needs.
Imagine an internal analytics group supporting:
Data sources:
Technical constraints:
Pain points today:
We’ll rebuild this into a single semantic model that can serve multiple dashboards without breaking under load.
The first decision that affects everything else is storage mode. For this scenario, assume you have:
A pragmatic split that often works:
Key points to keep straight:
Import mode
DirectQuery mode
Composite models
For a large claims fact table, a common pattern is:
This split is best implemented in the warehouse or Lakehouse first (separate objects for detailed vs aggregated claims) and then surfaced into Power BI as separate tables, to avoid complex calculated tables over DirectQuery sources.
The core modeling risk in insurance and healthcare dashboards is mismatched grain:
The semantic model needs to make these relationships explicit.
Relationship rules that usually keep you out of trouble:
One active relationship per pair of tables at a time.
Eligibility as the core population table.
Avoid many-to-many where possible.
Suppose you need both incurred (service date) and paid views of claims. Create two relationships from DimDate to FactClaims_Current:
Then define measures like:
Total Paid Amount by Paid Date :=
CALCULATE(
SUM(FactClaims_Current[PaidAmount]),
USERELATIONSHIP(DimDate[Date], FactClaims_Current[PaidDate])
)
Total Incurred Amount by Service Date :=
SUM(FactClaims_Current[AllowedAmount])
This keeps the model clean while letting different teams switch date semantics explicitly in their visuals.
You’ll typically need three families of measures:
Start with core measures that are unambiguous:
Total Claims Paid :=
SUM(FactClaims_Current[PaidAmount]) +
SUM(FactClaims_History[PaidAmount])
Total Claims Allowed :=
SUM(FactClaims_Current[AllowedAmount]) +
SUM(FactClaims_History[AllowedAmount])
Total Premium :=
SUM(FactEligibility[PremiumAmount])
Loss Ratio :=
DIVIDE([Total Claims Paid], [Total Premium])
Notes:
Utilization is usually per 1,000 members, using eligibility as the denominator.
Member Months :=
SUM(FactEligibility[MemberMonths])
Admissions :=
CALCULATE(
COUNTROWS(FactClaims_Current),
KEEPFILTERS(FactClaims_Current[PlaceOfService] = "Inpatient"),
KEEPFILTERS(FactClaims_Current[ClaimType] = "Facility")
)
Admissions per 1000 :=
VAR denom := [Member Months]
RETURN
IF(
denom > 0,
( [Admissions] / denom ) * 1000,
BLANK()
)
Key points:
Admissions should align with your internal definition (place of service, revenue codes, etc.). Keep those filters centralized in measures rather than repeated in visuals.Risk scores are often stored as one row per member per risk period.
Average Risk Score :=
AVERAGEX(
FactRiskScores,
FactRiskScores[RiskScore]
)
High Risk Members Count :=
CALCULATE(
DISTINCTCOUNT(FactRiskScores[MemberID]),
KEEPFILTERS(FactRiskScores[RiskScore] >= 2.0)
)
Adjust the high-risk threshold to your program’s definition. The important part is using DISTINCTCOUNT to avoid double-counting members across multiple risk periods when filtered by year.
Insurance and healthcare claims data pushes Power BI harder than typical sales datasets. Performance tuning is not optional.
Focus on:
Source indexing
Query reduction in reports
Model simplification
Optimize VertiPaq usage:
On Premium capacity, use the built-in metrics app or Fabric monitoring:
Insurance and healthcare teams usually need strict access controls:
Define roles in Power BI Desktop using filters on dimension tables, not facts:
Role: RegionOps
DimRegion[RegionCode] = "Midwest"Role: PlanUM
DimPlan[UMAccessFlag] = TRUE()Then publish and assign users to roles in the Power BI service.
Notes:
With the semantic model in place, you can create multiple reports that share the same dataset:
Claims Operations Dashboard
Total Claims Paid, Total Claims Allowed, counts of open claims.Utilization Management Dashboard
Admissions per 1000, ED visits per 1,000, length of stay.Risk & Actuarial Dashboard
Average Risk Score, High Risk Members Count, Loss Ratio.All three reports point to the same dataset. That keeps definitions consistent and reduces duplication, but you still manage layout, filters and drill-through separately for each audience.
In markets with a strong insurance and healthcare cluster, it’s common to have:
Use that to your advantage:
For employer-sponsored buyers in a city like Chicago, the opportunity is to build a robust pattern once and then reuse it across lines of business and benefit years, rather than reinventing the model for every new program.
Before building your next claims or utilization dashboard, invest the time to define a single semantic model with clear grain, relationships and measures, and then hang multiple reports off that model. It’s the difference between endlessly patching slow, inconsistent reports and having a stable foundation that actuaries, clinicians and finance can all trust.
This article reflects the shift from ad‑hoc claims reports to shared semantic models in Power BI and Fabric, particularly in insurance and healthcare analytics teams working on employer‑sponsored benefits in dense regional markets.
Professionals who want to apply these patterns to their own data can explore Excelgoodies' Power BI Training in Chicago, Illinois programme - taught live by instructors, with certification awarded once a real project is running at work.
Insights compiled through ongoing industry research and discussions within the Excelgoodies Analytics Community.
Power BI
New
Next Batches Now Live
Power BI
SQL
Power Apps
Power Automate
Microsoft Fabrics
Azure Data Engineering