Project Timeline (Marine Theme)
Project Timeline (Marine Theme)
Dashboards
Overview
Dashboards & widgets
Quickstarts
Add & manage 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
11/19/2018 • 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 and manage dashboards
Add an Analytics widget to a dashboard
Add charts and widgets to a dashboard
Add Markdown to a dashboard
Add and manage 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
11/19/2018 • 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 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 a widget to a team dashboard, you must 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 a widget to a team dashboard, you must be added to the team administrator role for the team.
Connect to the web portal for your project
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 window and choose Overview>Dashboards.
If you need to switch to a different project, choose the Azure DevOps logo to browse all projects.
New navigation isn't supported for TFS 2018 and earlier versions. Choose the Previous navigation tab for
guidance.
2. The dashboard directory page shows you your last visited dashboard, your favorited dashboards, all
dashboards of teams that you belong to, and lists all dashboards defined for the project in alphabetical
order. Choose the filter icon to filter the list by keyword or team.
3. To favorite a dashboard, hover over the dashboard and choose the .
Favoriting a dashboard will cause it to appear within your Favorites page, and appear towards the top in
the Dashboards selector.
1. Select the team whose dashboards you want to view. To switch your team focus, see Switch project, repo or
team.
2. From Dashboards, choose the name of the dashboard to view it.
For example, here we choose to view the Work in Progress dashboard.
1. From Dashboards, open the selector and choose the New Dashboard option.
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 All dashboards page, open the actions menu for the dashboard, and
choose the Delete 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.
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
11/19/2018 • 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 widets 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 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 a widget to a team dashboard, you must 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 a widget to a team dashboard, you must 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
Open a web browser and choose Overview>Dashboards.
If you need to switch to a different project, choose the Azure DevOps logo to browse all projects.
New navigation isn't supported for TFS 2018 and earlier versions. Choose the Previous navigation tab for
guidance.
2. The dashboard directory page shows you your last visited dashboard, your favorited dashboards, all
dashboards of teams that you belong to, and lists all dashboards defined for the project in alphabetical
order. Choose the filter icon to filter the list by keyword or team.
1. Select the team whose dashboards you want to view. To switch your team focus, see Switch project or team
focus.
2. Choose Dashboards.
3. Choose the name of the dashboard to modify it.
For example, here we choose to view the Work in Progress dashboard.
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, seeting 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.
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.
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.
When you're finished with your changes, choose to exit dashboard editing.
To regain access to it, request your admin to reinstate or reinstall the widget.
Add an Analytics widget to a dashboard
11/19/2018 • 3 minutes to read • Edit Online
Prerequisites
You must have a project defined for an Azure DevOps organization. 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.
5. Choose the widget, then Add to add it to the dashboard. Or, you can drag-and-drop it onto the dashboard.
Learn more on adding widgets to dashboard
Congratulations! A new Velocity widget has been added to your dashboard.
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.
Here, the Velocity widget shows this team has a history of closing stories late. It also shows a discrepency between
planned and completed work in the past 4 sprints. The team can drill into the data to determine the root causes.
After implementing new practices, the team can use the Velocity widget to track their effectiveness.
Learn more about the Velocity widget in Configure and view Velocity charts.
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 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 a widget to a team dashboard, you must 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 a widget to a team dashboard, you must be added to the team administrator role for the team.
Connect to the web portal for your project
To add the markdown widget to a dashboard, you connect to your project using a supported web browser.
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 window and choose Overview>Dashboards.
If you need to switch to a different project, choose the Azure DevOps logo to browse all projects.
New navigation isn't supported for TFS 2018 and earlier versions. Choose the Previous navigation tab for
guidance.
Add the markdown widget to a dashboard
If you need to add a dashboard, see Add and manage dashboards.
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.
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
11/19/2018 • 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 critiera, 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.
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 iteration selection box support search, so you can simply type a partial name of an iteration and it will
find the closest match.
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 restuls, 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 caluclated 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 months'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 months's start date. This is also true when plotting by weekly itervals.
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 sprints for the project
Select sprints for a team
Add a custom field to a work item type
Industry resources
Managing Myopia with Release Burndowns
Configure a cumulative flow chart
11/19/2018 • 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
Previous 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.
New navigation isn't supported for TFS 2018 and earlier versions. Choose the Previous navigation tab for
guidance.
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.
Configure the built-in cumulative flow chart
Each team can set their preferences for the built-in cumulative flow charts.
For the CFD chart to reflect useful information, you'll want to update the status of work items to reflect progress
as it occurs. The quickest way to make these updates is through your Kanban board.
New navigation
Previous navigation
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 Kanban
boards and CFD charts.
2. Choose Cumulative flow and specify the team's preferences.
New navigation isn't supported for TFS 2018 and earlier versions. Choose the Previous navigation tab for
guidance.
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.
Kanban basics
Cumulative flow diagram
Workflow states and state categories
Agile, Scrum, and CMMI processes
Configure the Velocity widget
11/19/2018 • 4 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.
NOTE
Work is considered Planned if it is assigned to the iteration as-of the Iteration Start Date
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.
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.
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.
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.
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 topic. 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, 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
Previous 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.
New navigation isn't supported for TFS 2018 and earlier versions. Choose the Previous navigation tab for
guidance.
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 topic 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
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.
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).
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. Choose the Previous navigation tab for
guidance.
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?
New navigation isn't supported for TFS 2018 and earlier versions. Choose the Previous navigation tab for
guidance.
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
11/15/2018 • 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 Analyics 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.
!
Choose the plus icon to add one or more pipelines.
2. Next, choose the Period, and then choose the metrics that you want to track. Optionally, apply filters for
Branch, Test file, Owner, and Test run.
3. Choose Save when done.
The following image shows a chart with pass rate and test results for last 7 days.
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
11/19/2018 • 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.
Prerequistes
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
All valid users, including stakeholders, can view charts
All members who belong to the Contributors group can create charts
To add a chart to a team dashboard, you must be a team admin or have dashboard permissions
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.
All valid users, including stakeholders, can view charts
All members who belong to the Contributors group can create charts
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
All valid users, including stakeholders, can view charts
All members who belong to the Contributors group can create charts
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 topic. 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, Scrum, or CMMI.
To use all the features described in this topic you must have either an Enterprise subscription, or have installed the
Test Manager extension available from Visual Studio Marketplace.
Add your own charts for test results to visualize what's important for your team. If you already know how to add a
chart, jump to the examples below of charts that you can create.
1. Select the test plan or test suite for your chart in the Test plans page. Then create a new chart.
2. Select the chart type. Based on the chart, configure the fields that you want to use to group by, or for 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 rows pivot and Outcome as the 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.
See also
FAQs for manual testing
Next step
Control how long to keep test results
11/19/2018 • 3 minutes to read • Edit Online
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.
By default, all team members have permissions to edit dashboards defined for the team. All other valid users of the
project have view only permissions, except for administrators. You can change the edit permissions for specific
team dashboards.
By default, all team members have permissions to edit dashboards defined for the team. All other valid users of the
project have view only permissions, except for administrators. You can change the view, edit, and manage
permissions for all team dashboards for members of your 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. 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. Open the Mine or All dashboards page, open the actions menu for the dashboard, and choose the
Security option.
2. Add a user or group and set the permissions for that group. To learn more about adding groups or changing
permissions, see Add users to a project or specific team.
Here we lock down the permissions for members of the Fabrikam team to edit the Analytics dashboard.
Related articles
Add users to a project or specific team
Add a team administrator
Add a dashboard widget
11/19/2018 • 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.
Use the 'npm install' command to retrieve the SDK:
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.
Step 4: Your extension's logo: logo.png
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 everytime 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 everytime 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
11/19/2018 • 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
11/19/2018 • 2 minutes to read • Edit Online
NOTE
Feature availability: The Analytics Markplace 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
11/19/2018 • 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, 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.
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 Set team defaults.
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.
Teams specify their capacity to plan and monitor their sprint resources.
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 assigning 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 Analyics 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.
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 provides advanced capabilities. It allows 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 Test trend 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
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
11/19/2018 • 16 minutes to read • Edit Online
Azure DevOps Services | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015
Having the right guidance at the right time is critical to success. To support your team or contributors to your
project, use markdown to add rich formatting, tables, and images to your project pages, README files,
dashboards, and pull request comments.
You can provide guidance to your team in these places using markdown:
Project wiki (provisioned wiki)
Publish code as wiki
Markdown widget added to a dashboard
Project vision page or Welcome pages
Repository README files
Pull request comments
Definition of Done (Kanban board)
Project wiki
Markdown widget added to a dashboard
Project vision 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. The markdown rendering of the MD files in code repositories supports HTML
tags, block quotes, emojis, image resizing, and mathematical formulas. There is parity in markdown rendering in Wiki and
MD files in code.
NOTE
With TFS 2017.1, welcome pages, the markdown widget on team dashboards, and the Definition of Done on Kanban boards
will no longer support file links in their markdown. 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.
This adds space in between paragraphs.
Block quotes
Quote previous comments or text to set context for your comment or text.
Quote single lines of text be putting a > before the text. Use multiple > characters to nest quoted text. Quote
blocks of lines of text by using the same level of > across multiple lines.
Example:
Result:
Horizontal rules
Add a horizontal rule by adding a new line that's just a series of dashes --- . There must be a blank line above the
line containing the --- .
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 ~~ .
Combine these elements to apply multiple emphasis to text.
NOTE
There is no markdown syntax that supports underlining text. Within a wiki page, you can use the HTML <u> tag to
generate underlined text. For example, <u>underlined text</u> will yield underlined text`.
NOTE
There is no markdown 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> will yield underlined text`.
NOTE
There is no markdown syntax that supports underlining text.
Example:
Use _emphasis_ in comments to express **strong** opinions and point out ~~corrections~~
**_Bold, italizied text_**
**~~Bold, strike-through text~~**
Result:
Use emphasis in comments to express strong opinions and point out corrections Bold, italizied 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:
$ 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.
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:
0. First item.
0. Second item.
0. 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. Also, within pull
requests, you can link to work items by typing the # key and a work item ID, and then choosing the work item
from the list.
You can escape auto suggestion of work items by prefixing # with a backslash ( \ ). E.g. 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:// are not 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
Simply enter the pound sign ( # ) and 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
Add images and animated GIFs to your pull request comments, markdown files, or wiki pages to highlight issues
or just to liven the discussion.
Use the following syntax to add an image:

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 TVFC, just like the path to another
Markdown file in a link.
Relative path:

Absolute path in Git:

Absolute path in TFVC:

Resize image:

NOTE
The syntax to support image resizing is only supported in pull requests and 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 will render 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. Once 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 will be 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:
$$
\sum_{i=1}^{10} t_i
$$
$$
\int_0^\infty \mathrm{e}^{-x}\,\mathrm{d}x
$$
Result:
Table of contents (TOC) for Wiki pages
You can now just add a tag [[_TOC_]] to enable table of contents in your page. The TOC is generated when the tag
is added to the page and there is at least one heading in the page.
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 are not).
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 will render the TOC as follows.
This is to maintain consistency in the formatting in TOC. Note: The tag [[_TOC_]] is case sensitive i.e. [[_toc_]] may
not render the TOC.
::: 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 break in page)
Related articles
Project vision page or Welcome pages
README files
Pull requests
Markdown widget
Dashboards
Widget catalog
Wiki
Default permissions and access for charts and
dashboards
11/19/2018 • 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.
Notes:
1. Public project Stakeholders have full access to all features.
Related notes
Work across projects
Add a team administrator
Reporting roadmap for Azure DevOps and Azure
DevOps Server
11/19/2018 • 2 minutes to read • Edit Online
Roadmap timeline
Check out the Features Timeline for the roadmap of reporting features.
Analytics
11/19/2018 • 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