The Challenge
A healthcare risk management firm helps care facilities track, investigate, and learn from incidents such as falls. Its incident management runs on Salesforce, and its clients work in a custom customer portal where they report and follow up on incidents.
Clients kept asking the same questions: How quickly are incidents being responded to and closed? Which types of incidents are trending up? How does this quarter compare to the last? The answers existed in the data, but getting them to clients meant assembled reports and separate tools, and every extra login was another reason not to look.
The firm needed to:
- Turn incident data into clear, client-ready risk analytics.
- Show both what is happening now and how things have changed over time.
- Put the most important numbers inside the portal clients already use.
- Keep authentication secure and licensing costs predictable as more clients come on board.
The Approach
BRIO began with a proof-of-concept “lookback” design, a clickable mockup of the reporting the firm wanted to offer, so the firm could react to the experience before any data work began. With the design agreed, the team modeled the Salesforce incident data for analytics and built the dashboards in Tableau, releasing them to the firm and one of its care-provider clients for testing.
Feedback shaped each release: charts the client found hard to read became bar charts, internal record names were replaced with the incident numbers users actually know, and date filters were expanded to year and quarter. The team also treated embedding as its own design problem from the start, since putting analytics inside a customer-facing portal raises questions about identity and cost that a standalone dashboard never has to answer.
The Solution
An Analytics-Ready Data Model: Salesforce incident objects are reshaped into a star schema with fact and dimension tables, built by a scheduled Tableau Prep flow. Key calculations, such as response time, time to close, and the delay between an incident and its report, are defined once and reused everywhere. Data refreshes daily.
Risk Management Dashboards: The Tableau workbook is organized around how clients think: a lookback view of trends over time, an active incidents view of what is open right now, and a KPI view. Each chart links to a drill-down table showing the incident-level detail behind it, and tooltips explain exactly what each view includes.
Tableau Pulse Metrics: Core measures, including average response time, average time to close, and average incident creation delay, are published as Tableau Pulse metrics that track each number over time and flag meaningful change.
Custom KPI Design and Curation: Dashboards alone can leave clients comparing a dozen charts facility by facility. BRIO worked with the firm to design and curate custom KPIs, including a composite facility score, that give the firm’s clients a single number for evaluating performance across their facilities. A client can see at a glance which locations need attention, then drill into the detail behind the score.
KPI Cards Inside the Customer Portal: Using the Tableau Embedding API, those Pulse metrics are being embedded as live KPI cards directly in the customer portal, each linking through to the full dashboard. Clients see their key numbers the moment they log in, without a separate Tableau account.
Authentication That Stays on the Server: Rather than passing credentials through the browser or relying on fragile embedded frames, authentication for embedded analytics runs through a secure server-side middle tier, so users get a seamless experience and no secrets live in the front end.
Licensing That Scales With Use: Moving to consumption-based Tableau licensing means the firm pays for actual usage with a single creator license, rather than buying a seat for every client user who might glance at a KPI card.
Building a Data Culture: BRIO worked with the firm to establish clear, documented definitions for every metric, from response time to incident creation delay, and reviewed them with the firm and its clients. That shared understanding is what makes the numbers trustworthy and keeps them consistent everywhere they appear, from dashboards to Pulse metrics to portal cards.
Conversational and Agentic AI on Governed Data: The same governed data model feeds AI. Working through Claude and Tableau Pulse and Tableau Next, the firm can ask questions of its incident data in plain language and use AI to prepare analysis for its monthly client meetings, grounded in the same metric definitions its clients see.
The Same Platform, Beyond Risk: The firm now also uses Tableau for internal finance, with a collections dashboard that prioritizes outreach for its accounts receivable team and a progress view for leadership.
Technical foundation
- Salesforce as the system of record for incidents
- Tableau Prep flow producing a star schema of fact and dimension tables
- Tableau Cloud workbooks with drill-down tables and daily refresh
- Tableau Pulse metrics for core risk KPIs
- Tableau Embedding API with server-side authentication through a .NET middle tier
- Consumption-based Tableau licensing
- Claude, Tableau Pulse, and Tableau Next for conversational and agentic analytics
The Impact
Bringing analytics into the portal changes who looks at the data and how often:
- Clients see response, closure, and reporting-delay trends without leaving the portal they already use.
- Every chart can be traced to the incidents behind it, which makes the numbers easy to discuss in client reviews.
- Metric definitions are consistent across dashboards, Pulse metrics, and portal cards.
- Licensing and authentication are designed to scale as more clients are added.
- A single, curated facility score that turns many metrics into one clear signal.
- A shared data culture that keeps every metric trustworthy and accurate.
- Conversational and agentic AI grounded in the firm’s governed data.
The lesson is simple: analytics gets used when it shows up where people already work. Building the dashboards was the first step; putting the right numbers in front of clients by default is what makes them part of the conversation.













