Azure DevOps Services - Dashboards Index To Content
Azure DevOps Services - Dashboards Index To Content
Azure DevOps Services - Dashboards Index To Content
Dashboards
Overview
Dashboards & widgets
Quickstarts
Add, rename, & delete dashboards
Add widgets to a dashboard
Add an Analytics widget to a dashboard
Add markdown to a dashboard
Tutorials
Configure burndown/burnup
Configure cumulative flow
Configure lead/cycle time
Configure velocity widget
View the built-in velocity chart
Work with sprint burndown
Configure test trend results
Concepts
Burndown guidance
Cumulative flow & lead/cycle time guidance
Velocity guidance
Analytics widgets
How-to Guides
Add charts to a dashboard
Create work tracking charts
Create test progress & result charts
Set dashboard permissions (Security)
Samples (REST API)
Add a dashboard widget
Add a chart widget
Add an Analytics widget
Reference
Widget catalog
Markdown guidance
Default permissions & access (Security)
Reporting roadmap
REST API, Dashboards
Resources
Analytics
Azure Boards
Azure Test Plans
Marketplace widgets
Dashboards
1/31/2019 • 2 minutes to read • Edit Online
Azure DevOps Services | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013
Gain visibility into your team's progress by adding one or more widgets to your dashboard. Each team can
customize and configure dashboards to share information and monitor their progress.
To learn about our reporting solutions, read Reporting Roadmap.
5-Minute Quickstarts
Add, rename, and delete dashboards
Add an Analytics widget to a dashboard
Add charts and widgets to a dashboard
Add Markdown to a dashboard
Add, rename, and delete dashboards
Add charts and widgets to a dashboard
Add Markdown to a dashboard
Step-by-Step Tutorials
Configure a Cumulative Flow chart
Configure a Lead Time or Cycle Time widget
Configure the Velocity widget
View the built-in velocity chart
Work with sprint burndown
Configure a Cumulative Flow chart
View the built-in velocity chart
Work with sprint burndown
Concepts
Cumulative flow, lead time, and cycle time guidance
Velocity metrics and usage guidance
Burndown guidance
How-to Guides
Add charts to a dashboard
Configure work item query-based charts
Configure test status, progress, and result charts
Set dashboard permissions
Samples
Add a dashboard widget
Add a chart widget
Add an Analytics widget
Add a dashboard widget
Add a chart widget
Reference
Widget catalog
Markdown guidance
Default permissions & access (Security)
REST API, Dashboards
Resources
Azure Boards
Azure Test Plans
Marketplace widgets
Agile
Testing
Marketplace widgets
Dashboards, charts, & widgets
1/31/2019 • 2 minutes to read • Edit Online
Azure DevOps Services | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013
Customizable, highly-configurable dashboards provide you and your teams with the flexibility to share
information, monitor progress and trends, and improve your workflow processes.
Marketplace widgets
In addition to the widgets available to your from the widget catalog, you may find additional widgets of interest
from the Marketplace.
Prior to monitoring work progress and trends, you'll need to have planned your project and made progress on
work you're tracking.
And, just like work item query-based charts, you can add these charts to a dashboard.
Sequence for adding test progress and result charts to a dashboard
Sprint charts
Each sprint provides access to two charts. The first tracks capacity for the team, team activities—such as
Development, Test, Design—and individual team members. The second tracks the sprint burndown in terms of
remaining work.
CAPACITY BARS BURNDOWN
Azure DevOps Services | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015
Share progress and status with your team using configurable team dashboards. Dashboards provide easy-to-
read, easy access, real-time information. At a glance, you can make informed decisions without having to drill
down into other parts of your project.
The Overview page provides access to a default team dashboard which you can customize by adding, removing,
or rearranging the tiles. Each tile corresponds to a widget that provides access to one or more features or
functions.
NOTE
Multiple team dashboards and the widget catalog are available from TFS 2015.1 or later versions. For TFS 2015 and
earlier versions, you don't have access to multiple team dashboards. Instead, your home page serves as a single team
dashboard. For information on SharePoint dashboards, see Project portal dashboards.
NOTE
For information on SharePoint dashboards, see Project portal dashboards.
Prerequisites
You must be a member of a team project. If you don't have a team project yet, create one.
If you haven't been added as a team member,get added now.
Anyone with access to a project, including stakeholders, can view dashboards.
To add, edit, or manage a team dashboard, you must have Basic access or greater and be a team admin, a
project admin, or have dashboard permissions. In general, you need to be a team member for the currently
selected team to edit dashboards.
Prerequisites
You must be a member of a team project. If you don't have a team project yet, create one.
If you haven't been added as a team member,get added now.
Anyone with access to a project, including stakeholders, can view dashboards.
To add, edit, or manage a team dashboard, you must have Basic access or greater and be a team admin, a
project admin, or have dashboard permissions. In general, you need to be a team admin for the currently
selected team to edit dashboards. Request your current team or project admin to add you as a team admin.
Prerequisites
You must be a member of a team project. If you don't have a team project yet, create one.
If you haven't been added as a team member,get added now.
Anyone with access to a project, including stakeholders, can view dashboards.
To add, edit, or manage a team dashboard, you must have Basic access or greater and be added to the team
administrator role for the team.
NOTE
Choose the New navigation tab for guidance as Azure DevOps Server 2019 only supports the new navigation user
interface. For more information, see Web portal navigation.
NOTE
Choose the Previous navigation tab for guidance as TFS 2018 and earlier versions only support the previous navigation
user interface. For more information, see Web portal navigation.
Choose the filter icon to filter the list by keyword or team. Keywords apply to dashboard titles, descriptions,
and team names.
If you need to switch to a different project, choose the Azure DevOps logo to browse all projects.
Choose the Previous navigation tab for guidance. New navigation isn't supported for TFS 2018 and earlier
versions.
If you don't see the New Dashboard option, then you're not a team admin for the currently selected
team, or you don't have permissions to add and edit dashboards. Either switch the context to your team,
or request you be added as a team admin.
2. Enter the name of the dashboard and other information you want to capture.
Choose Save.
3. The widget catalog opens. You can add one or more widgets to the dashboard. You can then configure
and resize each widget as needed.
4. You can move the widgets around the dashboard to place them where you want them.
5. When you're done making changes, choose Done Editing.
From Dashboards, choose the and enter a dashboard name.
If you don't see the , then you're not a team admin for the currently selected team, or you don't have
permissions to add and edit dashboards. Either switch the context to your team, or request you be added as a
team admin.
With the dashboard selected, you can add widgets and charts to the dashboard. Or, you can add charts to a
team dashboard from the Work, Build, or Test pages.
NOTE
You can configure the auto-refresh setting for each dashboard for TFS 2015.2 and later versions. For TFS 2017.1 and later
versions, you can set dashboard permissions.
To rename a dashboard, modify it's description, or change it's automatic refresh setting, open the
dashboard, choose the gear icon, and change the field options shown. Save your changes.
To delete a dashboard, open the Dashboards directory, choose the actions icon for the dashboard,
and select the Delete menu option.
To set permissions for a dashboard, choose the Security option. For details, see Set dashboard
permissions.
2. Drag and drop the dashboards into the sequence you want them to appear.
3. (Optional) Select the Auto-refresh checkbox when you want the dashboard to refresh every five minutes.
2. Drag and drop the dashboards into the sequence you want them to appear.
3. (Optional) Select the Auto-refresh checkbox when you want the dashboard to refresh every five minutes.
The Auto-refresh feature requires TFS 2015.2 or later version.
TIP
When you're in dashboard edit mode, you can remove, rearrange, and configure widgets, as well as add new widgets.
Once you leave edit mode, the widget tiles remain locked, reducing the chances of accidentally moving a widget.
Choose to modify your dashboard. You can then drag tiles to reorder their sequence on the
dashboard.
To remove a widget, choose the widget's or delete icons.
When you're finished with your changes, choose to exit dashboard editing.
TIP
When you're in dashboard edit mode, you can remove, rearrange, and configure widgets, as well as add new widgets.
Once you leave edit mode, the widget tiles remain locked, reducing the chances of accidentally moving a widget.
Note that you can drag and drop a widget from the catalog onto the dashboard.
Related articles
Review the widget catalog
Review Marketplace widgets
Extensibility
Using the REST API service, you can create a dashboard widget. To learn more about the REST APIs for
dashboards and widgets, see Dashboards (API).
Add widgets to a dashboard
1/31/2019 • 7 minutes to read • Edit Online
Azure DevOps Services | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015
Widgets smartly format data to provide access to easily consumable data. You add widgets to your team
dashboards to gain visibility into the status and trends occurring as you develop your software project.
Each widget provides access to a chart, user-configurable information, or a set of links that open a feature or
function. You can add one or more charts or widgets to your dashboard. Up to 200 widgets total. You add several
widgets at a time simply by selecting each one. See Manage dashboards to determine the permissions you need
to add and remove widgets from a dashboard.
Prerequisites
You must be a member of a team project. If you don't have a team project yet, create one.
If you haven't been added as a team member,get added now.
Anyone with access to a project, including stakeholders, can view dashboards.
To add, edit, or manage a team dashboard, you must have Basic access or greater and be a team admin, a
project admin, or have dashboard permissions. In general, you need to be a team member for the currently
selected team to edit dashboards.
Prerequisites
You must be a member of a team project. If you don't have a team project yet, create one.
If you haven't been added as a team member,get added now.
Anyone with access to a project, including stakeholders, can view dashboards.
To add, edit, or manage a team dashboard, you must have Basic access or greater and be a team admin, a
project admin, or have dashboard permissions. In general, you need to be a team admin for the currently
selected team to edit dashboards. Request your current team or project admin to add you as a team admin.
Prerequisites
You must be a member of a team project. If you don't have a team project yet, create one.
If you haven't been added as a team member,get added now.
Anyone with access to a project, including stakeholders, can view dashboards.
To add, edit, or manage a team dashboard, you must have Basic access or greater and be added to the team
administrator role for the team.
NOTE
Widgets specific to a service are disabled if the service they depend on has been disabled. For example, if Boards is
disabled, New Work item and all Analytics widgets are disabled and won't appear in the widget catalog. To re-enable a
service, see Turn an Azure DevOps service on or off.
NOTE
Choose the New navigation tab for guidance as Azure DevOps Server 2019 only supports the new navigation user
interface. For more information, see Web portal navigation.
NOTE
Choose the Previous navigation tab for guidance as TFS 2018 and earlier versions only support the previous navigation
user interface. For more information, see Web portal navigation.
New navigation
Previous navigation
1. Open a web browser, connect to your project, and choose Overview>Dashboards. The dashboard
directory page opens.
If you need to switch to a different project, choose the Azure DevOps logo to browse all projects.
2. Choose the dashboard you want to modify.
Choose the Previous navigation tab for guidance. New navigation isn't supported for TFS 2018 and earlier
versions.
TIP
When you're in dashboard edit mode, you can remove, rearrange, and configure widgets, as well as add new widgets. Once
you leave edit mode, the widget tiles remain locked, reducing the chances of accidentally moving a widget.
To remove a widget, choose the actions icon and select the Delete option from the menu.
Configure a widget
Most widgets support configuration, which may include specifying the title, setting the widget size, and other
widget-specific variables.
To configure a widget, add the widget to a dashboard, choose open the menu, and select Configure.
Additional information is provided to configure the following widgets:
Burndown/burnup
Cumulative flow
Lead time or cycle time
Velocity widget
Test trend results
Additional information is provided to configure the following widgets:
Burndown/burnup
Cumulative flow
Lead time or cycle time
Velocity widget
To configure a widget, add the widget to a dashboard and then choose the configure icon.
Once you've configured the widget, you can edit it by opening the actions menu.
Move or delete a widget from a dashboard
To move a widget, you need to enable the dashboard edit mode. To delete a widget, simply select the delete
option provided from the widget's options menu.
Just as you have to be a team or project admin to add items to a dashboard, you must have admin permissions
to remove items.
Choose Edit to modify your dashboard. You can then add widgets or drag tiles to reorder their sequence on
the dashboard.
To remove a widget, choose the actions icon and select the Delete option from the menu.
When you're finished with your changes, choose Done Editing to exit dashboard editing.
Choose to modify your dashboard. You can then drag tiles to reorder their sequence on the dashboard.
To remove a widget, choose the actions icon and select the Delete option from the menu.
To copy a configured widget to another team dashboard, choose the actions icon and select Add to
dashboard and then the dashboard to copy it to.
To regain access to it, request your admin to reinstate or reinstall the widget.
Add an Analytics widget to a dashboard
1/31/2019 • 3 minutes to read • Edit Online
Prerequisites
You must have a project defined for an organization in Azure DevOps. If you don't have one, see Sign up for
free.
You will have to have defined several work items. See Plan and track work.
Boards must be enabled. To re-enable it, see Turn an Azure DevOps service on or off.
Install the Analytics Marketplace extension.
You must have a project. If you don't have one, add one now.
You must be a member of the project. If you haven't been added yet, get added now.
You will have to have defined several work items. See Plan and track work. - To add a widget to a dashboard,
you must be a team admin, a project admin, or have dashboard permissions.
The Analytics Marketplace extension must be installed.
TIP
You'll gain the greatest utility from the Velocity widget by assigning work to sprints and completing work defined in those
sprints. To quickly define sprints, see Schedule sprints.
Azure DevOps Services | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015
Use the Markdown widget to support your team and stakeholders by adding information such as:
Team goals
Provide links to team backlogs or boards, metrics, or other items located in a network share such as a
OneNote, SharePoint site or wiki pages
Important dates or target deadlines
Here's an example:
Prerequisites
You must be a member of a team project. If you don't have a team project yet, create one.
If you haven't been added as a team member,get added now.
Anyone with access to a project, including stakeholders, can view dashboards.
To add, edit, or manage a team dashboard, you must have Basic access or greater and be a team admin, a
project admin, or have dashboard permissions. In general, you need to be a team member for the currently
selected team to edit dashboards.
Prerequisites
You must be a member of a team project. If you don't have a team project yet, create one.
If you haven't been added as a team member,get added now.
Anyone with access to a project, including stakeholders, can view dashboards.
To add, edit, or manage a team dashboard, you must have Basic access or greater and be a team admin, a
project admin, or have dashboard permissions. In general, you need to be a team admin for the currently
selected team to edit dashboards. Request your current team or project admin to add you as a team admin.
Prerequisites
You must be a member of a team project. If you don't have a team project yet, create one.
If you haven't been added as a team member,get added now.
Anyone with access to a project, including stakeholders, can view dashboards.
To add, edit, or manage a team dashboard, you must have Basic access or greater and be added to the team
administrator role for the team.
NOTE
Your web portal uses either the New navigation or Previous navigation user interface. Choose the New navigation tab
if the New Navigation feature is enabled. You'll see a vertical sidebar along with other navigational features when New
Navigation has been enabled for the signed-in user or the organization. Choose Previous navigation when you see a
top-level, blue-bar—indicating that New navigation isn't enabled. For more information, see Web portal navigation.
NOTE
Choose the New navigation tab for guidance as Azure DevOps Server 2019 only supports the new navigation user
interface. For more information, see Web portal navigation.
NOTE
Choose the Previous navigation tab for guidance as TFS 2018 and earlier versions only support the previous navigation
user interface. For more information, see Web portal navigation.
New navigation
Previous navigation
Open a web browser, connect to your project, and choose Overview>Dashboards.
If you need to switch to a different project, choose the Azure DevOps logo to browse all projects.
Choose the Previous navigation tab for guidance. New navigation isn't supported for TFS 2018 and earlier
versions.
NOTE
Requires TFS 2015.1 or later version.
To add the markdown widget to the dashboard, choose Edit. The widget catalog will automatically open.
1. Add or drag the Markdown widget onto the dashboard where you want it located.
2. Choose Done Editing to exit dashboard editing. This will dismiss the widget catalog. You can then
configure the markdown widget as needed.
3. Choose the gear icon to open the configuration dialog for the widget.
To edit a markdown widget, you may need to be a team admin, a member of the Project Administrators
group, or be granted permissions. To learn more, see Set dashboard permissions.
4. Adjust the widget size as needed to fit the contents of the markdown you'll enter. The largest size is 10 tiles
wide by 10 tiles tall. You can always adjust this later.
5. Enter the text and markdown syntax into the configuration the configuration dialog. For supported syntax,
see Syntax guidance for Markdown files, widgets, wikis, and pull request comments.
Here we show some simple text with a bulleted list of four links
TIP
To link to a wiki page,use the following syntax:
/ProjectName/_wiki/wikis/WikiRepositoryName?pagePath=/FileName
To link to a repository file, page, or image within the project, rich-click the file and use the full URL.
NOTE
Links to documents on file shares using file:// are not supported. This restriction has been implemented for
security purposes.
6. Optionally, you can choose to point to a file in your repository.
4. Choose the gear icon to open the configuration dialog for the widget.
To edit a markdown widget, you may need to be a team admin, a member of the Project Administrators
group, or be granted permissions. To learn more, see Set dashboard permissions.
5. Adjust the widget size as needed to fit the contents of the markdown you'll enter. The largest size is 10 tiles
wide by 10 tiles tall. You can always adjust this later.
6. Enter the text and markdown syntax into the configuration the configuration dialog. For supported syntax,
see Syntax guidance for Markdown files, widgets, wikis, and pull request comments.
Here we show some simple text with a bulleted list of four links
To link to a wiki page, repository file, or page within the project, use this format:
/DefaultCollection/Fabrikam%20Fiber/Voice/_wiki?pagePath=%2FHome
/DefaultCollection/Fabrikam%20Fiber/Voice/_git/Fabrikam%20Fiber?path=%2FREADME.md
/DefaultCollection/Fabrikam%20Fiber/Voice/_backlogs?level=Backlog%20items&showParents=false&_a=backlog
NOTE
Links to documents on file shares using file:// are not supported on TFS 2017.1 and later versions. This
restriction has been implemented for security purposes.
10. When you're finished with your changes, choose to exit dashboard editing.
Related articles
Add and manage dashboards
Add a widget to a dashboard
Syntax guidance for Markdown files, widgets, wikis, and pull request comments
Marketplace widgets
Configure a Burndown or Burnup widget
1/31/2019 • 13 minutes to read • Edit Online
NOTE
The Burnup and Burndown widgets are available by installing the Analytics extension
A burndown chart is a useful tool to track completion of a predefined scope of work over a predefined period of
time. For example, a sprint burndown tracks the sprint backlog completion by end of the sprint. A release
burndown tracks the release backlog completion by the end of the release. A bug burndown chart can also be
used to track completion of a set of bugs by a certain date.
Burndown widget configured to display a Release Burndown
Burndown widget configured to display a Bug Burndown
If you wish to track progress across teams, just add more teams using the team selector. You may also
select teams from other projects.
The Burndown chart will display the burndown of remaining work for all selected teams.
NOTE
While you can select teams from other projects, all of the available configuration options—Work items, Field
criteria, and Burndown on will show selections from your current project.
The list of selectable backlogs, work item types, and fields are based on your current project.
For example, if you select a work item type that doesn't exist in another project, the burndown will not include work
items from that project. If you select a field that doesn't exist in another project, that field will be considered blank for
the burndown. Therefore, a burndown created across multiple projects will only work if the Process for those projects
are the same, or at least very similar.
3. Choose your work items. The burndown can include work based on items in your Backlog or by Work
item type.
You can select a Backlog, which include all the work items in that backlog.
If you select the Stories backlog you are presented with an additional option: Include bugs on the Stories
backlog. Place a checkmark in the box to include bugs along with user stories in your burndown.
This option is presented for the PBI Backlog for Scrum projects, and the Requirements backlog for CMMI
projects.
NOTE
If your project has been customized using a Hosted XML process and has created a customized bug work item
category name, then the Burndown and Burnup widgets won't be able to query for work items within that category.
To query for bugs, the customized bug work item type must belong to the default Bug Category, reference name
Microsoft.BugCategory .
You can also select Work item type to burndown on a specific work item type. In the list, you will find all
the project's work item types including custom work item types.
NOTE
When setting filters in this step or the following step, it is important to understand how filters are applied to
historical data. Read Filters applied to historical data for more information.
4. (Optional) Select field criteria to limit the work items that appear in the chart.
You can filter by any field available in your project, even a specific tag. For example, you can narrow your
burndown to top priority items by adding a filter Priority <= 2.
You may add multiple field criteria, by selecting Add criteria. For example, you can also select a custom
field such as Release, to create a burndown chart of only those items assigned to a specific release.
NOTE
All field criteria are AND-ed together. That is, work items must match all the field criteria to be included in the
burndown or burnup chart.
NOTE
Burndown works best when aggregating size fields like story points. If you choose to Burndown on fields that
change during the sprint, like Remaining Work for Tasks, the calculation of "Items not Estimated" will grow as items
are closed.
Start Date Determines the original scope baseline. The chart burns
down from the original scope. % Complete and Total
Scope Increase are calculated based on your original
scope.
Plotting Interval Here you select the intervals to plot between the Start
Date and End Date. Average Burndown is based on the
selected interval. You can plot burndown based on
daily/weekly/monthly intervals or based on an iteration
schedule.
The selectable iterations are based on the current project, even if you selected teams from other projects.
Since the burndown chart plots remaining work based on the end date of the iteration, it calculates
remaining work across all teams/projects, based on that iteration end date. For example, if an iteration ends
on 11/10/2017, the burndown chart calculates remaining work as of 11/10/2017, counting or summing all
work items for every team/project. Therefore, a cross-project burndown will work when plotting by
iterations, as long as you are OK with having all the teams reporting on the same iteration schedule.
The burndown chart uses the end date of each iteration to plot the remaining work for that iteration.
NOTE
The Average Burndown assumes that every iteration is the same length. It does not consider iterations that are
different lengths. Additionally, it assumes that the interval between the Start Date and the first iteration is a full
iteration, even if the length of time between Start Date and the first iteration's end date does not match your typical
length of iteration. For best results, enter a Start Date that is the same as the first iteration's start date.
If you select to plot based on an iteration schedule, you will not be able to select End Date. The burndown
assumes the End Date is the last iteration's end date.
Plot based on a daily, weekly, or monthly interval
After selecting the Start Date, set Plot burndown by to Date. Specify the End Date for your burndown.
You can set Plot interval to Days, Weeks, or Months.
If you select Weeks, then you'll be able to select the Last day of week. The remaining work for each
interval will be calculated based on that day.
If you select Months, then burndown will be calculated based the last day of each month.
NOTE
The Average Burndown assumes that every interval is the same length. It does not consider months that are
different lengths. Additionally, it assumes that the interval between the Start Date and the first month is a full
month, even if the length of time between Start Date and the first month's end date does not match your typical
length of a month. For example, a Start Date of 11/15/2017, would plot the first month as 10/31/2017, but would
be counted as a full month for your Average Burndown. For best results, enter a Start Date that is the same as
the first month's start date. This is also true when plotting by weekly intervals.
Date range The start and end date of the burndown. When burndown is
plotted by iterations the end date is the end of the last
iteration
Items not estimated Shows only when burning down on a Sum of a field. It
represents the current number of items that do not have a
value in the selected Burndown on field. You may choose or
press the number to see a full list of work items without
estimates.
Total Scope Increase show how much work was added to the original scope since
the burndown started.
Original Scope Original scope is all remaining work as of the specified Start
Date. The chart burns down from the original scope. %
Complete and Total Scope Increase are calculated based on
your original scope.
Total Scope Represents to the total scope of the burndown. The plotted
points include both completed and remaining work. The total
scope line tells you how much scope change your project has.
For past data points, the plotted total scope represents actual
total scope as of the end of each interval/iteration. For future
data points, the plotted total scope represents a projected
scope change, based on past scope changes.
Burndown Represents the burndown. The burndown line tells you how
fast you are burning down the work. For past data points, the
plotted burndown represents actual burndown as of the end
of each interval/iteration. For future data points, the plotted
burndown represents a projected burndown, based on past
burndown.
2. Choose your work items. For this example choose the story backlog.
3. Select the iteration path you want to create the sprint burndown for. Add a field criteria on "Iteration Path"
to match your sprint. You can also choose to add other field criteria like Priority to filter your burndown.
4. Select how you want to calculate burndown. You can use Count of work items, or sum of any field.
5. Set the start date to be the first day of your sprint. For example, 10/22/2017.
6. Set Plot burndown by to Date.
7. Set the end date to be the last day of your sprint. For example 11/9/2017.
8. Save your configuration. This widget now shows a daily burndown of the Fabrikam Fiber - Website team
for Sprint 120. The burndown shows a count of work items completed per day. To change the sprint this
widget is monitoring, for example Sprint 121, you will need to manually change the dates in the widget
configuration.
Related articles
Define iteration paths (aka sprints) and configure team iterations
Add a custom field to a work item type
Industry resources
Managing Myopia with Release Burndowns
Configure a cumulative flow chart
1/31/2019 • 4 minutes to read • Edit Online
Azure DevOps Services | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013
You use cumulative flow diagrams (CFD ) to monitor the flow of work through a system. There are two CFD
charts, the one viewed from the Kanban board and the one you access by adding the CFD widget to your
dashboard.
The CFD widget provides more configuration options than those supported by the default CFD charts shown on
the backlog and board pages. With the CFD widget, you can monitor the count of work items as they
progressively move through various states which you define. You can configure the CFD chart to monitor the
flow of epics, features, user stories, product backlog items, or requirements, depending on the process (Agile,
Scrum, or (CMMI) you've selected.
Use this topic to learn how to:
Install and configure the Cumulative Flow widget (Analytics service)
View and configure the built-in Cumulative Flow chart (work tracking datastore)
For usage guidance, see Cumulative flow, lead time, and cycle time guidance.
You use cumulative flow diagrams (CFD ) to monitor the flow of work through a system. Use this topic to learn
how to:
View and configure the built-in Cumulative Flow chart (work tracking datastore)
For usage guidance, see Cumulative flow, lead time, and cycle time guidance.
5. Choose the actions icon and select the Configure option to open the configuration dialog. Modify the
title, and then select the team, backlog level, swimlanes, and time period you want to monitor.
6. For a continuous flow diagram, select Rolling period and specify the number of days you want to view on
the chart.
Or, for a fixed scope view, choose and specify the Start date. Choose this view if your team employs a
Scrumban process or follows a standard sprint process.
The main difference between these two types of CFD charts is that the fixed scope CFD will provide
information (in most cases) of scope change.
7. Choose the color. You can distinguish the CFD for different teams by choosing different colors.
8. Choose Save when done. The following image shows an example CFD chart showing 30 days of data.
View the built-in cumulative flow chart
NOTE
Your web portal uses either the New navigation or Previous navigation user interface. Choose the New navigation tab
if the New Navigation feature is enabled. You'll see a vertical sidebar along with other navigational features when New
Navigation has been enabled for the signed-in user or the organization. Choose Previous navigation when you see a
top-level, blue-bar—indicating that New navigation isn't enabled. For more information, see Web portal navigation.
NOTE
Choose the New navigation tab for guidance. Azure DevOps Server 2019 supports the New Navigation user interface.
For more information, see Web portal navigation.
NOTE
Choose the Previous navigation tab for guidance. TFS 2018 and earlier versions only support the previous navigation
user interface. For more information, see Web portal navigation.
New navigation
You open the built-in (work tracking datastore) CFD for your product or portfolio backlog by choosing the image
in the upper-right corner of your Boards>Boards page.
::: moniker-end ��
::: moniker range=">= tfs-2013 <= tfs-2018"
Choose the Previous navigation tab for guidance. New navigation isn't supported for TFS 2018 and earlier
versions.
::: moniker-end��
Previous navigation
::: moniker range=">= tfs-2013 <= tfs-2018 || azure-devops"
You open the built-in (work tracking datastore) CFD for your product or portfolio backlog by choosing the image
in the upper-right corner of your Work>Backlogs page.
Choose New navigation for guidance. Previous navigation isn't supported for Azure DevOps Server 2019.
The CFD shows the count of items in each Kanban column for the past 30 weeks or less. From this chart you can
gain an idea of the amount of work in progress and lead time. Work in progress counts unfinished requirements.
Lead time indicates the amount of time it takes to complete a requirement once work has started.
::: moniker-end ��
::: moniker range=">= tfs-2013 <= tfs-2018"
Choose the Previous navigation tab for guidance. New navigation isn't supported for TFS 2018 and earlier
versions.
::: moniker-end��
Previous navigation
::: moniker range=">= tfs-2013 <= tfs-2018 || azure-devops"
1. Open the backlog level for which you want to configure and then open the common configuration dialog.
Choose the gear icon.
If you're not a team admin, get added as one. Only team and project admins can customize the team
Kanban boards and CFD charts.
2. Choose Cumulative flow and specify the team's preferences.
Choose New navigation for guidance. Previous navigation isn't supported for Azure DevOps Server 2019.
These measures help teams plan, spot variations in efficiency, and identify potential process issues. The lower the
lead and cycle times, the faster the throughput your team has.
In this topic you'll learn:
How to install and configure the Lead Time and Cycle Time widgets (Analytics service)
How to interpret the scatter-plot control charts
How moving average and standard deviation are calculated in the charts
To learn more, see Cumulative flow, lead time, and cycle time guidance.
5. For a continuous flow, choose Rolling period and specify the number of days you want to view on the
chart.
Or, for a fixed scope view, choose and specify the Start date. Choose this view if your team employs a
Scrumban process or follows a standard sprint process.
The main difference between these two types of charts is that the fixed scope chart will provide
information (in most cases) of scope change.
6. Choose Save when done. The following image shows an example Lead Time chart showing 60 days of
data.
For your lead/cycle time charts to provide useful data, your team must Update the status in a timely
manner those work items that the widgets track.
The chart dots represent completed work items where their position on the horizontal axis represents the date
they were completed. Their position on the vertical axis represents the calculated lead time or cycle time.
Larger dots represent multiple work items with the same lead/cycle time
Dot color corresponds to the work item type displayed in the legend
Dark gray dots correspond to a mix of work item types.
Summary elements include:
Days on average (average lead time or cycle time) for the main work item types configured for the chart
The number of backlog work items used in the chart calculations; if there are more than three types of work
items, you'll see a summary for Other
The black trend line indicates the moving average
The band around the trend line shows the standard deviation.
Interactive elements include:
Hover over any dot to see which work items contributed to the data point and the lead/cycle time for those
items
Choose a dot to open the work item or query that lists the work items
To filter the chart, choose a work item type in the legend ( , , or other icon) to filter on that type; to return
to the original chart, refresh the dashboard.
Related notes
We recommend your team review the lead/cycle time charts before or during each retrospective. Use lead time to
help estimate delivery times and track service level agreements (SLAs). Use cycle time to identify potential
process issues, spot variations in trends, and help with planning.
Cumulative flow, lead time, and cycle time guidance
Kanban basics
Cumulative flow diagram
Workflow states and state categories
Agile, Scrum, and CMMI processes
Configure the Velocity widget
1/31/2019 • 5 minutes to read • Edit Online
NOTE
The Velocity widget is available by installing the Analytics extension. For TFS 2018 and earlier, you have access to the
velocity chart provided by the work tracking datastore.
4. Specify the number of sprints you want to view. The default is 6 and the maximum is 15.
5. (Optional) Select the check boxes to show additional information for work completed later than planned
for each sprint.
Displayed planned work for iterations: Check this box to display the amount of work planned for an
iteration at the start of the iteration. This is useful for comparing your planned work to actual deliverables.
By default, the count of planned work begins as of the start date of the iteration.
Days past start date of iteration when planned work is final: Specify a number of days past the
start date to count planned work. For example, if the first 2 days of an iteration are for planning,
then you can enter "3", and planned work will be counted on the 3rd day.
For example, if the Iteration starts on 01/01/2018, and 3 backlog items are assigned to the
iteration on 01/01/2018 end-of-day, then those 3 backlog item items will be considered as
Planned. If your team doesn't complete planning until a few days into the iteration, then you can
update the Days past start date of iteration when planned work is final.
NOTE
Work is considered Planned if it is assigned to the iteration as-of the Iteration Start Date.
Highlight work completed late: Work items marked complete after the iteration end date are
considered to be completed late and will show as light green. This is useful for spotting a trend
where work items are marked complete after the iteration is complete.
Days past end date of iteration after which work is late: Specify a number of days past which a
work item is considered late if it's status is still new or in progress.
For example, entering 3 days will give the team 3 days after the end of an iteration to mark work
items complete or done, before they are considered late.
NOTE
A work item is considered late when the work item's Completed Date is later than End Date of the Iteration
the work item is currently assigned to.
It will take into account the value you enter for Days past end date of iteration after which work is late.
6. Choose Save when done. The following image shows Velocity based on Story Points and 8 sprints of
data.
Azure Boards | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013
Teams track their velocity to help them determine how much work they can perform sprint-over-sprint. The built-
in team velocity chart provides an indication of how much work a team can complete during a sprint. The chart is
only available for the product backlog and is based on the sum of estimates made to Effort (PBIs), Story Points
(user stories), or Size (requirements). Velocity calculations rely on the team's ability to estimate backlog items.
Example Velocity chart from the work tracking data store
NOTE
In addition to the built-in velocity chart, Azure DevOps users have access to the Velocity widget. The Velocity widget
enables you to view more sprints and additional information than that provided by the velocity chart.
NOTE
The images you see from your web portal may differ from the images you see in this article. These differences result from
updates made to your web app, options that you or your admin have enabled, and which process was chosen when
creating your project—Agile, Basic, Scrum, or CMMI.
From your web browser, open your product backlog.
NOTE
Your web portal uses either the New navigation or Previous navigation user interface. Choose the New navigation tab
if the New Navigation feature is enabled. You'll see a vertical sidebar along with other navigational features when New
Navigation has been enabled for the signed-in user or the organization. Choose Previous navigation when you see a
top-level, blue-bar—indicating that New navigation isn't enabled. For more information, see Web portal navigation.
NOTE
Choose the New navigation tab for guidance. Azure DevOps Server 2019 supports the New Navigation user interface.
For more information, see Web portal navigation.
NOTE
Choose the Previous navigation tab for guidance. TFS 2018 and earlier versions only support the previous navigation user
interface. For more information, see Web portal navigation.
New navigation
1. (1) Check that you have selected the right project, (2) choose Boards>Backlogs, and then (3) select the
correct team from the team selector menu.
To choose another team, open the selector and select a different team or choose the Browse all
backlogs option. Or, you can enter a keyword in the search box to filter the list of team backlogs for the
project.
TIP
Choose the star icon to favorite a team backlog. Favorited artifacts ( favorited icon) appear at the top of the
team selector list.
2. Check that you have selected Backlog items (for Scrum), Stories (for Agile), or Requirements (for
CMMI) as the backlog level.
NOTE
Work items based on the Scrum process get counted in the chart once their State is set to Committed, whereas
items based on the Agile and CMMI processes get counted once their State is set to Active. This behavior is set
through the workflow states to category state mappings.
Choose New navigation for guidance. Previous navigation isn't supported for Azure DevOps Server 2019.
Azure Boards | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013
Throughout your sprint, you can monitor the sprint burndown chart to determine if your team is on track to
complete its sprint plan.
Use this article to learn:
How to view current and past sprint burndowns
Required and recommended activities to support sprint burndown
For usage guidance, see Burndown guidance.
NOTE
The system automatically builds a sprint burndown chart based on the tasks and Remaining Work estimates you define and
update throughout the sprint cycle. For details, see Sprint planning and taskboard. To open the sprint burndown chart,
jump to the section Open sprint burndown chart.
NOTE
Choose the Previous navigation tab for guidance. TFS 2018 and earlier versions only support the previous navigation
user interface. For more information, see Web portal navigation.
New navigation
Previous navigation
1. From your web browser, open your team's sprint backlog. (1) Check that you have selected the right project,
(2) choose Boards>Sprints, (3) select the correct team from the team selector menu, and lastly (4), choose
Backlog.
2.
To choose another team, open the selector and select a different team or choose the Browse all
sprints option. Or, you can enter a keyword in the search box to filter the list of team backlogs for the
project.
3. To choose a different sprint than the one shown, open the sprint selector and choose the sprint you want.
The system lists only those sprints that have been selected for the current team focus. If you don't see the
sprints you want listed, then choose New Sprint from the menu, and then choose Select existing
iteration. For details, see Define iteration paths (aka sprints).
Choose the Previous navigation tab for guidance. New navigation isn't supported for TFS 2018 and earlier
versions.
Choose the Previous navigation tab for guidance. New navigation isn't supported for TFS 2018 and earlier
versions.
NOTE
You can't add the system-generated sprint burndown chart to a dashboard. However, you can add the Sprint burndown
widget, which captures the same information for the current sprint, to a dashboard.
In particular you can review your sprint burndown charts to show the team patterns in execution. The burndown
charts maintain a record of the team's ability to plan and estimate.
SPRINT 1 SPRINT 2 SPRINT 3
Teams may find it useful to review this record periodically during their sprint retrospectives. It may spark useful
discussions and lead to setting one or more sprint goals, such as:
How does our projected velocity match up to our actual velocity?
How can we more accurately determine how much we will be able to accomplish in a sprint?
How can we complete work at a more regular pace throughout the sprint?
Choose the Previous navigation tab for guidance. New navigation isn't supported for TFS 2018 and earlier
versions.
Related articles
You can learn more about defining, planning, and executing your sprints from these topics:
Schedule sprints
Sprint planning
taskboard
And, from these industry resources:
Understanding the Scrum Burndown Chart
Task sizing in Agile software development
For on-premises deployments, you can specify the format that appears—h for hours or d for days—for the
remaining work field.
Configure the Test Results Trend (Advanced) widget
1/31/2019 • 2 minutes to read • Edit Online
NOTE
The Test Results Trend (Advanced) widget is based on the Analytics Service and is available only for Azure DevOps at this
time. For on-premises TFS, you can use the Test Results Trend widget.
Prerequisites
In order to configure the Test Results Trend widget, you must have the following in place:
Set up continuous testing for your build pipeline. For details, see Run unit tests with your builds
Installed the Analytics Marketplace extension. You must be an organization owner or a member of the Project
Collection Administrator group to add extensions.
Added the widget to a dashboard. You must be a team administrator or have permissions to add and edit
dashboards. Default settings provide all team members wit permissions.
Azure DevOps Services | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013
Review your sprint burndown chart throughout your sprint cycle to check for these indicators:
Is remaining work getting updated regularly? Flat spaces within the blue area indicate a lack of updates.
Is remaining work increasing instead of decreasing? Increases can indicate work that wasn't estimated or
planned. Both signal a need for the team to discuss how they'll complete the sprint tasks on time.
Based on the actual burn rate, does the team feel confident that they'll complete the work by the end of the
sprint?
To configure or view sprint burndown charts, see Sprint burndown.
Scope management
By estimating remaining work of tasks for each product backlog item, teams have a good understanding of what
they can accomplish within a sprint. Because the sprint tasks represent the overall sprint scope, the sprint scope is
well defined. Anything that is not represented by a task in the sprint should be considered out of scope for the
sprint.
As the team makes progress, divergences from the ideal trend line help the team monitor divergences from scope.
Azure DevOps Services | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013
You use cumulative flow diagrams (CFD ) to monitor the flow of work through a system. The two primary metrics
to track, cycle time and lead time, can be extracted from the chart. Or, you can add the Lead time and cycle time
control charts to your dashboards.
You use cumulative flow diagrams (CFD ) to monitor the flow of work through a system. The two primary metrics
to track, cycle time and lead time, can be extracted from the chart.
To configure or view CFD charts, see Configure a cumulative flow chart.
The Fixed period CFD shown here is Fixed period CFD for a completed sprint
for a completed sprint.
The top line represents the scope set
for the sprint. And, because the work
must be completed by the last day of
the sprint, the slope of the Closed
state indicates whether or not a team
is on track to complete the sprint.
The easiest way to think of this view
is as a burnup chart.
The data is always depicted with the
first step in the process as the upper
left and the last step in the process as
the bottom right.
Chart metrics
CFD charts display the count of work items grouped by state/Kanban column over time. The two primary metrics
to track, cycle time and lead time, can be extracted from the chart.
METRIC DEFINITION
Cycle Time 1 Measures the time it takes to move work through a single process or workflow state, calculated by the
start of the given process to the start of the subsequent process.
Lead Time 1 For a continuous flow process: measures the amount of time it takes from when a request is made
(such as adding a proposed user story) until that request is completed (closed).
For a sprint or fixed period process: measures the time from when work on a request begins until the
work is completed (i.e. the time from Active to Closed).
Work in Progress Measures the amount of work or number of work items that are actively being worked.
Scope Represents the amount of work committed for the given period of time. Only applies to fixed period
processes.
Note:
1. The CFD widget (Analytics Service) and built-in CFD chart (work tracking data store) do not provide discrete
numbers on Lead Time and Cycle Time. However, the Lead Time and Cycle Time widgets do provide these
numbers.
There is a very tight, well defined correlation between Lead Time/Cycle Time and Work in Progress (WIP ). The
more work in progress, the longer the cycle time which leads to longer lead times. The opposite is also true—the
less work in progress, the shorter the cycle and lead time is because the development team can focus on fewer
items. This is a key reason why you can and should set Work In Progress limits on the Kanban board.
The count of work items indicates the total amount of work on a given day. In a fixed period CFD, a change in this
count indicates scope change for a given period. In a continuous flow CFD, it indicates the total amount of work
in the queue and completed for a given day.
Decomposing this work into specific Kanban board columns provides a view into where work is in the process.
This provides insights on where work is moving smoothly, where there are blockages and where no work is being
done at all. It's difficult to decipher a tabular view of the data, however, the visual CFD chart provides clear
evidence that something is happening in a given way.
Flat lines appear when the team doesn't update Flat lines
their work with a regular cadence. The Kanban
board provides the quickest way to transition work
from one column to another.
Flat lines can also appear when the work across
one or more processes takes longer than planned
for. For this to occur, flat lines must appear across
many parts of the system because if only one part
of the system or two parts of a system have
problems then you'll see a bulge.
Mura, the lean term for flat lines and bulges, means unevenness and indicates a form of waste (Muda) in the
system. Any unevenness in the system will cause bulges to appear in the CFD.
Monitoring the CFD for flat lines and bulges supports a key part of the Theory of Constraints project
management process. Protecting the slowest area of the system is referred to as the drum-buffer-rope process
and is part of how work is planned.
How do you fix flow problems? You can solve the problem of lack of timely updates through daily stand-ups,
other regular meetings, or scheduling a daily team reminder email.
Systemic flat-line problems indicate a more challenging problem (although you should rarely if ever see this).
This problem means that work across the system has stopped. This may be the result of process-wide blockages,
processes taking a very long time, or work shifting to other opportunities that aren't captured on the board.
One example of systemic flat-line can occur with a features CFD. Feature work can take much longer than work
on user stories because features are composed of several stories. In these situations, either the slope is expected
(as in the example above) or the issue is well known and already being raised by the team as an issue, in which
case, problem resolution is outside the scope of this topic to provide guidance.
Teams can proactively fix problems that appear as CFD bulges. Depending on where the bulge occurs, the fix may
be different. As an example, let's suppose that the bulge occurs in the development process because running tests
is taking much longer than writing code, or testers are finding may be finding a large number of bugs and
continually transition the work back to the developers so the developers have a growing list of active work.
Two potentially easy ways to solve this problem are: 1) Shift developers from the development process to the
testing process until the bulge is eliminated or 2) change the order of work such that work that can be done
quickly is interwoven with work that takes longer to do. Look for simple solutions to eliminate the bulges.
NOTE
Because many different scenarios can occur which cause work to proceed unevenly, it's critical that you perform an actual
analysis of the problem. The CFD will tell you that there is a problem and approximately where it is but you must
investigate to get to the root cause(s). The guidance provided here indicate recommended actions which solve specific
problems but which may not apply to your situation.
If a work item enters a Completed state and then is reactivated and moved out of that state, then any additional
time it spends in a Proposed/In Progress state will contribute to its lead/cycle time when it enters a Completed
state for the second time.
If your team uses the Kanban board, you'll want to understand how your Kanban columns map to workflow
states. For more information on configuring your Kanban board, see Add columns.
To learn more about how the system uses the state categories—Proposed, In Progress, and Completed—see
Workflow states and state categories.
Azure DevOps Services | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013
Velocity provides a useful metric for these activities:
Support sprint planning
Forecast future sprints and the backlog items that can be completed
A guide for determining how well the team estimates and meets their planned commitments
And, with the velocity widget, you can quickly determine the following:
Planned velocity
Actual (completed) velocity
Work completed later than planned
Amount of work not completed
To configure or view Velocity charts, see Configure and view Velocity charts.
The velocity chart requires that teams estimate their backlog items with a number using the Effort, Story Points,
or Size fields.
The velocity widget allows teams to track velocity based on the count of backlog items or with estimates for the
Effort, Story Points, or Size fields.
Related articles
Forecast your sprints
Plan your sprint
Industry resources
How Should We Use Velocity?
Velocity Is Not the Goal
How to Calculate and Use Velocity to Help Your Team and Your Projects
Add other teams
If you work with several teams, and each team wants to work with their own backlog view, velocity chart, and
forecast tool, you can add teams. Each team then gets access to their own set of Agile tools. Each Agile tool filters
work items to only include those whose assigned area paths and iteration paths meet those set for the team.
Widgets based on the Analytics Service
1/31/2019 • 4 minutes to read • Edit Online
NOTE
You need to first install the Analytics Marketplace extension.
You can then add the widget(s) to your dashboard. You must be an organization owner or a member of the
Project Collection Administrator group to add extensions.
You can then add the widget(s) to your dashboard. You must be an organization owner or a member of the
Project Collection Administrator group to add extensions.
If Boards is disabled, then all widgets associated with work item tracking, including those based on the Analytics
Service, will also be disabled. To re-enable a service, see Turn an Azure DevOps service on or off.
Burndown
The Burndown widget lets you display a trend of remaining work across multiple teams and multiple sprints. You
can use it to create a release burndown, a bug burndown, or a burndown on any scope of work over time. It will
help you answer questions like:
Will we complete the scope of work by the targeted completion date? If not, what is the projected completion
date?
What kind of scope creep does my project have?
What is the projected completion date for my project?
Burndown widget showing a release Burndown
To learn more, see Configure a Burndown or Burnup widget.
Burnup
The Burnup widget lets you display a trend of completed work across multiple teams and multiple sprints. You
can use it to create a release burnup, a bug burnup, or a burnup on any scope of work over time. When completed
work meets total scope, your project is done!
Burnup widget showing a release Burnup
Cycle Time
The Cycle time widget will help you analyze the time it takes for your team to complete work items once they
begin actively working on them. A lower cycle time is typically indicative of a healthier team process. Using the
Cycle time widget you will be able to answer questions like:
On average, how long does it take my team to build a feature or fix a bug?
Are bugs costing my team a lot of development time?
Cycle time widget showing 30 days of data
To learn more, see Cycle time and lead time control charts.
Lead Time
The Lead time widget will help you analyze the time it takes to deliver work from your backlog. Lead time
measures the total time elapsed from the creation of work items to their completion. Using the Lead time widget
you will be able to answer questions like:
How long does it take for work requested by a customer to be delivered?
Did work items take longer than usual to complete?
Lead time widget showing 60 days of data
To learn more, see Cycle time and lead time control charts.
Velocity
The Velocity widget will help you learn how much work your team can complete during a sprint. The widget
shows the team's velocity by Story Points, work item count, or any custom field. You can also compare the work
delivered against your plan and track work completed late. Using the Velocity widget, you will be able to answer
questions like:
On average, what is the velocity of my team?
Is my team consistently delivering what we planned?
How much work can we commit to deliver in upcoming sprints?
Velocity widget showing 8 sprints of data based on Story Points
To learn more, see Configure and view Velocity widgets.
Azure DevOps Services | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015
NOTE
Adding charts to a dashboard is not a supported feature in TFS 2013, instead, you can pin items to a team homepage.
Consider upgrading to the latest TFS version to get access to the widget catalog and multiple team dashboards.
You can add the charts described in this topic to a dashboard from their corresponding functional page, such as
Builds, Releases, or Queries.
NOTE
Adding charts to a dashboard is requires TFS 2015.1 or later version. For TFS 2015, you can pin items to a team homepage.
Consider upgrading to the latest TFS version to get access to the widget catalog and multiple team dashboards.
Prerequisites
You must be a team admin to add a chart to a team dashboard or homepage, or be granted permissions to
manage a dashboard. Or, if you're a member of the Project Administrators group, you can add charts to any
team's dashboards or home page.
NOTE
Your web portal uses either the New navigation or Previous navigation user interface. Choose the New navigation tab if
the New Navigation feature is enabled. You'll see a vertical sidebar along with other navigational features when New
Navigation has been enabled for the signed-in user or the organization. Choose Previous navigation when you see a top-
level, blue-bar—indicating that New navigation isn't enabled. For more information, see Web portal navigation.
NOTE
Choose the New navigation tab for guidance. Azure DevOps Server 2019 supports the New Navigation user interface. For
more information, see Web portal navigation.
NOTE
Choose the Previous navigation tab for guidance. TFS 2018 and earlier versions only support the previous navigation user
interface. For more information, see Web portal navigation.
1. Select your team context and then open Pipelines>Releases to add a release definition chart to a team
dashboard.
New navigation
Previous navigation
If you aren't a team administrator, get added as one. The Add to dashboard menu selection is disabled when
you don't have permissions to add it to the dashboards of the selected team context.
2. Release pipeline charts show the success (green), in progress (blue), cancellation (red), or non-deployment
(grey) to an environment for the current and last four releases:
Add a test status or result chart
As you create and run tests, you can track your status by defining lightweight charts of test plans and test results.
NOTE
You can also add a Chart for test plans widget to a dashboard.
Select your team context, make sure you're a team admin, and if you haven't yet created the dashboard, do that
now.
Open Test>Test Plans and then Charts and select the dashboard to add the test chart to.
NOTE
You can also add a test result trend chart widget to a dashboard.
Requires TFS 2017.2 or later version.
1. Select your team context, make sure you're a team admin, and if you haven't yet created the dashboard, do
that now.
2. Open a build summary for a build pipeline to which you've added tests, open the Tests page, and choose the
bar chart for either Test failures or Test duration.
3. Open the actions menu and choose the dashboard to add the chart to.
NOTE
You can also add a work item query chart widget to a team dashboard.
1. First, make sure you have selected your team context. Only those dashboards created for a team appear in
the context menu for each query or chart. Switch team context as needed.
2. If you aren't a team administrator,get added as one. Only team and project admins can add and customize
team dashboards.
3. If you haven't yet created the dashboard, do that now.
4. From the charts Actions menu, choose the team dashboard.
You can only add charts associated with shared queries. Charts associated with queries under My Queries
folder won't display the add to dashboard option.
Azure DevOps Services | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013
You can quickly view the status of work in progress by charting the results of a flat-list query. You can create
several types of charts—such as pie, column, or trend—for the same query. Charts support viewing a count of
work items or a sum of values for select numeric fields, such as Remaining Work or Original Estimate.
NOTE
For examples of queries based on numeric fields, see Query by numeric fields. For information on creating charts that track
test progress and results, see Track test status.
For example, the following image illustrates four different charts created from the same flat-list query. The pie
chart groups the 146 active bugs by priority, and the bar chart groups the bugs by team and their triage status.
The last two chart show two different trend views of the active bugs over the last two weeks.
Prerequisites
By default, users with Basic access or higher can create charts from a flat list query. Users with Stakeholder
access can't view or create charts from the Queries page, however, they can view charts added to a team
dashboard. For details, see About access levels.
You must connect to a project. If you don't have a project yet, create one.
To create a chart, you must be added to a project as a member of the Contributors or Project
Administrators security group. To get added, Add users to a project or team.
To add a chart to a team dashboard, you must be a member of the team, be a team administrator, or be a
member of the Project Administrators security group.
You can add charts to multiple team dashboards and get access to the widget catalog, which is another way to
add charts to a dashboard.
NOTE
Users with Stakeholder access for a public project have full access to query chart features just like users with Basic access.
For details, see About access levels.
You must connect to a project. If you don't have a project yet, create one.
To create a chart, you must be added to a project as a member of the Contributors or Project
Administrators security group. To get added, Add users to a project or team.
To add a chart to a team dashboard, you must be a member of the team, be a team administrator, or be a
member of the Project Administrators security group.
You can add charts to multiple team dashboards and get access to the widget catalog, which is another way to
add charts to a dashboard.
You must connect to a project. If you don't have a project yet, create one.
To create a chart, you must be added to a project as a member of the Contributors or Project
Administrators security group. To get added, Add users to a project or team.
To add a chart to a team dashboard, you must be a member of the team, be a team administrator, or be a
member of the Project Administrators security group.
You can pin charts to a team homepage, and with TFS 2015.1 and later versions, you can add charts to
multiple team dashboards and get access to the widget catalog
You must connect to a project. If you don't have a project yet, create one.
To create a chart, you must be added to a project as a member of the Contributors or Project
Administrators security group. To get added, Add users to a project or team.
To learn more about default groups, see About permissions and groups.
2. Select the chart type and field for grouping values. When you use pie, bar, and column charts, select a
single field to view a count of work items.
If you don't see the field you want in the Group by drop-down list, add the field as a column to the query
and save the query. You can group by any field except date-time and free-form text fields. For example:
To group by work assignments, include the Assigned To in the query or column options
To group by sprints or iterations, include the Iteration Path in the query or column options
To group by team, include the Area Path or Node Name in the query or column options
To group by a custom field, include it in a query clause or column options.
If you receive an error message when you close the chart editor, you need to request Basic access.
3. To sort the results, choose Value or Label as the sort option and then Ascending or Descending.
To change a color, simply choose a color from the Series set of color pickers.
To change a color, simply choose a color on the chart and pick a new color from the color picker.
Charts automatically update when you edit the query or refresh the query results.
Stacked bar chart
A stacked bar chart lets you track progress against two field values. Node Name will display the last leaf within
the hierarchy of area paths. Use this when you want to show data across teams.
Trend chart
Trend charts let you view progress over time. You can select a rolling period ranging from the last week to the last
year (earlier versions of TFS may have limited selections).
Trend data is extracted from the work tracking data store. Like most data stores, the schema of the relational
database is designed and optimized for the online transactional processing of data. As the tool or plug-in
performs an activity, it writes the latest information to the operational store. Therefore, data in the operational
store is constantly changing and being updated, and all data is current.
Burndown chart
Choose the Sum operator for Remaining Work to view a burndown chart of tasks.
Add a chart to a team dashboard
To add a chart to your team's home page, you must be a team administrator or have permissions to edit a
dashboard (default settings). You can only add charts defined for shared queries.
Choose the actions icon for the chart you want to add, and select Add to dashboard.
In the dialog that opens, select the team dashboard to add the chart to.
To add other types of charts, such as test results and build summary charts, see Add widgets and chart to a
dashboard.
NOTE
Feature availability: For TFS 2013 and TFS 2015, you can pin charts to the team homepage. For TFS 2015.1 and later
versions, you can add charts to multiple team dashboards and get access to the widget catalog.
5. Give the chart a title, select the flat list query on which the chart is based, and choose the chart type.
Based on your chart type, specify values for the remaining fields. Change a chart color simply by choosing
another color from those shown.
NOTE
All rules for configuring charts described previously in this article apply to configuring the chart for work items
widget.
6. After you save your changes, you'll see the new chart has been added to the dashboard.
7. Drag the tile anywhere on the dashboard to put it where you want it.
8. When you're finished with your changes, choose Done Editing to exit dashboard edit mode.
The widget requires TFS 2015.2 or a later version. You add it to a team dashboard from the widget catalog.
1. From the web portal, open the team dashboard you want to add the chart to.
2. To add widgets to the dashboard, choose Edit. The widget catalog will automatically open. Add all the
widgets that you want and drag their tiles into the sequence you want.
If you don't see these icons, then you need to be added as a team administrator or a member of the Project
Administrators group.
3. Choose the Chart for work items widget and then choose Add.
NOTE
All rules for configuring charts described previously in this article apply to configuring the chart for work items
widget.
6. After you save your changes, you'll see the new chart has been added to the dashboard.
7. Drag the tile anywhere on the dashboard to put it where you want it.
8. When you're finished with your changes, choose to exit dashboard editing.
Related articles
Now you know how to create status and trend charts for work items. A few things to keep in mind...
To create similar charts for tests, see Track your test results
Charts you create for queries that are saved under Shared Queries are viewable by all team members and can
be added to team dashboards or pinned to a team homepage
Charts that you create for queries under your My Queries folder are visible only to you
You can copy and email the URL of any chart page to share it with a team member
For additional examples of charts created from numeric fields, see Query by a numeric field.
Also, from the web portal, you can view the following charts:
Cumulative flow diagram
Team velocity
Sprint burndown charts
Test progress and test results
Add widgets and chart to a dashboard
Widget catalog charts
NOTE
The images you see from your web portal may differ from the images you see in this article. These differences result from
updates made to your web app, options that you or your admin have enabled, and which process was chosen when creating
your project—Agile, Basic, Scrum, or CMMI.
Azure Test Plans | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015
Quickly view the status of your testing using lightweight charts. For example, find out how many test cases are
ready to run, or how many tests are passing and failing in each test suite. You can pin these charts to your home
page, then all the team can see the progress at a glance.
To use all the features described in this topic you must have either an Enterprise, Test Professional, or MSDN
Platforms subscription; or have installed the Test Manager extension for Azure Test Plans available from Visual
Studio Marketplace. See Manual testing permissions and access.
2. Select the chart type. Based on the chart, configure the fields that you want to use to group by, or for the
rows and columns.
All charts roll up the information for any child test suites of the test plan or test suite that you selected.
3. Save the chart. Now it will be displayed in the Charts page for the test plan or test suite that you selected.
Test results examples
What's the test status for a specific test suite?
Select the test suite from the Test Plans page and add a test results pie chart. Group by Outcome.
What's the test status for user stories that my team's testing this sprint?
If you have created requirement-based test suites in your test plan for your user stories, you can create a chart for
this.
1. Group these requirement-based test suites together in a static test suite.
2. Select this static test suite in the Test Plans page.
3. Add a test results stacked bar chart. Choose Suite as the Y -axis (rows) pivot and Outcome as the Group
by (columns) pivot.
All charts roll up the information for any child test suites of the test plan or test suite that you selected.
3. Select the chart type. Based on the chart, configure the fields that you want to use to group by, for rows
and columns, or the range (trend charts only).
You can't group by test suite for the test case charts.
4. Save the chart. Now it will be displayed in the charts page for the test plan or test suite that you selected.
Test case examples
How can I track burndown for test case creation?
Use a stacked area trend chart to view the burndown for how many test cases are ready to be run. Choose State
for the stack by field and Ascending for the sort field.
You can configure the dashboard widget to show a range of chart types. You must be a team administrator to do
this, but team members with Stakeholder access can view the charts on the dashboard.
Learn more about dashboards. Or learn more about team administration.
See also
FAQs for manual testing
Next step
Control how long to keep test results
1/31/2019 • 3 minutes to read • Edit Online
NOTE
The set dashboard permissions feature is available for TFS 2017.1 and later versions. For TFS 2017 and earlier versions, only
team and project administrators can add and edit dashboards.
To learn more about adding and viewing dashboards, see Add, rename, and delete dashboards.
TIP
If a user reports that they can't create or edit a team dashboard, and you've set the permissions to allow them to do so,
check that they have been added as a member of the team. This includes adding them as a team member to the default
project team. For details, see Add users to a project or specific team.
Prerequisites
If you haven't been added as a team member,get added now.
Anyone with access to a project, including stakeholders, can view dashboards.
To add, edit, or manage a team dashboard, you must have Basic access or greater and be a team admin, a
project admin, or have dashboard permissions. In general, you need to be a team member for the currently
selected team to edit dashboards.
NOTE
Your web portal uses either the New navigation or Previous navigation user interface. Choose the New navigation tab
if the New Navigation feature is enabled. You'll see a vertical sidebar along with other navigational features when New
Navigation has been enabled for the signed-in user or the organization. Choose Previous navigation when you see a
top-level, blue-bar—indicating that New navigation isn't enabled. For more information, see Web portal navigation.
NOTE
Choose the New navigation tab for guidance. Azure DevOps Server 2019 supports the New Navigation user interface.
For more information, see Web portal navigation.
NOTE
Choose the Previous navigation tab for guidance. TFS 2018 and earlier versions only support the previous navigation
user interface. For more information, see Web portal navigation.
New navigation
Previous navigation
1. Choose Project Settings and then Dashboards.
2. Check or uncheck those permissions you want to grant or restrict. Your changes are automatically saved
by the system.
1. Choose Project Settings and then Dashboards.
2. Check or uncheck those permissions you want to grant or restrict. Your changes are automatically saved
by the system.
2. Choose the Permissions tab and check those checkboxes to grant or restrict permissions to your team
members to edit and manage team dashboards. The default settings, as shown in the illustration, provide
all team members permissions to edit and manage dashboards.
NOTE
The dashboard security dialog doesn't support granting permissions to other users or groups.
Requires TFS 2017.1 or later version.
3. Choose Save to save your changes and dismiss the Settings dialog.
Related articles
Add users to a project or specific team
Add a team administrator
Add a dashboard widget
1/31/2019 • 30 minutes to read • Edit Online
Widgets on a dashboard are implemented as contributions in the extension framework. A single extension can
have multiple contributions. In this guide we will show you how to create an extension with multiple widgets as
contributions.
This guide is divided into three parts, each building on the previous ones. The goal is to start with a simple widget
and end with a comprehensive one.
|--- README.md
|--- sdk
|--- node_modules
|--- scripts
|--- VSS.SDK.min.js
|--- img
|--- logo.png
|--- scripts
|--- hello-world.html // html page to be used for your widget
|--- vss-extension.json // extension's manifest
If you're in a hurry and want to get your hands on the code right away, you can download the complete
samples here. Once downloaded, go to the widgets folder, then follow Step 6 and Step 7 directly to publish
the sample extension which has the three sample widgets of varying complexities.
Get started with some basic styles for widgets that we provide out of the box for you and some guidance on
widget structure.
Part 1: Hello World
This part presents a widget that prints "Hello World" using JavaScript.
The core SDK script, VSS.SDK.min.js , enables web extensions to communicate to the host Azure DevOps
Services frame and to perform operations like initializing, notifying extension is loaded or getting context about
the current page. Get the Client SDK VSS.SDK.min.js file and add it to your web app. Place it in the
home/sdk/scripts folder.
To learn more about the SDK, visit the Client SDK GitHub Page.
This is the glue that holds your layout together and includes references to CSS and JavaScript. You can name this
file anything, just be sure to update all references to hello-world with the name you use.
Your widget is HTML based and will be hosted in an iframe. Add the below HTML in hello-world.html . We add
the mandatory reference to VSS.SDK.min.js file and include an h2 element in the body which will be updated
with the string Hello World in the upcoming step.
<!DOCTYPE html>
<html>
<head>
<script src="sdk/scripts/VSS.SDK.min.js"></script>
</head>
<body>
<div class="widget">
<h2 class="title"></h2>
</div>
</body>
</html>
Even though we are using an HTML file, most of the HTML head elements other than script and link will be
ignored by the framework.
<script type="text/javascript">
VSS.init({
explicitNotifyLoaded: true,
usePlatformStyles: true
});
return WidgetHelpers.WidgetStatusHelper.Success();
}
}
});
VSS.notifyLoadSucceeded();
});
</script>
VSS.init initializes the handshake between the iframe hosting the widget and the host frame.. We pass
explicitNotifyLoaded: true so that the widget can explicitly notify the host when we are done loading. This
control allows us to notify load completion after ensuring that the dependent modules are loaded. We pass
usePlatformStyles: true so that the Azure DevOps Services core styles for html elements (such as body, div etc)
can be used by the Widget. If the widget prefers to not use these styles, they can pass in
usePlatformStyles: false .
VSS.require is used to load the required VSS script libraries. A call to this method automatically loads general
libraries like JQuery and JQueryUI. In our case we depend on the WidgetHelpers library which is used to
communicate widget status to the widget framework. Therefore, we pass the corresponding module name
TFS/Dashboards/WidgetHelpers and a callback to VSS.require . The callback is called once the module is loaded.
This callback will have the rest of the JavaScript code needed for the widget. At the end of the callback we call
VSS.notifyLoadSucceeded to notify load completion.
WidgetHelpers.IncludeWidgetStyles will include a stylesheet with some basic css to get you started. Make sure to
wrap your content inside a HTML element with class widget to make use of these styles.
VSS.register is used to map a function in javascript which uniquely identifies the widget among the different
contributions in your extension. The name should match the id that identifies your contribution as described in
Step 5. For widgets, the function that is passed to VSS.register should return an object that satisfies the IWidget
contract, i.e. the returned object should have a load property whose value is another function that will have the
core logic to render the widget. In our case, it is simply to update the text of the h2 element to "Hello World". It is
this function that is called when the widget framework instantiates your widget. We use the WidgetStatusHelper
from WidgetHelpers to return the WidgetStatus as success.
Warning: If this name used to register the widget doesn't match the ID for the contribution in the manifest, then the widget
will behave unexpectedly.
The vss-extension.json should always be at the root of the folder (in this guide, HelloWorld ). For all the
other files, you can place them in whatever structure you want inside the folder, just make sure to update the
references appropriately in the HTML files and in the vss-extension.json manifest.
Your logo is displayed in the Marketplace, and in the widget catalog once a user installs your extension.
You will need a 98px x 98px catalog icon. Choose an image, name it logo.png , and place it in the img folder.
To support TFS 2015 Update 3, you will need an additional image that is 330px x 160px. This is a preview image
shown in this catalog. Choose an image, name it preview.png , and place it in the img folder as before.
You can name these images however you want as long as the extension manifest in the next step is updated with
the names you use.
Step 5: Your extension's manifest: vss-extension.json
NOTE
The publisher here will need to be changed to your publisher name. To create a publisher now, visit Package/Publish/Install.
Icons
The icons stanza specifies the path to your extension's icon in your manifest.
Contributions
Each contribution entry defines certain properties.
The id to identify your contribution. This should be unique within an extension. This ID should match with the
name you used in Step 3 to register your widget.
The type of contribution. For all widgets, this should be ms.vss-dashboards-web.widget .
The array of targets to which the contribution is contributing. For all widgets, this should be
[ms.vss-dashboards-web.widget-catalog] .
The properties is an object that includes properties for the contribution type. For widgets, the below
properties are mandatory.
PROPERTY DESCRIPTION
catalogIconUrl Relative path of the catalog icon that you added in Step 4 to
display in the widget catalog. The image should be 98px x
98px. If you have used a different folder structure or a
different file name, then this is the place to specify the
appropriate relative path.
previewImageUrl Relative path of the preview image that you added in Step 4
to display in the widget catalog for TFS 2015 Update 3 only.
The image should be 330px x 160px. If you have used a
different folder structure or a different file name, then this is
the place to specify the appropriate relative path.
uri Relative path of the HTML file that you added in Step 1. If
you have used a different folder structure or a different file
name, then this is the place to specify the appropriate relative
path.
Files
The files stanza states the files that you want to include in your package - your HTML page, your scripts, the SDK
script and your logo. Set addressable to true unless you include other files that don't need to be URL -
addressable.
NOTE
For more information about the extension manifest file, such as its properties and what they do, check out the extension
manifest reference.
npm i -g tfx-cli
NOTE
An extension/integration's version must be incremented on every update.
When updating an existing extension, either update the version in the manifest or pass the --rev-version command line
switch. This will increment the patch version number of your extension and save the new version to your manifest.
After you have your packaged extension in a .vsix file, you're ready to publish your extension to the marketplace.
Create publisher for the extension
All extensions, including those from Microsoft, are identified as being provided by a publisher. If you aren't
already a member of an existing publisher, you'll create one.
1. Sign in to the Visual Studio Marketplace Publishing Portal
2. If you are not already a member of an existing publisher, you'll be prompted to create a publisher. If you're not
prompted to create a publisher, scroll down to the bottom of the page and select Publish Extensions
underneath Related Sites.
Specify an identifier for your publisher, for example: mycompany-myteam
This will be used as the value for the publisher attribute in your extensions' manifest file.
Specify a display name for your publisher, for example: My Team
3. Review the Marketplace Publisher Agreement and click Create
Now your publisher is defined. In a future release, you'll be able to grant permissions to view and manage your
publisher's extensions. This will make it easy (and more secure) for teams and organizations to publish extensions
under a common publisher, but without the need to share a set of credentials across a set of users.
You need to update the vss-extension.json manifest file in the samples to replace the dummy publisher
ID fabrikam with your publisher ID.
Publish and share the extension
After creating a publisher, you can now upload your extension to the marketplace.
1. Find the Upload new extension button, navigate to your packaged .vsix file, and select upload.
You can also upload your extension via the command line by using the tfx extension publish command instead
of tfx extension create to package and publish your extension in one step. You can optionally use --share-with
to share your extension with one or more accounts after publishing. You'll need a personal access token, too.
Step 1: HTML
Copy the file hello-world.html from the previous example, and rename the copy to hello-world2.html . Your
folder will now look like below:
|--- README.md
|--- sdk
|--- node_modules
|--- scripts
|--- VSS.SDK.min.js
|--- img
|--- logo.png
|--- scripts
|--- hello-world.html // html page to be used for your widget
|--- hello-world2.html // renamed copy of hello-world.html
|--- vss-extension.json // extension's manifest
Add a new div element right below the h2 to hold the query information. Update the name of the widget from
HelloWorldWidget to HelloWorldWidget2 in the line where you call VSS.register . This will allow the framework to
uniquely identify the widget within the extension.
<!DOCTYPE html>
<html>
<head>
<script src="sdk/scripts/VSS.SDK.min.js"></script>
<script type="text/javascript">
VSS.init({
explicitNotifyLoaded: true,
usePlatformStyles: true
});
return WidgetHelpers.WidgetStatusHelper.Success();
}
}
});
VSS.notifyLoadSucceeded();
});
</script>
</head>
<body>
<div class="widget">
<h2 class="title"></h2>
<div id="query-info-container"></div>
</div>
</body>
</html>
{
...,
"scopes":[
"vso.work"
]
}
Warning: Adding or changing scopes after an extension is published is currently not supported. If you have already uploaded
your extension, you need remove it from the marketplace. Go to Visual Studio Marketplace Publishing Portal, right-click on your
extension and select "Remove".
VSS.require(["TFS/Dashboards/WidgetHelpers", "TFS/WorkItemTracking/RestClient"],
function (WidgetHelpers, TFS_Wit_WebApi) {
WidgetHelpers.IncludeWidgetStyles();
VSS.register("HelloWorldWidget2", function () {
var projectId = VSS.getWebContext().project.id;
return WidgetHelpers.WidgetStatusHelper.Success();
}, function (error) {
return WidgetHelpers.WidgetStatusHelper.Failure(error.message);
});
}
return {
load: function (widgetSettings) {
// Set your title
var $title = $('h2.title');
$title.text('Hello World');
return getQueryInfo(widgetSettings);
}
}
});
VSS.notifyLoadSucceeded();
});
Notice the use of the Failure method from WidgetStatusHelper . It allows you to indicate to the widget framework
that an error has occurred and take advantage to the standard error experience provided to all widgets.
If you do not have the Feedback query under the Shared Queries folder, then replace
Shared Queries\Feedback in the code with the path of a query that exists in your project.
VSS.require(["TFS/Dashboards/WidgetHelpers", "TFS/WorkItemTracking/RestClient"],
function (WidgetHelpers, TFS_Wit_WebApi) {
WidgetHelpers.IncludeWidgetStyles();
VSS.register("HelloWorldWidget2", function () {
var projectId = VSS.getWebContext().project.id;
return {
load: function (widgetSettings) {
// Set your title
var $title = $('h2.title');
$title.text('Hello World');
return getQueryInfo(widgetSettings);
}
}
});
VSS.notifyLoadSucceeded();
});
</script>
</head>
<body>
<div class="widget">
<h2 class="title"></h2>
<div id="query-info-container"></div>
</div>
</body>
</html>
{
...,
"contributions":[
...,
{
"id": "HelloWorldWidget2",
"type": "ms.vss-dashboards-web.widget",
"targets": [
"ms.vss-dashboards-web.widget-catalog"
],
"properties": {
"name": "Hello World Widget 2 (with API)",
"description": "My second widget",
"previewImageUrl": "img/preview2.png",
"uri": "hello-world2.html",
"supportedSizes": [
{
"rowSpan": 1,
"columnSpan": 2
}
],
"supportedScopes": ["project_team"]
}
}
],
"files": [
{
"path": "hello-world.html", "addressable": true
},
{
"path": "hello-world2.html", "addressable": true
},
{
"path": "sdk/scripts", "addressable": true
},
{
"path": "img", "addressable": true
}
],
"scopes":[
"vso.work"
]
}
Step 1: HTML
Implementations of Widgets and Widget Configurations are a lot alike. Both are implemented in the extension
framework as contributions. Both use the same SDK file, VSS.SDK.min.js . Both are based on HTML as well as
JavaScript and CSS.
Copy the file html-world2.html from the previous example and rename the copy to hello-world3.html . Add
another HTML file called configuration.html . Your folder will now look like the below:
|--- README.md
|--- sdk
|--- node_modules
|--- scripts
|--- VSS.SDK.min.js
|--- img
|--- logo.png
|--- scripts
|--- configuration.html
|--- hello-world.html // html page to be used for your widget
|--- hello-world2.html // renamed copy of hello-world.html
|--- hello-world3.html // renamed copy of hello-world2.html
|--- vss-extension.json // extension's manifest
Add the below HTML in configuration.html . We basically add the mandatory reference to the VSS.SDK.min.js
file and a select element for the dropdown to select a query from a preset list.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="sdk/scripts/VSS.SDK.min.js"></script>
</head>
<body>
<div class="container">
<fieldset>
<label class="label">Query: </label>
<select id="query-path-dropdown" style="margin-top:10px">
<option value="" selected disabled hidden>Please select a query</option>
<option value="Shared Queries/Feedback">Shared Queries/Feedback</option>
<option value="Shared Queries/My Bugs">Shared Queries/My Bugs</option>
<option value="Shared Queries/My Tasks">Shared Queries/My Tasks</option>
</select>
</fieldset>
</div>
</body>
</html>
<script type="text/javascript">
VSS.init({
explicitNotifyLoaded: true,
usePlatformStyles: true
});
return {
load: function (widgetSettings, widgetConfigurationContext) {
var settings = JSON.parse(widgetSettings.customSettings.data);
if (settings && settings.queryPath) {
$queryDropdown.val(settings.queryPath);
}
return WidgetHelpers.WidgetStatusHelper.Success();
},
onSave: function() {
var customSettings = {
data: JSON.stringify({
queryPath: $queryDropdown.val()
})
};
return WidgetHelpers.WidgetConfigurationSave.Valid(customSettings);
}
}
});
VSS.notifyLoadSucceeded();
});
</script>
VSS.init , VSS.require and VSS.register play the same role as they played for the widget as described in Part 1.
The only difference is that for widget configurations, the function that is passed to VSS.register should return an
object that satisfies the IWidgetConfiguration contract.
The load property of the IWidgetConfiguration contract should have a function as its value. This function will
have the set of steps to render the widget configuration. In our case it is simply to update the selected value of the
dropdown element with existing settings if any. It is this function that is called when the framework instantiates
your widget configuration
The onSave property of the IWidgetConfiguration contract should have a function as its value. This is the
function that is called by the framework when user clicks the "Save" button in the configuration pane. If the user
input is ready to save, then serialize it to a string, form the custom settings object and use
WidgetConfigurationSave.Valid() to save the user input..
In this guide we use JSON to serialize the user input into a string. You can choose any other way to serialize the
user input to string. It will be accessible to the widget via the customSettings property of the WidgetSettings
object. The widget will then have to deserialize this which is covered in Step 4.
Step 3: JavaScript - Enable Live Preview
To enable live preview update when the user selects a query from the dropdown, we attach a change event
handler to the button. This handler will notify the framework that the configuration has changed. It will also pass
the customSettings to be used for updating the preview. To notify the framework, the notify method on the
widgetConfigurationContext needs to be called. It takes two parameters, the name of the event, which in this case
is WidgetHelpers.WidgetEvent.ConfigurationChange , and an EventArgs object for the event, created from the
customSettings with the help of WidgetEvent.Args helper method.
$queryDropdown.on("change", function () {
var customSettings = {
data: JSON.stringify({
queryPath: $queryDropdown.val()
})
};
var eventName = WidgetHelpers.WidgetEvent.ConfigurationChange;
var eventArgs = WidgetHelpers.WidgetEvent.Args(customSettings);
widgetConfigurationContext.notify(eventName, eventArgs);
});
You need to notify the framework of configuration change at least once so that the "Save" button can be
enabled.
return {
load: function (widgetSettings, widgetConfigurationContext) {
var settings = JSON.parse(widgetSettings.customSettings.data);
if (settings && settings.queryPath) {
$queryDropdown.val(settings.queryPath);
}
$queryDropdown.on("change", function () {
var customSettings = {data: JSON.stringify({queryPath:
$queryDropdown.val()})};
var eventName = WidgetHelpers.WidgetEvent.ConfigurationChange;
var eventArgs = WidgetHelpers.WidgetEvent.Args(customSettings);
widgetConfigurationContext.notify(eventName, eventArgs);
});
return WidgetHelpers.WidgetStatusHelper.Success();
},
onSave: function() {
var customSettings = {data: JSON.stringify({queryPath:
$queryDropdown.val()})};
return WidgetHelpers.WidgetConfigurationSave.Valid(customSettings);
}
}
});
VSS.notifyLoadSucceeded();
});
</script>
</head>
<body>
<div class="container">
<fieldset>
<label class="label">Query: </label>
<select id="query-path-dropdown" style="margin-top:10px">
<option value="" selected disabled hidden>Please select a query</option>
<option value="Shared Queries/Feedback">Shared Queries/Feedback</option>
<option value="Shared Queries/My Bugs">Shared Queries/My Bugs</option>
<option value="Shared Queries/My Tasks">Shared Queries/My Tasks</option>
</select>
</fieldset>
</div>
</body>
</html>
Open the file hello-world3.html and update the name of the widget from HelloWorldWidget2 to
HelloWorldWidget3 in the line where you call VSS.register . This will allow the framework to uniquely identify the
widget within the extension.
The function mapped to HelloWorldWidget3 via VSS.register currently returns an object that satisfies the
IWidget contract. Since our widget now needs configuration, this function needs to be updated to return an
object that satisfies the IConfigurableWidget contract. To do this, update the return statement to include a
property called reload as below. The value for this property will be a function that calls the getQueryInfo method
one more time. This reload method gets called by the framework every time the user input changes to show the
live preview. This is also called when the configuration is saved.
return {
load: function (widgetSettings) {
// Set your title
var $title = $('h2.title');
$title.text('Hello World');
return getQueryInfo(widgetSettings);
},
reload: function (widgetSettings) {
return getQueryInfo(widgetSettings);
}
}
The hard-coded query path in getQueryInfo should be replaced with the configured query path which can be
extracted from the parameter widgetSettings that is passed to the method. Add the below in the very beginning
of the getQueryInfo method and replace the hard-coded querypath with settings.queryPath .
return WidgetHelpers.WidgetStatusHelper.Success();
}
At this point, your widget is ready to render with the configured settings.
You will notice that both the load and the reload properties have a similar function. This would be the case
for most simple widgets. For complex widgets, there would be certain operations that you would want to run
just once no matter how many times the configuration changes. Or there might be some heavy-weight
operations that need not run more than once. Such operations would be part of the function corresponding
to the load property and not the reload property.
Note that the contribution for widget configuration follows a slightly different model than the widget itself. A
contribution entry for widget configuration has:
The id to identify your contribution. This should be unique within an extension.
The type of contribution. For all widget configurations, this should be
ms.vss-dashboards-web.widget-configuration
The array of targets to which the contribution is contributing. For all widget configurations, this will have a
single entry: ms.vss-dashboards-web.widget-configuration .
The properties that contains a set of properties which includes name, description, and the URI of the HTML
file used for configuration.
To support configuration, the widget contribution needs to be changed as well. The array of targets for the
widget needs to be updated to include the ID for the configuration in the form < publisher >.<
id for the extension >.< id for the configuration contribution > which in this case will be
fabrikam.vsts-extensions-myExtensions.HelloWorldWidget.Configuration
Warning: If the contribution entry for your configurable widget does not target the configuration using the right publisher and
extension name as described above, then configure button will not show up for the widget.
At the end of this part, the manifest file should contains three widgets and one configuration. You can get the
complete manifest from the sample here.
Step 6: Package, Publish and Share
If you have not published your extension yet, then read this to package, publish and share your extension. If you
have already published the extension before this point, you can repackage the extension as described here and
directly update it to the marketplace.
Step 7: Add Widget From the Catalog
Now, go to your team dashboard at http://dev.azure.com/{yourOrganization}/{yourProject}. If this page is already
open, refresh it. Hover on the Edit button in the bottom right, and click on the Add button. This should open the
widget catalog where you will find the widget you just installed. Choose your widget and click the 'Add' button to
add it to your dashboard.
You would see a message asking you to configure the widget.
There are 2 ways to configure widgets. One is to hover on the widget, click on the ellipsis that appears on the top
right corner and then click Configure. The other is to click on the Edit button in the bottom right of the dashboard,
and then click the configure button that appears on the top right corner of the widget. Either will open the
configuration experience on the right side, and a preview of your widget in the center. Go ahead and choose a
query from the dropdown. The live preview will show the updated results. Click on "Save" and your widget will
display the updated results.
Step 8: Configure More (optional)
You can add as many HTML form elements as you need in the configuration.html for additional configuration.
There are two configurable features that are available out of the box: widget name and widget size.
By default, the name that you provide for your widget in the extension manifest is stored as the widget name for
every instance of your widget that ever gets added to a dashboard. You can allow users to configure this, so that
they can add any name they want to their instance of your widget. To allow such configuration, add
isNameConfigurable:true in the properties section for your widget in the extension manifest.
If you provide more than one entry for your widget in the supportedSizes array in the extension manifest, then
users can configure the widget's size as well.
The extension manifest for the third sample in this guide would look like the below if we enable the widget name
and size configuration:
{
...
"contributions": [
... ,
{
"id": "HelloWorldWidget3",
"type": "ms.vss-dashboards-web.widget",
"targets": [
"ms.vss-dashboards-web.widget-catalog", "fabrikam.vsts-extensions-
myExtensions.HelloWorldWidget.Configuration"
],
"properties": {
"name": "Hello World Widget 3 (with config)",
"description": "My third widget",
"previewImageUrl": "img/preview3.png",
"uri": "hello-world3.html",
"isNameConfigurable": true,
"supportedSizes": [
{
"rowSpan": 1,
"columnSpan": 2
},
{
"rowSpan": 2,
"columnSpan": 2
}
],
"supportedScopes": ["project_team"]
}
},
...
}
With the above change, repackage and update your extension. Refresh the dashboard that has this widget (Hello
World Widget 3 (with config)). Open the configuration mode for your widget, you should now be able to see the
option to change the widget name and size.
Go ahead and choose a different size from the drop down. You will see the live preview get resized. Save the
change and the widget on the dashboard will be resized as well.
Warning: If you remove an already supported size, then the widget will fail to load properly. We are working on a fix for a
future release.
You will notice that changing the name of the widget does not result in any visible change in the widget. This is
because our sample widgets do not display the widget name anywhere. Let us modify the sample code to display
the widget name instead of the hard-coded text "Hello World".
To do this, replace the hard-coded text "Hello World" with widgetSettings.name in the line where we set the text of
the h2 element. This will ensure that the widget name gets displayed every time the widget gets loaded on page
refresh. Since we want the live preview to be updated every time the configuration changes, we should add the
same code in the reload part of our code as well. The final return statement in hello-world3.html will be as
follows:
return {
load: function (widgetSettings) {
// Set your title
var $title = $('h2.title');
$title.text(widgetSettings.name);
return getQueryInfo(widgetSettings);
},
reload: function (widgetSettings) {
// Set your title
var $title = $('h2.title');
$title.text(widgetSettings.name);
return getQueryInfo(widgetSettings);
}
}
Repackage and update your extension again. Refresh the dashboard that has this widget. Any changes to the
widget name in the configuration mode will update the widget title now.
Add a chart
1/25/2019 • 4 minutes to read • Edit Online
This page demonstrates how you can add charts to your extensions. Charts can be added to any Azure DevOps
Services extension.
These charts are easy to create, resizable, interactive and consistent with the Azure DevOps Services look and feel.
The following chart types are supported:
1. Line
2. Bar
3. Column
4. Area
5. Stacked bar
6. Stacked column
7. Stacked area
8. Pie
9. Pivot table
10. Histogram
If you're in a hurry and want to get your hands on the code right away, you can download the complete
samples. Once downloaded, go to the charts folder, then follow the packaging and publishing instructions to
publish the sample extension. The extension contains sample chart widgets.
<!DOCTYPE html>
<html>
<head>
<script src="sdk/scripts/VSS.SDK.js"></script>
<script src="scripts/pie-chart.js"></script>
</head>
<body>
<div class="widget">
<h2 class="title">Chart Widget</h2>
<div id="Chart-Container"></div>
</div>
</body>
</html>
Use the npm install command to retrieve the SDK: npm install vss-web-extension-sdk . To learn more about
the SDK, visit the Client SDK GitHub Page.
Ensure that the VSS.SDK.js file is inside the sdk/scripts folder so that the path is home/sdk/scripts/VSS.SDK.js .
Images
Add the following images to an img folder in your project directory so that the path is home/img/logo.png and
home/img/CatalogIcon.png :
1. Extension logo
2. Catalog icon
Extension manifest file
In the home folder of your project, create your extension manifest file. Create a vss-extension.json file with the
following contents:
{
"manifestVersion": 1,
"id": "samples-charts",
"version": "1.0.0",
"name": "Interactive Charts in Azure DevOps Services",
"description": "Samples of interactive charts from the Chart SDK.",
"publisher": "Fabrikam",
"targets": [
{
"id": "Microsoft.VisualStudio.Services"
}
],
"icons": {
"default": "img/logo.png"
},
"demands": ["contribution/ms.vss-dashboards-web.widget-sdk-version-2", "contribution/ms.vss-web.charts-
service"],
"contributions": [
{
"id": "chart",
"type": "ms.vss-dashboards-web.widget",
"targets": [
"ms.vss-dashboards-web.widget-catalog"
],
"properties": {
"name": "Sample Chart",
"description": "A simple chart widget with no configuration and hard-coded data.",
"catalogIconUrl": "img/CatalogIcon.png",
"uri": "chart.html",
"supportedSizes": [
{
"rowSpan": 2,
"columnSpan": 2
}
],
"supportedScopes": [
"project_team"
]
}
}
],
"files": [
{
"path": "chart.html",
"addressable": true
},
{
"path": "sdk/scripts/VSS.SDK.js",
"addressable": true
},
{
"path": "img",
"addressable": true
},
{
"path": "scripts",
"addressable": true
}
],
"scopes": [
]
}
Before uploading this extension, you'll need to update the publisher to yours.
Put the following code snippets into a chart.js file in a scripts folder, so that the path is home/scripts/chart.js .
Then follow the packaging and publishing instructions to publish your extension.
Charts
Pie chart
This sample renders a pie chart. The data and labelValues have been hardcoded here, and would need to be
changed to the data you want to visualize.
VSS.init({
explicitNotifyLoaded: true,
usePlatformStyles: true
});
VSS.require([
"TFS/Dashboards/WidgetHelpers",
"Charts/Services"
],
function (WidgetHelpers, Services) {
WidgetHelpers.IncludeWidgetStyles();
VSS.register("PieChart", function () {
return {
load:function() {
return Services.ChartsService.getService().then(function(chartService){
var $container = $('#Chart-Container');
var chartOptions = {
"hostOptions": {
"height": "290",
"width": "300"
},
"chartType": "pie",
"series": [{
"data": [11, 4, 3, 1]
}],
"xAxis": {
"labelValues": ["Design", "On Deck", "Completed", "Development"]
},
"specializedOptions": {
"showLabels": "true",
"size": 200
}
};
chartService.createChart($container, chartOptions);
return WidgetHelpers.WidgetStatusHelper.Success();
});
}
}
});
VSS.notifyLoadSucceeded();
});
Here, the chart's size is defined in hostOptions . The series property is an array and contains a single object with
data in it. The xAxis object contains labelValues which correspond to the data . For pie charts, we also have
some special options that are defined by the specializedOptions property. Here, we're explicitly enabling data
labels for the pie chart. We also need to set the size of the pie chart by specifying its outer diameter.
Rendering the chart requires a container to render it in, the chart options, and a call to the Chart Service to get
initialize the chart and render it.
Stacked area chart
This sample renders a stacked area chart.This chart type is ideal for comparing a relationship of parts to a whole
and highlighting general trends across categories. It is commonly used to compare trends over time. This sample
also specifies a custom color for one of the series being rendered.
VSS.init({
explicitNotifyLoaded: true,
usePlatformStyles: true
});
VSS.require([
"TFS/Dashboards/WidgetHelpers",
"Charts/Services"
],
function (WidgetHelpers, Services) {
WidgetHelpers.IncludeWidgetStyles();
VSS.register("StackedAreaChart", function () {
return {
load:function() {
return Services.ChartsService.getService().then(function(chartService){
var $container = $('#Chart-Container');
var chartOptions = {
"hostOptions": {
"height": "290",
"width": "300"
},
"chartType": "stackedArea",
"series": [
{
"name": "Completed",
"data": [1,3,4,3,6,1,9,0,8,11]
},
{
"name": "Development",
"data": [1,1,0,3,0,2,8,9,2,8]
},
{
"name": "Design",
"data": [0,0,0,6,1,1,9,9,1,9],
"color": "#207752"
},
{
"name": "On Deck",
"data": [1,2,4,5,4,2,1,7,0,6]
}
],
"xAxis": {
"labelFormatMode": "dateTime_DayInMonth",
"labelValues": [
"1/1/2016",
"1/2/2016",
"1/3/2016",
"1/4/2016",
"1/5/2016",
"1/6/2016",
"1/7/2016",
"1/8/2016",
"1/9/2016",
"1/10/2016"
]
}
}
chartService.createChart($container, chartOptions);
return WidgetHelpers.WidgetStatusHelper.Success();
});
}
}
});
VSS.notifyLoadSucceeded();
});
Pivot table
This sample renders a Pivot Table. This chart type helps arrange and summarize complex data in a tabular form.
VSS.init({
explicitNotifyLoaded: true,
usePlatformStyles: true
});
VSS.require([
"TFS/Dashboards/WidgetHelpers",
"Charts/Services"
],
function (WidgetHelpers, Services) {
WidgetHelpers.IncludeWidgetStyles();
VSS.register("PivotTable", function () {
return {
load:function() {
return Services.ChartsService.getService().then(function(chartService){
var $container = $('#Chart-Container');
var chartOptions = {
"hostOptions": {
"height": "290",
"width": "300"
},
"chartType": "table",
"xAxis": {
"labelValues": ["Design","In Progress","Resolved","Total"]
},
"yAxis": {
"labelValues": ["P1","P2","P3","Total"]
},
"series": [
{
"name": "Design",
"data": [
[0,0,1],
[0,1,2],
[0,2,3]
]
},
{
"name": "In Progress",
"data": [
[1,0,4],
[1,1,5],
[1,2,6]
]
},
{
"name": "Resolved",
"data": [
[2,0,7],
[2,1,8],
[2,2,9]
]
},
{
"name": "Total",
"data": [
[3,0,12],
[3,1,15],
[3,2,18],
[0,3,6],
[1,3,15],
[2,3,24],
[3,3,10]
],
"color": "rgba(255,255,255,0)"
"color": "rgba(255,255,255,0)"
}
]
}
chartService.createChart($container, chartOptions);
return WidgetHelpers.WidgetStatusHelper.Success();
});
}
}
});
VSS.notifyLoadSucceeded();
});
Create an Analytics widget for Azure DevOps
1/31/2019 • 2 minutes to read • Edit Online
NOTE
Feature availability: The Analytics Marketplace extension is available for Azure DevOps and Azure DevOps Server 2019 and
later. Installing it provides several advanced widgets, Power BI integration, and access to the OData feed.
If you are looking for information about the Azure Analysis Services, see Azure Analysis Services.
Prerequisites
This example provides a ready-made widget, covering basics from topics in Dashboards, Charting and Analytics.
The following documents provide more grounding on details demonstrated in this example:
1. Create an Azure DevOps Widget Extension, reference the Widget extensions sample
2. Render an Azure DevOps Chart Control, reference Add a Chart
3. Query OData from Analytics
Next steps
To avoid excess complexity in the sample, we omitted certain technologies and practices, which a production
widget should certainly include. The ui-fabric-react sample on github highlights a build process which exercises
these details.
1. Javascript bundling and content minification - The set of small, loose script files in the sample can load much
more quickly when consolidate into a single file, and minified.
2. Fabric UI Controls - Fabric UI controls provide a rich set of configuration UI components for React.
Widget catalog
1/31/2019 • 14 minutes to read • Edit Online
Azure DevOps Services | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015
NOTE
Widgets and multiple dashboards are not supported features in TFS 2013, instead, you can pin items to a team
homepage. Consider upgrading to the latest TFS version to get access to the widget catalog and multiple team
dashboards.
Widgets display information and charts on dashboards. Many of them are configurable and display
information available from one or more data stores or charts maintained within the system.
To add a widget to a dashboard or copy a widget from one dashboard to another, see Add a widget to a
dashboard.
The following widgets are available to you. Team-scoped widgets display data based on the selected team
context. User-focused widgets display information based on the logged-in user.
The following widgets are available to you. Team-scoped widgets display data based on the selected team
context. User-focused widgets display information based on the logged-in user.
ANALYTICS TEAM-SCOPED OTHER
The following widgets are available to you. Team-scoped widgets display data based on the selected team
context. User-focused widgets display information based on the logged-in user.
- New Work item - Assigned to me - Chart for build history - Code tile
- Other links - Pull request - Chart for test plans - Chart for work items
- Pull request - Deployment status - Embedded web page
- Sprint burndown - Requirements quality - Query results
- Sprint capacity - Test results trend - Query tile
- Sprint overview - Markdown
- Team members - Visual Studio Shortcuts
- Team room - Welcome
- Work links
The following widgets are available to you. Team-scoped widgets display data based on the selected team
context. User-focused widgets display information based on the logged-in user.
- New Work item - Assigned to me - Chart for build history - Code tile
- Other links - Pull request - Chart for work items
- Pull request - Query results
- Sprint burndown - Query tile
- Sprint capacity - Markdown
- Sprint overview - Visual Studio Shortcuts
- Team members - Welcome
- Team room
- Work links
NOTE
Widgets specific to a service are disabled if the service they depend on has been disabled. For example, if Boards is
disabled, work tracking Analytics widgets are disabled and won't appear in the widget catalog. To re-enable a service, see
Turn an Azure DevOps service on or off.
Adds a tile to display a progress or trend chart that builds off a shared work item query.
From the configuration dialog, select a shared query and specify the chart type and values.
Requires TFS 2015.2 or later version. For TFS 2015.1 and earlier versions, see Add charts to a dashboard to
add shared query charts to a dashboard.
Enables you to add work items from the dashboard. You use work items to plan and track work.
Work items that you add using this widget are automatically scoped to the team's default area path and the
team's current sprint or default iteration. To change team defaults, see About teams and Agile tools.
Requires TFS 2015.1 or later version.
Other links
Query results
Adds a configurable tile that lists the results of a shared query. From the configuration dialog, select either a
team favorite or shared query.
To create a shared query, see Use the query editor to list and manage queries.
Query tile
Adds a configurable tile to display the summary of a shared query results. From the configuration dialog,
select either a team favorite or shared query. You can optionally specify rules to change the query tile color
based on the number of work items returned by the query. To create a shared query, see Use the query editor
to list and manage queries.
Sprint burndown
Adds the team's burndown chart for the current sprint to the dashboard. This chart always displays data for the
current sprint. Teams use the burndown chart to mitigate risk and check for scope creep throughout the sprint
cycle.
Sprint capacity
Inserts the team's capacity bar chart for the current sprint. To plan and monitor their sprint resources, team set
capacity and update Remaining Work throughout the sprint. See Set capacity.
Sprint overview
Inserts a configurable overview of sprint progress. You can choose between a count of story points or number
of work items. Teams plan their sprints by defining sprints and assigning backlog items to an iteration.
Inserts a visual overview of sprint progress indicating the number of backlog items in progress, completed, or
not started. Teams plan their sprints by defining sprints and assign backlog items to an iteration.
Work links
Provides quick access to open the following Agile tools and team resources:
Backlog
Kanban Board
Task board
Queries
Analytics widgets
To add Analytics widgets to your dashboard, you first need to install the Analytics Marketplace extension. You
can then add the widget(s) to your dashboard. You must be the organization owner or a member of the Project
Collection Administrator group to add extensions.
For an overview of each of these widgets, see Widgets based on the Analytics Service.
Burndown chart
Adds a tile that displays a burndown chart which you can configure to span one or more teams, work item
types, and time period. With it, you can create a release burndown, sprint burndown, or any burndown that
spans teams and sprints. To learn more, see Configure a Burndown or Burnup widget.
Burnup chart
Adds a tile that displays a burnup chart which you can configure to span one or more teams, work item types,
and time period. With it, you can create a release burnup, sprint burnup, or any burnup that spans teams and
sprints. To learn more, see Configure a Burndown or Burnup widget.
Displays the cumulative flow of backlog items based on the time frame, team, backlog level and swimlane you
select.
From the configuration dialog, specify the team, backlog level, and other parameters you want.
Hover over each color within the chart to see the count of items for a particular Kanban column.
Cycle time
Displays the cycle time of work items closed in a specified timeframe for a single team and backlog level. The
cycle time of a work item is defined as the time taken to close a work item after work on it has started.
Each marker on the chart corresponds to one or more work items with a particular cycle time. The lower the
cycle time, the faster work is progressing through your development pipeline.
Lead time
Displays the lead time of work items closed in a specified timeframe for a single team and backlog level. The
lead time of a work item is defined as the time taken to close a work item after it was created.
Each marker on the chart corresponds to one or more work items with a particular lead time. The lower the
lead time, the faster work is being delivered to the customer.
Test Results Trend (Advanced)
NOTE
Feature availability: The Test Results Trend (Advanced) widget is only available for an Azure DevOps Services
organization that has the Analytics Marketplace extension installed.
The Test Results Trend (Advanced) widget provides near real-time visibility into test data for multiple builds
and releases. The widget shows a trend of your test results for selected pipelines. You can use it to track the
daily count of test, pass rate, and test duration. Tracking test quality over time and improving test collateral is
key to maintaining a healthy DevOps pipeline.
The widget supports tracking advanced metrics for one or more build pipelines or release pipelines. The
widget also allows filtering of test results by outcome, stacking metrics, and more.
To learn more, see Configure the Test Results Trend (Advanced) widget.
Velocity
The velocity widget tracks a team's capacity to deliver work sprint after sprint. You configure the widget by
selecting a team, a work item type, an aggregation field, and the number of sprints. The widget takes advantage
of the Analytics service. You can track the velocity for a single team, not multiple teams.
For additional guidance, see Velocity.
Adds a configurable tile to display the summary of a code folder or Git repository. To configure, simply choose
the added tile, select a repository, select a branch (Git only) and select a path. The code tile supports both TFVC
and Git repositories.
Requires TFS 2015.1 or later version.
Pull request
Adds a configurable tile to display active pull requests requested by the team, or assigned to or requested by
the person logged in. Select the Git repository for the pull requests of interest.
You need to add a widget for each Git repository of interest. To learn more about pull requests, see Review
code with pull requests.
Requires TFS 2015.2 or later version.
Adds a tile to display a histogram of all builds run for the configured build pipeline. From the configuration
dialog, select the build you want to monitor. Hover over a bar to learn how long the build took to complete.
Choose the bar to open the summary for that specific build. Bar color indicates: green-completed, red-failed,
and yellow -completed without tests.
Requires TFS 2015.2 or later version. For TFS 2015.1 and earlier versions, see Add charts to a dashboard to
add a build summary chart to a dashboard.
Deployment status
Configurable widget that shows a consolidated view of the deployment status and test pass rate across
multiple environments for a recent set of builds. You configure the widget by specifying a build pipeline,
branch, and linked release pipelines.
In order view the test summary across multiple environments in a release, the widget provides a matrix view of
each environment and corresponding test pass rate. You can choose any cell to see a more detailed view for the
selected environment.
Requires TFS 2017.1 or later version.
Requirements quality
Configurable widget that you can use to track quality continuously from a build or release pipeline. The widget
shows the mapping between a requirement and latest test results executed against that requirement. It
provides insights into requirements traceability e.g. requirements not meeting the quality, requirements not
tested etc. To learn more about setting up traceability see Requirements traceability
Adds a configurable widget that lets you track the progress of test case authoring or status of test execution for
tests in a test plan. Get started by selecting a test plan and a test suite. Then select test case chart for test
authoring progress or test results for test execution progress. Finally, select the chart type and the pivots.
To learn more, see Track your test results.
Requires TFS 2017.2 or later version.
Adds a configurable tile that displays the trend of test results, such as passed or failed tests, for the selected
build or release pipeline. The widget helps you visualize the test trends over a period of time, thereby surfacing
patterns about test failures, test duration etc.
From the configuration dialog, select the build or release whose test results you'd like to monitor. There are
multiple chart options to choose from (Line, Column & Stacked Column) based on your preference. Optionally
you can map the trend of test duration on the existing chart by adding a secondary line chart.
The widget provides the basic trend of the test results. To get deeper insights and higher configurability view
Test Analytics
Adds a configurable tile to display the contents of a web page. Only webpages that allow iframe embedding
are supported.
Markdown
Adds a configurable tile to display any type of information, guidance, or links that you want. You can also
configure the widget to point to a file stored in your repository. From the configuration dialog, add the
information you want to share with your team. To learn more, see Add Markdown to a dashboard.
Adds a configurable tile to display any type of information, guidance, or links that you want. From the
configuration dialog, add the information you want to share with your team. To learn more, see Add Markdown
to a dashboard.
Requires TFS 2015.1 or later version. For TFS 2015.2 or later versions, you can configure the widget to point
to a file stored in your repository.
Team members
Shows team member profiles and, on-hover, their user alias. For team admins, supports access to the quick
dialog to add or remove team members.
NOTE
This widget is a convenient way to add team members to specific teams within projects. If you remove it, you can still
add members to your team from the team administration page.
Requires TFS 2015.1 or later version.
Team room
Provides status and access to team rooms. Available for TFS 2015.1 through TFS 2017.2 versions.
Team rooms support increased team productivity by providing a space to discuss work in progress, ask
questions, share status, and clarify issues that arise. Team administrators can create additional team rooms.
NOTE
Feature availability: Team Rooms have been deprecated as described in Deprecation of Team Rooms blog post. Several
good solutions are available that integrate well with TFS that support notifications and chat, such as Microsoft Teams
and Slack.
Provides links to open or download Visual Studio. The Visual Studio IDE client comes with the Team Explorer
plug-in which provides quick access to several features (some of which aren't available through the web
portal).
Requires TFS 2015.1 or later version.
Welcome
Provides links to the Boards/Boards (Work/Boards), Repos (Code), and Pipelines (Build or Build-
Release) pages and reference documentation on how to add charts.
Requires TFS 2015.1 or later version.
Related notes
These represent the basic widgets. Look forward to more widgets becoming available in the coming months.
Marketplace widgets
You may find additional widgets of interest from the Marketplace.
If your organization owner or project collection administrator disables a marketplace widget, you'll see the
following image:
To regain access to it, request your admin to reinstate or reinstall the widget.
Extensibility
Using the REST API service, you can create a dashboard widget. To learn more about the REST APIs for
dashboards and widgets, see Dashboards (API).
Syntax guidance for Markdown usage
1/31/2019 • 16 minutes to read • Edit Online
Azure DevOps Services | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015
Here you can find some basic Markdown syntax guidance and specific guidance for using Markdown in Azure
DevOps features. You can use both common Markdown conventions and GitHub-flavored extensions.
Having the right guidance at the right time is critical to success. Use Markdown to add rich formatting, tables, and
images to your project pages, README files, dashboards, and pull request comments.
You can provide guidance in the following areas using Markdown:
Project wiki
Publish code as wiki
Markdown widget added to a dashboard
Project page or Welcome pages
Repository README files
Pull request comments
Definition of Done (Kanban board)
Project wiki
Markdown widget added to a dashboard
Project page or Welcome pages
Repository README files
Pull request comments
Definition of Done (Kanban board)
NOTE
Rich Markdown rendering in code repositories is supported for TFS 2018.2 and later versions. You can create rich
README.md files in the code repositories. TheMarkdown rendering of the MD files in code repositories supports HTML tags,
block quotes, emojis, image resizing, and mathematical formulas. There is parity inMarkdown rendering in Wiki and MD files
in code.
NOTE
With TFS 2017.1, welcome pages, theMarkdown widget on team dashboards, and the Definition of Done on Kanban boards
no longer supports file links in theirMarkdown. As a workaround, you can include your file link as text in the Markdown.
# This is a H1 header
## This is a H2 header
### This is a H3 header
#### This is a H4 header
##### This is a H5 header
Result:
Result: Add lines between your text with the Enter key. This spaces your text better and makes it easier to read.
Example - Markdown file or widget:
Add two spaces prior to the end of the line.(space, space)
This adds space in between paragraphs.
Result:
Add two spaces prior to the end of the line.
Space is added in between paragraphs.
Block quotes
Quote previous comments or text to set the context for your comment or text.
Quote single lines of text with > before the text. Use many > characters to nest quoted text. Quote blocks of
lines of text by using the same level of > across many lines.
Example:
Result:
Horizontal rules
To add a horizontal rule, add a line that's a series of dashes --- . The line above the line containing the --- must
be blank.
Example:
above
----
below
Result:
above
below
Emphasis (bold, italics, strikethrough)
You can emphasize text by applying bold, italics, or strikethrough to characters:
To apply italics: surround the text with an asterisk * or underscore _
To apply bold: surround the text with double asterisks ** .
To apply strikethrough: surround the text with double tilde characters ~~ .
NOTE
There is noMarkdown syntax that supports underlining text. Within a wiki page in TFS 2018.2 and later versions, you can
use the HTML <u> tag to generate underlined text. For example, <u>underlined text</u> yields underlined text`.
NOTE
There is noMarkdown syntax that supports underlining text.
Example:
Use _emphasis_ in comments to express **strong** opinions and point out ~~corrections~~
**_Bold, italicized text_**
**~~Bold, strike-through text~~**
Result:
Use emphasis in comments to express strong opinions and point out corrections Bold, italicized text Bold,
strike-through text
Code highlighting
Highlight suggested code segments using code highlight blocks. To indicate a span of code, wrap it with three
backtick quotes ( ``` ) on a new line at both the start and end of the block. To indicate code inline, wrap it with one
backtick quote ( ` ).
Example:
```
$ sudo npm install vsoagent-installer -g
```
Result:
Example:
To install the Microsoft Cross Platform Build & Release Agent, run the following: `$ sudo npm
install vsoagent-installer -g`.
Result: To install the Microsoft Cross Platform Build & Release Agent run the following command:
$ sudo npm install vsoagent-installer .
Within a Markdown file, text with four spaces at the beginning of the line automatically converts to a code block.
Set a language identifier for the code block to enable syntax highlighting for any of the supported languages.
``` language
code
```
Additional examples:
``` js
const count = records.length;
```
``` csharp
Console.WriteLine("Hello, World!");
```
Console.WriteLine("Hello, World!");
Tables
Organize structured data with tables. Tables are especially useful for describing function parameters, object
methods, and other data that has a clear name to description mapping. You can format tables in pull requests, wiki,
and Markdown files such as README files and Markdown widgets.
Place each table row on its own line
Separate table cells using the pipe character |
The first two lines of a table set the column headers and the alignment of elements in the table
Use colons ( : ) when dividing the header and body of tables to specify column alignment (left, center, right)
To start a new line, use the HTML break tag ( <br/> ) (Works within a Wiki but not elsewhere)
Make sure to end each row with a CR or LF.
A blank space is required before and after work item or pull request (PR ) mentions inside a table cell.
Example:
Result:
HEADING 1 HEADING 2 HEADING 3
Lists
Organize related items with lists. You can add ordered lists with numbers, or unordered lists with just bullets.
Ordered lists start with a number followed by a period for each list item. Unordered lists start with a - . Begin
each list item on a new line. In a Markdown file or widget, enter two spaces prior to the line break to begin a new
paragraph, or enter two line breaks consecutively to begin a new paragraph.
Ordered or numbered lists
Example:
1. First item.
2. Second item.
3. Third item.
Result:
1. First item.
2. Second item.
3. Third item.
Bullet lists
Example:
- Item 1
- Item 2
- Item 3
Result:
Item 1
Item 2
Item 3
Nested lists
Example:
1. First item.
- Item 1
- Item 2
- Item 3
1. Second item.
- Nested item 1
- Nested item 2
- Nested item 3
Result:
1. First item.
Item 1
Item 2
Item 3
2. Second item.
Nested item 1
Nested item 2
Nested item 3
Links
In pull request comments and wikis, HTTP and HTTPS URLs are automatically formatted as links. You can link to
work items by entering the # key and a work item ID, and then choosing the work item from the list.
Avoid auto suggestions for work items by prefixing # with a backslash ( \ ). This can be useful if you want to use #
for color hex codes.
In Markdown files and widgets, you can set text hyperlinks for your URL using the standard Markdown link
syntax:
When linking to another Markdown page in the same Git or TFVC repository, the link target can be a relative path
or an absolute path in the repository.
Supported links for Welcome pages:
Relative path: [text to display](./target.md)
Absolute path in Git: [text to display](/folder/target.md)
Absolute path in TFVC: [text to display]($/project/folder/target.md)
URL: [text to display](http://address.com)
NOTE
Links to documents on file shares using file:// aren't supported on TFS 2017.1 and later versions. This restriction has
been implemented for security purposes.
For information on how to specify relative links from a Welcome page or Markdown widget, see Source control relative links.
Example:
Result:
C# language reference
Link to work items from a Wiki page
Enter the pound sign ( # ), and then enter a work item ID.
NOTE
This feature is available with TFS 2018.2 and later versions.
/BuildTemplates/AzureContinuousDeploy.11.xaml /DefaultCollection/Fabrikam
Fiber/_versionControl#path=$/Tfvc
Welcome/BuildTemplates/AzureContinuousDeploy.11.xaml
./page-2.md /DefaultCollection/Fabrikam
Fiber/_versionControl#path=$/Tfvc Welcome/page-2.md
Anchor links
Within Markdown files, anchor IDs are assigned to all headings when rendered as HTML. The ID is the heading
text, with the spaces replaced by dashes (-) and all lower case. In general, the following conventions:
Punctuation marks and leading white spaces within a file name are ignored
Upper case letters are converted to lower
Spaces between letters are converted to dashes (-).
Example:
Result:
The syntax for an anchor link to a section...
The ID is all lower case, and the link is case sensitive, so be sure to use lower case, even though the heading itself
uses upper case.
You can also reference headings within another Markdown file:
[text to display](./target.md#heading-id)
Images
To highlight issues or make things more interesting, you can add images and animated GIFs to the following in
your pull requests:
Comments
Markdown files
Wiki pages
Use the following syntax to add an image:
![Text](URL)
The text in the brackets describes the image being linked and the URL points to the image location.
Example:
Result:
The path to the image file can be a relative path or the absolute path in Git or TFVC, just like the path to another
Markdown file in a link.
Relative path:
![Image alt text](./image.png)
Absolute path in Git:
![Image alt text](/_img/markdown-guidance/image.png)
Absolute path in TFVC:
![Image alt text]($/project/folder/_img/markdown-guidance/image.png)
Resize image:
![Image alt text]($/project/folder/_img/markdown-guidance/image.png =WIDTHxHEIGHT)
NOTE
The syntax to support image resizing is only supported in pull requests and in the Wiki.
- [ ] A
- [ ] B
- [ ] C
- [x] A
- [x] B
- [x] C
Result:
NOTE
A checklist within a table cell isn't supported.
Emoji
In pull request comments and wiki pages, you can use emojis to add character and react to comments in the
request. Enter what you're feeling surrounded by : characters to get a matching emoji in your text. The full set of
emojis are supported.
In pull request comments, you can use emojis to add characters and react to comments in the request. Enter what
you're feeling surrounded by : characters to get a matching emoji in your text. The full set of emojis are
supported.
Example:
:smile:
:angry:
Result:
Result:
:smile: :) :angry:
To insert one of the following characters, prefix with Some examples on inserting special characters
a backslash: Enter \\ to get \
\ backslash Enter \_ to get _
` backtick
Enter \# to get #
_ underscore
{} curly braces
Enter \( to get (
[] square brackets Enter \. to get .
() parentheses
Enter \! to get !
# hash mark
+ plus sign
- minus sign (hyphen)
. dot
! exclamation mark
Attachments
In pull request comments and wiki pages, you can attach files to illustrate your point or to give more detailed
reasoning behind your suggestions. To attach a file, drag and drop it into the comment field or wiki page edit
experience. You can also select the paper-clip icon in the upper right of the comment box or the format pane in
wiki page.
In pull request comments, you can attach files to illustrate your point or to give more detailed reasoning behind
your suggestions. To attach a file, drag and drop it into the comment field. You can also select the paper-clip icon
in the upper right of the comment box.
NOTE
Attachments in pull requests is available with TFS 2017.1 and later versions.
If you have an image in your clipboard, you can paste it from the clipboard into the comment box or wiki page and
it renders directly into your comment or wiki page.
Attaching non-image files creates a link to the file in your comment. Update the description text between the
brackets to change the text displayed in the link. Attached image files render directly into your comment or wiki
pages. After you save or update a comment or wiki page with an attachment, you can see the attached image(s)
and can select links to download attached files.
Attachments support the following file formats.
Images PNG (.png), GIF (.gif), JPEG (both .jpeg and .jpg), Icons (.ico)
NOTE
Not all file formats are supported within pull requests, such as Microsoft Office Message (.msg) files.
For example:
Result:
Result:
This text needs to strikethrough since it is redundant!
This text is teletype text.
Colored text
This text is center-aligned.
This text contains superscript text.
This text contains subscript text.
The project status is GREEN even though the bug count / developer may be in red. - Capability of span
Disclaimer: Wiki also supports showing small text
Bigger text
NOTE
This feature is supported within Wiki pages and pull requests for TFS 2018.2 or later versions.
$
\alpha, \beta, \gamma, \delta, \epsilon, \zeta, \eta, \theta, \kappa, \lambda, \mu, \nu, \omicron, \pi, \rho,
\sigma, \tau, \upsilon, \phi, ...
$
$\Gamma, \Delta, \Theta, \Lambda, \Xi, \Pi, \Sigma, \Upsilon, \Phi, \Psi, \Omega$
Result:
$$
A_{triangle}=\frac{1}{2}({b}\cdot{h})
$$
Result:
$$
\int_0^\infty \mathrm{e}^{-x}\,\mathrm{d}x
$$
Result:
The [[_TOC_]] can be placed anywhere in the page to render the table of contents. Only Markdown headings are
considered for TOC (HTML heading tags aren't).
All HTML and Markdown tags are stripped from the headings while adding it inside the TOC block. For example:
Adding bold and italics to a heading text renders the TOC as follows.
::: video
<iframe width="560" height="315" src="https://www.youtube.com/embed/OtqFyBA6Dbk" frameborder="0"
allow="autoplay; encrypted-media" allowfullscreen></iframe>
:::
The iframe is the embed iframe block of the YouTube or Microsoft Streams video.
Result:
https://www.youtube.com/embed/OtqFyBA6Dbk
(The ending ":::" is required to prevent a break in the page)
YAML tags
Any file that contains a YAML block in a Wiki is processed by a table with one head and one row. The YAML block
must be the first thing in the file and must take the form of valid YAML set between triple-dashed lines. It
supports all basic datatypes, lists, and objects as values. The syntax is supported in wiki, code file preview.
Basic example:
---
tag: post
title: Hello world
---
---
tags:
- post
- code
- web
title: Hello world
---
Alternatively, you can also use the toolbar icon and the query selector to embed the query results in a wiki page.
Related articles
Project page or Welcome pages
README files
Pull requests
Markdown widget
Dashboards
Widget catalog
Wiki
Default permissions and access for charts and
dashboards
1/31/2019 • 2 minutes to read • Edit Online
Azure DevOps Services | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013
Team members and members of the of the Contributors group for a project can view charts and dashboards. The
most common built-in groups include Readers, Contributors, and Project Administrators. For a simplified view of
all default permissions assigned to built-in groups, see Default permissions and access.
Stakeholders have limited access to view charts and dashboards. To learn more, see About access levels.
For an overview of dashboard and chart features, see Dashboards, charts, & widgets.
::: moniker range="azure-devops"
Notes:
1. Public project Stakeholders have full access to all features.
::: moniker-end �
::: moniker range="<= azure-devops-2019"
::: moniker-end �
Related notes
Work across projects
Add a team administrator
Reporting roadmap for Azure DevOps and Azure
DevOps Server
1/31/2019 • 2 minutes to read • Edit Online
Roadmap timeline
Check out the Features Timeline for the roadmap of reporting features.
Analytics
1/31/2019 • 2 minutes to read • Edit Online
5-Minute Quickstart
Add an Analytics widget to a dashboard
Videos
https://channel9.msdn.com/Events/Connect/2017/T251/player
https://www.youtube.com/embed/VXdgjRdtBQI
Step-by-Step Tutorials
Configure a Cumulative Flow chart
Configure a Lead Time or Cycle Time widget
Configure or view Velocity chart
Create an Analytics view
Manage Analytics views
Concepts
Data available in the Analytics Service
Analytics widgets
What are Analytics views
Default Analytics views
Performance and latency
How-to Guides
Set permissions for the Analytics Service
Manage Analytics views
Connect using Excel
Troubleshooting
Resolve errors associated with an Analytics view
Reference
Analytics OData v4 endpoint
API versioning
Resources
Dashboards
Connect to Azure DevOps using Power BI
Connect to Azure DevOps using Excel
Power BI integration
Extend Analytics with OData