Skip to content
| Marketplace
Sign in
Azure DevOps>Azure Boards>OData Counter Widget
OData Counter Widget

OData Counter Widget

Agilist IT Ltd

|
5 installs
| (0) | Free
Dashboard widget that renders the result of an Azure DevOps Analytics OData $count (or aggregate) query as a single big number with color thresholds.
Get it free

OData Counter Widget

A dashboard widget for Azure DevOps that displays the result of an Analytics OData $count (or aggregate) query as a single large number with color thresholds (green / amber / red) — and lets you drill into the underlying rows with one click.

Think Query Tile, but driven by any OData query you can write — no need to maintain a saved Work Items query for every counter.


Features

  • Big-number tile styled to match the built-in Azure DevOps Query Tile widget (small label on top, large centered count below).
  • Color thresholds — set an amber and red numeric threshold; the whole tile turns solid amber or red when the value crosses them.
  • Click-through drill-down — clicking the tile opens a new tab with the same query without /$count, fetched with the user's own token, and rendered as a sortable HTML table.
  • Smart View — the drill-down recognises common ADO Analytics entities (WorkItems, WorkItemRevisions, WorkItemSnapshot, WorkItemBoardSnapshot, Iterations, Areas, Users, Teams) and renders only the columns that matter, with clickable work item IDs, colored State and Type pills, relative "Changed" timestamps, and last-segment iteration / area paths. A row-expander (▸) reveals the full record. Unknown entities fall back to a cleaned-up universal view (drops all-null and GUID-only *SK columns, promotes Id/Title/ Name/State to the front). Queries using $apply=aggregate(...) / groupby(...) are auto-detected and metric columns are highlighted.
  • Three view modes — toggle between Smart, All columns, and Raw JSON at the top of the drill-down. Your preference is remembered across queries.
  • Live preview in the configuration pane — shows the prettified drill-down URL (each &param= and and clause on its own line) so you can see what users will land on before saving.
  • Runtime date tokens — use {Today} or {TodayMinusN} inside the OData URL for rolling date cutoffs. The widget converts them to UTC ISO timestamps at refresh time before sending the request.
  • Configurable label — short text shown above the number on the tile itself (e.g. "Open bugs in current sprint").
  • Configurable widget title — the Azure DevOps host renders the widget's title in the dashboard chrome above the tile.
  • Resizable — supports 1×1, 1×2, and 2×2 dashboard cells.
  • Security-scoped — every query is sent with the signed-in user's Azure DevOps access token, so all project, area-path, and Analytics permissions apply automatically.
  • Endpoint allowlist — only https://analytics.dev.azure.com/ URLs are accepted, hard-coded in the widget for safety.

How to use

1. Add the widget to a dashboard

  1. On any team dashboard, click Edit → Add a widget.
  2. Search for OData Counter and add it.

2. Configure it

Open the widget's ⋯ menu → Configure. You will see:

Field What it does
Title (host-provided, top of the pane) Shown by Azure DevOps as the widget's title in the dashboard.
Label Short text shown inside the tile, above the number.
OData URL The Analytics URL that returns a number. Must point to https://analytics.dev.azure.com/.
Click-through preview (read-only) Live preview of the URL the tile will open when clicked — same query without /$count, pretty-formatted.
Amber threshold Value ≥ this → tile turns solid amber.
Red threshold Value ≥ this → tile turns solid red.

3. Save and use

  • The tile shows the count, refreshes when the dashboard refreshes.
  • Hover the tile → tooltip "Click to view the underlying rows".
  • Click → a new tab opens with the rows behind that number. By default you get the Smart View — a curated, sortable table tailored to the entity you queried (work-item IDs link straight to the work item, states and types are colored, dates show as relative time). Use the All columns toggle to see every field returned, or Raw JSON to inspect the response. Click the ▸ at the start of any Smart View row to expand the full record inline.

Example OData URLs

Simple count of active PBIs

https://analytics.dev.azure.com/{org}/{project}/_odata/v3.0-preview/WorkItems/$count?$filter=WorkItemType eq 'Product Backlog Item' and State eq 'Active'

Open PBIs in a sprint where every child Task is Done (useful "ready to close" counter)

https://analytics.dev.azure.com/{org}/{project}/_odata/v3.0-preview/WorkItems/$count?$filter=WorkItemType eq 'Product Backlog Item' and State ne 'Done' and startswith(Iteration/IterationPath,'{project}\Sprint 54') and Descendants/any(d: d/WorkItemType eq 'Task') and not Descendants/any(d: d/WorkItemType eq 'Task' and d/State ne 'Done')

Aggregate alternative — if you prefer to use $apply:

https://analytics.dev.azure.com/{org}/{project}/_odata/v3.0-preview/WorkItems?$apply=filter(WorkItemType eq 'Bug' and State eq 'Active')/aggregate($count as Total)

The widget supports both forms — it parses a plain integer (from /$count) and the value[0] shape returned by aggregate.

Rolling date token — active Tasks that have been in Active for at least 3 days:

https://analytics.dev.azure.com/{org}/{project}/_odata/v3.0-preview/WorkItems/$count?$filter=WorkItemType eq 'Task' and State eq 'Active' and StateChangeDate le {TodayMinus3}

On each refresh, {TodayMinus3} is replaced with a concrete UTC ISO timestamp such as 2026-05-09T00:00:00Z.

Tip: to discover OData paths and field names, browse https://analytics.dev.azure.com/{org}/{project}/_odata/v3.0-preview/$metadata in your browser.


Permissions

The widget requests these scopes:

  • vso.work — read work items
  • vso.analytics — read Analytics data

All queries run as the signed-in user, so users only see counts of work items they would normally be able to see in the project.


Pricing

Free.

Support

For questions, bug reports, or feature requests, contact info@agilist.hr.

Privacy Policy

Publisher: Agilist IT Ltd

This extension does not collect, transmit, or store any personal data. All processing happens locally in the user's browser.

  • The widget calls the Azure DevOps Analytics OData endpoint of the organization where it is installed, using the signed-in user's identity. Query results are displayed only to that user.
  • Widget configuration (OData URL, label, thresholds) is stored by Azure DevOps as part of the dashboard configuration. The publisher has no access to it.
  • The drill-down viewer stores a single UI preference (smart / all / raw) in the browser's localStorage.
  • The extension does not use cookies, analytics, telemetry, or any third-party services.
  • Required scopes: vso.work, vso.analytics (read-only).

Questions about privacy: info@agilist.hr.

Source code

The source code is not publicly available at this time. We plan to publish it on GitHub in a future release.

License

Distributed under the MIT License — see the License tab on this page. The software is provided "as is", without warranty of any kind, express or implied. Use at your own risk.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft