Monitor how Copilot credits are consumed, attribute usage to departments and surface capacity risk across your organization.
All Reports: https://microsoft.github.io/Analytics-Hub/
Found this useful? ⭐ Star this repo to help others discover it!
Dashboard Preview ↓ · Instructions ↓ · Related Resources ↓ · Email your Admin ↓ · Live Web Apps ↗
📊 Why Monitor Credit Usage & Insights You Can Explore
Copilot credits are a finite, paid resource. Tracking how they are consumed turns a flat invoice into an accountable, department-level picture. Monitoring credit usage helps you:
- Attribute consumption to the right departments and cost centers
- Spot users trending over their monthly credit limit before overruns
- Recognize standout individuals and understand usage cohorts
- Rebalance credit allocation from under-utilized to over-limit teams
Consumption profile: How many credits is the organization consuming against its credit limit? What is the utilization %? How does usage break down by sessions and % used per user?
Department attribution: Which departments and cost centers are driving consumption? How do credits roll up for chargeback at $0.01 per credit?
Over-limit & budget status: Which teams are nearing or exceeding their monthly credit limit? Where is utilization crossing 100%, and what is the over-limit chargeback?
Cohorts & standouts: Which usage cohort does each user fall into? Who are the standout individuals — high relative to their department average — worth recognizing or investigating?
📋 Instructions
Written Setup Guide
Step 1. Gather the two data exports (Required for All Setups)
This report is powered by two CSV exports that join on the user principal name. No database connection is required — the report reads both files through Power Query parameters.
Where to get Export 1 (Copilot credit consumption): Microsoft 365 Admin Center → Copilot → Cost management → Consumption tab → Export CSV.
Where to get Export 2 (Microsoft Entra org directory): Microsoft Entra admin center → Identity → Users → All users → Download users (CSV), or pull the same attributes from Microsoft Graph (
GET /users). Entra supplies each user's department, job title, country, and manager — the org context the credit export does not contain.
Detailed field requirements
Export 1 — Copilot credit consumption (one row per user):
| Field | Description |
|---|---|
Display Name |
The user's display name |
User Principal Name |
The user's work email — the join key |
Monthly credit limit |
The user's monthly credit allocation |
Monthly credits used |
Credits the user consumed this month |
User ID |
The user's object identifier |
Microsoft 365 Copilot license |
Whether the user holds a Copilot license |
Last activity date |
Date of the user's most recent Copilot activity |
Session Count |
Number of Copilot sessions in the period |
% Used |
Monthly credits used as a percentage of the limit |
This is a single credit stream — usage is not broken out by surface. Each user's monthly credit limit comes from this export, so there is no manual budget input to set.
Export 2 — Microsoft Entra org directory (one row per user):
| Field | Description |
|---|---|
userPrincipalName |
The user's work email — the join key |
displayName |
The user's display name |
department |
Drives department attribution, slicers, and RLS |
jobTitle |
Job title |
jobFamily |
Job-family grouping (org-specific — see note) |
city |
City, for geographic slicing |
country |
Country, for geographic slicing |
costCenter |
Cost center, for chargeback rollup (org-specific — see note) |
manager |
The user's manager (UPN or display name) |
businessUnit |
Business unit, for rollup (org-specific — see note) |
department,jobTitle,city,country, andmanagercome straight from a standard Microsoft Entra Download users / Microsoft Graph (GET /users) export, so those columns work as-is. Do not rename these columns. Missing a column will cause blank visuals in Power BI with no error. Every user in the credit export should have a matching row in the Entra export, or those credits will not be attributed to a department.Note:
jobFamily,costCenter, andbusinessUnitare not standard Entra fields — an admin must add or map them (for example from an HR feed), or the cost-center and business-unit slicers stay blank.
Quick Reference
-
Produce the credit consumption export
- In the Microsoft 365 Admin Center, go to Copilot → Cost management → Consumption tab and click Export CSV.
- This gives you per-user Copilot credit consumption — a single credit stream with each user's monthly credit limit, monthly credits used, session count, % used, and last activity date.
- Save as CSV with the exact column names listed above.
-
Produce the Microsoft Entra org directory export
- In the Microsoft Entra admin center, go to Identity → Users → All users → Download users (or pull the same attributes from Microsoft Graph
GET /users). - This maps each
userPrincipalNametodepartment,jobTitle,city,country, andmanager— the org context the credit export lacks. (jobFamily,costCenter, andbusinessUnitare org-specific add-ons — see the field note above.) - Save as CSV with the exact column names listed above.
- In the Microsoft Entra admin center, go to Identity → Users → All users → Download users (or pull the same attributes from Microsoft Graph
-
Open the template in Power BI Desktop
- Open the
.pbittemplate file. - When prompted for parameters, set
CreditCsvPathto the credit consumption CSV andEntraCsvPathto the Microsoft Entra directory CSV.
- Open the
-
Refresh and verify
- Click Refresh.
- Confirm the Executive Overview visuals populate (total credits used, credit limit, utilization %, chargeback $, users over limit) and that all 8 report pages render.
- The per-user monthly credit limit comes from Export 1, so there is no manual budget input to set.
The report pages
- Consumption - org KPIs (total credits used, credit limit, utilization %, chargeback $ at $0.01 per credit, users over limit) plus headline visuals.
-
Chargeback - per-department rollup (credits used vs limit, utilization %, over-limit credits and
$, chargeback $ , budget status), plus cost center and business unit rollups. - Optimization & Limits - a utilization-band chart (Under 50% through Over 100%) and an all-user watchlist sorted by % of limit to spot users approaching or over their allowance, alongside allowance-adjustment candidates.
- Forecast (Credits) - projected credits and cost over a configurable horizon, with usage / adoption growth and prepaid-commitment scenarios.
- Billing Models - the same consumption priced three ways per department: PAYGO (per credit), Prepaid (credit pack at a prepaid rate), and Hybrid (prepaid allowance plus PAYGO overage), with an adjustable prepaid-rate slider and a cheapest-model flag.
- Prepaid Allocation - set your three inputs (rate per credit, prepaid rate, prepaid credits procured), then choose a prepaid credits allocation model - Prorated based on credits used, Prorated based on employee count, or Limited to budgeted allowances - to split the pool across departments, where each department pays for what the pool covers plus any overage (billed PAYGO). Pool-coverage KPIs (total usage, prepaid pool, usage covered by prepaid pool %, not covered by prepaid credits, total cost, estimated overage) sit above a covered-vs-gap chart and a per-department table (users, credits used, coverage, covered by prepaid, overage PAYGO, total charge).
- Glossary - definitions plus data and honesty notes.
- Appendix: FOCUS Cost View - the chargeback expressed in FinOps Open Cost & Usage Specification (FOCUS) columns (hidden in view mode).
Next Steps
Validation & Troubleshooting
Checklist for success:
- No errors on load
- Fields pane includes the expected tables (
CoworkBilling,Org) - Executive Overview visuals populate (not all blank)
Common Mistakes & Fixes
| Symptom | Cause | Fix |
|---|---|---|
| Blank visuals | Missing required column(s) | Re-export with the full column set |
| Missing slicers/labels | No department / country in directory export |
Add the attributes and re-export |
| Credits not attributed to a department | UPNs in the credit export have no matching directory row | Reconcile the two exports on user principal name |
| Utilization or over-limit looks wrong |
Monthly credit limit missing from the credit export |
Re-export Export 1 with the monthly credit limit column |
| Load error | CSV open in Excel | Close the file and retry |
| Wrong file loaded | Parameter points to the wrong path | Re-check CreditCsvPath and EntraCsvPath
|
Publish / Distribute
- Save your PBIX file after setup.
- Publish to a Power BI workspace: File → Publish → Publish to Power BI.
- For CSV Import, note that refreshes are manual — re-export and re-point the file to update.
Interpretation & Storytelling
Use the included guide to frame your narrative and drive action:
-
Storyboard presentation template:
Chargebacks Interpretation Guide.pptx
Use the guide to:
- Create a leadership-ready credit usage & chargeback review
- Explain how chargeback is calculated at $0.01 per credit
- Highlight departments trending toward their monthly credit limit
- Recommend reallocation and recognition actions per department
Monitor with Refresh
- For CSV Import: re-export the two CSVs on your cadence (e.g. monthly), overwrite the files, and refresh the report.
- Verify each period that a fresh window of credit data appears.
- Track utilization and over-limit users regularly so owners can act before overruns.
Row Level Security (RLS) — Restrict Who Sees What
Row Level Security (RLS) controls which rows of data each viewer can see — for example, showing a department lead only their own department's credit usage. This report ships with two roles. Setup happens in two places: Power BI Desktop (define roles) and Microsoft Fabric (assign members).
This report's roles:
| Role | What it sees |
|---|---|
| All Org (Admin) | Unrestricted — every department. For finance and program leads. |
| Department Admin | Only the viewer's own department, via a USERPRINCIPALNAME() filter on the SecurityFilter table. |
Step 1 — Define roles in Power BI Desktop
-
Open the report in Power BI Desktop.
-
Go to the Modeling tab → click Manage roles.
-
The
All Org (Admin)andDepartment Adminroles are already defined. To add or adjust a department-scoped filter, use a DAX filter that returnsTRUEfor the rows the role may see.Common filters:
Goal DAX filter Filter by Department Org[Department] = "Finance"Filter by Country Org[Country] = "US"Show only the viewer's own department SecurityFilter[UserPrincipalName] = USERPRINCIPALNAME() -
Click Save.
-
Test (recommended): in the Modeling tab, click View as, select a role, and confirm the report filters correctly. Click Stop viewing when done.
Step 2 — Publish the report
Publish as normal: File → Publish → Publish to Power BI and select your workspace. The roles you defined are included automatically.
Step 3 — Assign members to roles in Microsoft Fabric
- Go to app.fabric.microsoft.com and open your workspace.
- Find the semantic model (dataset icon — not the report itself).
- Click the three-dot menu (...) next to it and select Security.
- On the left, click a role name. On the right, search for a person's name, email address, or Azure AD security group, then click Add.
- Repeat for all roles, then click Save.
Tip: Use Azure AD security groups rather than individual emails. When someone joins or leaves a team, you update access in Azure AD instead of returning to Fabric.
Important notes:
- Workspace admins and report owners always see all data — RLS does not apply to them.
- A viewer with no role assigned sees no data at all. Make sure every intended viewer is in at least one role.
- A viewer assigned to multiple roles sees the union of access from all roles (OR logic, not AND).
- RLS applies to all reports built on the same semantic model.
🤓 Nerd Corner
The report's two source paths are exposed as Power Query parameters — CreditCsvPath and EntraCsvPath — so swapping in a fresh extract is a parameter change and a refresh, with no model edits. Department attribution, over-limit tracking, the usage cohorts, and standout individuals all derive from the same star schema: a single CoworkBilling fact (27 measures) joined many-to-one to the Org directory (sourced from Microsoft Entra) on user principal name, alongside an Assumptions table holding the sole money knob (RatePerCredit, $0.01 per credit) and a SecurityFilter table for RLS.
💬 Feedback
We want to hear your feedback and suggestions. Please reach out to jordanking@microsoft.com.
🔔 Stay Updated
- ⭐ Star this repository to receive notifications about new template versions
- 👀 Watch for updates and announcements
- 🔄 Check back regularly for new features and improvements
All notable changes to the Cowork Credit Chargeback template and report.
Added
- Billing Models page - compare the same monthly consumption under PAYGO, Prepaid (credit-pack), and Hybrid pricing per department, with an adjustable prepaid-rate slider and a cheapest-model flag.
- Prepaid Allocation page - enter a procured prepaid credit pool (e.g. 2M credits) and see, per department, how it is allocated (priority fill), what is covered, and where the pay-as-you-go (PAYGO) gap falls; pool-coverage KPIs and a covered-vs-gap chart.
- Optimization & Limits (renamed from "Optimization") - a utilization-band chart (Under 50% through Over 100%) and an all-user watchlist sorted by % of limit, to surface users approaching or over their allowance.
Changed
- Unified the page banner (white header) across every page for a consistent look.
- Softened the report color palette to a muted / pastel scheme.
Model
- New what-if parameters: Prepaid Rate per Credit and Prepaid Credits Procured.
- New measures for the billing-model comparison and prepaid-pool allocation (fair-share and priority-fill), plus Utilization Band columns.
- Initial Cowork Credit Chargeback template: two-CSV Power Query load (Copilot consumption + Microsoft Entra directory), RLS-ready model, executive / department / cost-center chargeback, credit optimization, forecast, glossary, and a FOCUS cost appendix.
Additional Resources: Analytics Hub
📥 Click Here to Download All Files
📧 Before you begin, you need two data exports: a Copilot credit consumption export (Microsoft 365 Admin Center → Copilot → Cost management) and a Microsoft Entra org directory export (Entra admin center → Users → Download users). This pre-written email covers both required exports, the exact fields, the roles and permissions needed to produce them, software requirements, and the connection option — everything your admin needs in one click.
Found this useful? ⭐ Star this repo to help others discover it!
That's it! 🚀
