ADO Epic Budget Table

Give your PMO budget visibility directly inside Epic work items. No Power BI, no spreadsheets, no external tools.
Source code: github.com/deenuy/ado-epic-budget-data-table
Report issues: github.com/deenuy/ado-epic-budget-data-table/issues
What it does
Add a Budget tab to any PMO Epic. Project managers enter spend amounts by Fiscal Year across quarterly columns (Q1-Q4). The extension automatically:
- Shows a transposed budget grid with fixed Q1/Q2/Q3/Q4 rows, dynamic fiscal year columns, and FY totals in the footer
- Reads your Approved Budget from the configured Epic decimal field (defaults to
Custom.EstimatedCost)
- Computes Total Committed Spend, Budget Remaining, and % of Budget
- Shows a live RAG-coloured summary banner and progress bar (green below 75%, amber 75-90%, red above 90%)
- Formats monetary values using your Currency field (USD, EUR, GBP, INR, JPY, and 15+ others)
- Writes computed values back to queryable Epic decimal fields for use in WIQL queries, dashboards, and backlog rollups
Key features
| Feature |
Detail |
| Transposed budget grid |
Fixed Q1-Q4 rows. Add or remove fiscal years as columns. FY total shown in footer per column. |
| Summary banner |
Approved Budget, Total Committed Spend, Remaining, and % of Budget with RAG progress bar. |
| Auto-save |
Edits persist automatically with a 400ms debounce. No manual Save required for normal use. |
| Currency support |
Reads ISO 4217 code from your Currency field. Supports 20+ currencies including USD, EUR, GBP, and INR. |
| Field writeback |
Computed KPIs written to native Epic decimal fields, queryable via WIQL and dashboard widgets. |
| Light / dark mode |
Respects the Azure DevOps theme automatically. No configuration required. |
| No external dependencies |
All computation runs in the browser. Data is stored in your Azure DevOps fields. Nothing leaves your organization. |
Complete setup guide
Phase 1: Install the extension
Step 1: Open the Visual Studio Marketplace
Navigate to the Visual Studio Marketplace and search for ADO Epic Budget Table.
Step 2: Install to your organization
- Click Get it free on the extension page.
- Select the organization where you want to install the extension.
- Click Install.
- Click Proceed to organization to confirm.
Phase 2: Create Epic fields
These fields must exist on the PMO Epic work item type before you configure the extension control.
Step 3: Open Process settings
- Go to Organization Settings.
- Select Boards > Process.
- Click on your inherited process (for example, Your-Inherited-Process-Template).
- Click PMO Epic to open work item type customization.
Step 4: Create the JSON storage field
- Click New field.
- Configure the field as follows:
| Setting |
Value |
| Name |
Financials Table JSON |
| Type |
Text (multiple lines, Plain Text) |
| Reference name |
Custom.FinancialsTableJson |
- Click Add field.
- In the layout editor, hide this field from the page or place it in a collapsed group. Users never interact with raw JSON directly.
Step 5: Create the computed queryable fields
Create each of the following as Decimal type on the PMO Epic:
| Display Name |
Reference Name |
Purpose |
| Total Committed Spend |
Custom.TotalPlannedSpend |
Sum of all Q1-Q4 amounts across all fiscal years |
| Total Budget Remaining |
Custom.TotalBudgetRemaining |
Approved Budget minus Total Committed Spend |
| Percent of Budget |
Custom.PercentOfBudget |
(Committed Spend / Approved Budget) x 100 |
Set these fields to read-only in the process layout, or hide them from the form. The extension writes to them programmatically. They are surfaced in the summary banner and are queryable via WIQL.
Tip: The extension reads your existing Estimated Cost (Custom.EstimatedCost) field as the approved budget. No new field is needed for that. It also reads Currency (Custom.Currency) to format amounts correctly.
Phase 3: Add the control to the Budget page
Step 6: Open the Budget page layout
- In the PMO Epic customization view, open or create the Budget page.
- Click Add custom control.
Step 7: Select ADO Epic Budget Table
- Find ADO Epic Budget Table in the control list.
- Click to select it.
- Click the control.
- Open the Options tab.
- Configure the six field references:
| Option |
Value |
| JSON Storage Field |
Custom.FinancialsTableJson |
| Approved Budget Field |
Custom.EstimatedCost |
| Total Planned Spend Field |
Custom.TotalPlannedSpend |
| Budget Remaining Field |
Custom.TotalBudgetRemaining |
| Percent of Budget Field |
Custom.PercentOfBudget |
| Currency Field |
Custom.Currency (optional, defaults to USD) |
- Open the Layout tab.
- Set the page to Budget and assign the control to an appropriate group.
- Click OK and save the layout.
Phase 4: Use the extension
Step 9: Open a PMO Epic
Navigate to any PMO Epic in your project and click the Budget tab.
Step 10: Add fiscal years and enter amounts
- Click Add FY to add the next sequential fiscal year as a column.
- Enter Q1-Q4 spend amounts directly in the cells.
- The FY TOTAL row updates automatically as you type.
- The summary banner updates on every cell change.
- Click Save to persist all changes and write KPIs back to the Epic fields.
Querying budget data
Because computed values are written to native Epic decimal fields, you can query them directly in WIQL without Power BI or any external tooling:
SELECT [System.Id], [System.Title],
[Custom.TotalPlannedSpend],
[Custom.TotalBudgetRemaining],
[Custom.PercentOfBudget]
FROM WorkItems
WHERE [System.WorkItemType] = 'PMO Epic'
AND [Custom.PercentOfBudget] >= 90
ORDER BY [Custom.PercentOfBudget] DESC
Add this as a Work Item Query Chart widget on your Azure DevOps dashboard for at-a-glance portfolio budget health.
Supported currencies
The extension reads the ISO 4217 code from Custom.Currency and formats all amounts with the correct symbol:
| Code |
Symbol |
Code |
Symbol |
Code |
Symbol |
| USD |
$ |
EUR |
€ |
GBP |
£ |
| INR |
Rs |
JPY |
¥ |
CNY |
¥ |
| CAD |
CA$ |
AUD |
A$ |
NZD |
NZ$ |
| HKD |
HK$ |
SGD |
S$ |
KRW |
Rs |
| BRL |
R$ |
MXN |
MX$ |
ZAR |
R |
| SEK |
kr |
NOK |
kr |
DKK |
kr |
| AED |
AED |
SAR |
SAR |
CHF |
CHF |
Codes not in this list display the raw code as a prefix (for example, THB 55,000). Defaults to USD when the field is empty or absent.
Troubleshooting
| Symptom |
Likely cause |
Resolution |
| Banner shows "Not set" for Estimated Cost |
Approved Budget field ref is not configured, or Custom.EstimatedCost does not exist on the PMO Epic. |
Open the Options tab and verify the Approved Budget Field value. Confirm the field exists under Process > Fields. |
| Status shows "Field not writable" on load |
The JSON storage field reference is incorrect, or the field is not on the work item form. |
Verify that Custom.FinancialsTableJson exists on the PMO Epic and is added to the Budget page layout. |
| Computed fields are not updating |
Total Planned Spend, Budget Remaining, and Percent of Budget field refs are not configured. |
Set all three reference names in the Options panel. |
| Amounts show $ when currency is EUR |
Custom.Currency field is empty or the Currency Field option is not configured. |
Set the Currency Field option to Custom.Currency in the Options panel and confirm the field has a value on the Epic. |
| Table is empty after save |
The JSON storage field type is HTML rather than Plain Text. Azure DevOps strips content from HTML fields. |
Change the field type to Plain Text (multiple lines). |
| Data disappears on page refresh |
The value in Custom.FinancialsTableJson is corrupted. |
Open browser DevTools and filter the console for [FIN] to locate the parse error. |
Local development
git clone https://github.com/deenuy/ado-epic-budget-data-table.git
cd ado-epic-budget-data-table
npm install
npm run build # production bundle to dist/
npm run dev # watch mode
npm run package # builds and drops .vsix into releases/
See the GitHub repository for the full development guide and contribution instructions.
No external services required
All computation runs in the browser. Data is stored in your Azure DevOps fields. Nothing leaves your organization.