PagerDuty Incident Metrics to Power BI
On a schedule, the flow exports resolved PagerDuty incidents (service, urgency, MTTA, MTTR, responders, escalations) into a Dataverse reliability table and refreshes a Power BI dataset. Maintains a watermark for incremental loads. Gives leadership a governed reliability dashboard with MTTA/MTTR trends by service.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
This flow builds a governed reliability dashboard from PagerDuty. On a schedule (every 6 hours), it reads a stored watermark, pulls incidents via the PagerDuty connector, keeps only the resolved incidents whose resolution time is newer than the watermark, computes MTTA and MTTR plus responder/escalation context, and upserts each into a Dataverse reliability fact table. It then advances the watermark and triggers a Power BI dataset refresh so the dashboard reflects the latest metrics.
Why it matters: PagerDuty Analytics is useful but siloed. Landing the facts in Dataverse lets reliability metrics (MTTA/MTTR trends by service) sit in Power BI alongside the rest of the business with consistent governance and history. The watermark makes each run an incremental load, and the per-incident upsert makes re-loads idempotent.
Status: built as a demo (Off). Going live requires only authorizing the three connections and setting the two Power BI environment-variable values - no logic changes.
Use Case
Leadership and SRE want MTTA/MTTR trends, incident volume by service, and escalation/responder context in Power BI, refreshed automatically from PagerDuty without anyone exporting CSVs. A scheduled, watermark-driven export keeps a governed, historical reliability record in Dataverse and a live dashboard in Power BI.
Flow Architecture
Recurrence Every 6 Hours
Recurrence (Hour / 6)Runs the incremental export on a schedule.
Initialize Run Start + Correlation Id
Initialize VariableutcNow() captured run start (new high-water mark) and a guid() stamped on every row and the watermark.
Initialize watermark key, lookback, load count
Initialize VariableWatermark row key, first-run lookback days, and the per-run upsert counter.
Get Sync Watermark
Dataverse ListRecordsRead the single watermark row (top 1, filtered by key); derive previous watermark or first-run fallback.
Get PagerDuty Incidents
PagerDuty GetIncidentsPull incidents (the op takes no date params, so filtering is done next).
Filter Resolved Incidents
Filter array (Query)Keep resolved incidents whose last_status_change_at is newer than the watermark (the delta).
Apply To Each Incident
Foreach (sequential)Per incident: compute MTTA/MTTR, look up existing fact row by incident id, and Create or Update it; increment load count.
Compose Watermark Row
ComposeBuild the new watermark row that advances to run start.
Condition Watermark Exists
If / elseCreate the watermark row on first run, else update it.
Refresh Power BI Dataset
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_PowerBIWorkspaceId | String | <configure> | Power BI workspace (group) id passed to RefreshDataset (reused, set per tenant). |
| flowlibs_PowerBIDatasetId | String | <configure> | Power BI dataset id to refresh (reused, set per tenant). |
| flowlibs_ReliabilityWatermarkKey | String | PagerDuty-Reliability | Fixed name/key of the single watermark row. |
| flowlibs_ReliabilityDefaultLookbackDays | String | 30 | First-run lookback window when no watermark exists yet. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| PagerDuty | shared_pagerduty | GetIncidents |
| Microsoft Dataverse | shared_commondataserviceforapps | ListRecords CreateRecord UpdateRecord |
| Power BI | shared_powerbi | RefreshDataset |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Schedule
- Change the Recurrence frequency/interval (e.g. hourly for near-real-time, or daily at 02:00). The watermark guarantees no gaps regardless of cadence.
- First-run window
- Adjust flowlibs_ReliabilityDefaultLookbackDays to backfill more or less history on the very first run.
- Responder load / burnout
- Add per-responder incident counts (group by assignee) for fairness and burnout analysis.
- Noisy services
- Rank services by incident volume in Power BI to target alert tuning.
- Deeper escalation analytics
- Add a per-incident log_entries HTTP enrichment to capture true escalation steps and timings.
- Fabric
- Point the dataset refresh at (or also land into) a Microsoft Fabric lakehouse for larger histories.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01MTTR (minutes)
created -> resolution, in minutes.
EXPR.02MTTA (minutes, ack-guarded)
created -> first acknowledgement, 0 if never acked.
EXPR.03Previous watermark (first-run fallback)
Stored watermark, or run start minus lookback days on first run.
EXPR.04Incremental resolved filter
Keep only resolved incidents newer than the watermark.
EXPR.05Responder count
Number of current assignments.
Customize & download
Generate a ready-to-import copy of this solution with your environment-variable values baked in — available on Base, Pro, or Team.
Upgrade to customize
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.