Запрос инцидентов TFS-сервера - PullRequest
0 голосов
/ 25 февраля 2019

Меня попросили изучить вопрос о создании отчета «Тепловая карта» в Power BI для руководителей, чтобы они могли поднять и просмотреть все задачи, над которыми работает их персонал, и состояние (в соответствии с графиком, приближающимся к сроку, критическим и т. Д.).

Для источников данных я изучаю базы данных TFS.В базе данных TFS какое представление или представления можно будет использовать для отслеживания рабочих элементов?

Я посмотрел базу данных хранилища данных TFS и проверил таблицу DimWorkItem.

Мне нужно будет получить рабочие элементы (такие как требование, запрос на изменение, ошибка и т. Д.), А также дочерние задачи этого рабочего элемента (тип рабочего элемента - «задача»).Кроме того, просматривая представление DimWorkItem, я могу получить рабочие элементы (такие как требование, запрос на изменение, ошибка и т. Д.), А также дочерние задачи этого рабочего элемента (тип рабочего элемента - «задача»).

Однако я не вижу столбца, в котором указан родитель задачи.Например, если у задачи с идентификатором 333 есть ребенок с задачей 338, как мне найти соединение?

Я не вижу дочерних или родительских столбцов в этих представлениях инцидентов.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Сначала проверьте это в тестовой среде .

Также я изменил запрос из стандартного отчета TFS с рабочей иерархией.Работает только с одной коллекцией.Если у вас есть несколько коллекций, они могут быть обновлены:

DECLARE @ParentWorkItemLinkTypeSK int; 
SET @ParentWorkItemLinkTypeSK = (SELECT [WorkItemLinkTypeSK] FROM [DimWorkItemLinkType] WHERE [LinkID] < 0 AND [ReferenceName] = 'System.LinkTypes.Hierarchy');
DECLARE @ChildWorkItemLinkTypeSK int; 
SET @ChildWorkItemLinkTypeSK = (SELECT [WorkItemLinkTypeSK] FROM [DimWorkItemLinkType] WHERE [LinkID] > 0 AND [ReferenceName] = 'System.LinkTypes.Hierarchy');

DECLARE @ProjectName nvarchar(256);
SET @ProjectName = 'DEV'; -- set the team project name

DECLARE @RootNodeIDs TABLE (ID int);
INSERT @RootNodeIDs
    -- This is selecting all deliverable workitems
    SELECT cwi.[System_Id] AS ID FROM [CurrentWorkItemView] cwi
        WHERE cwi.[System_WorkItemType] IN ('Bug', 'Product Backlog Item', 'Requirement')
            AND cwi.[ProjectNodeName] = @ProjectName

EXCEPT
    -- This is selecting all workitems that have a parent and have not been deleted
    SELECT lh.SourceWorkItemID AS ID FROM FactWorkItemLinkHistory lh
        JOIN [CurrentWorkItemView] cwi ON cwi.System_Id = lh.TargetWorkItemID
        WHERE lh.WorkItemLinkTypeSK = @ParentWorkItemLinkTypeSK
            AND cwi.System_WorkItemType IN ('Bug', 'Product Backlog Item', 'Requirement')
            AND lh.RemovedDate = CONVERT(DATETIME, '9999', 126)

DECLARE  @Hierarchy TABLE (ID int, ParentID int, [Level] int, [Path] nvarchar(4000));

WITH
Hierarchy (ID, ParentID, [Level], [Path]) AS
(
    SELECT ID, NULL as ParentID, 0 as [Level], CAST('/' + STR(ID) AS nvarchar(256)) as [Path]
    FROM @RootNodeIDs rootId 

UNION ALL

    SELECT flh.TargetWorkItemID as ID, Parent.ID, parent.Level + 1 as [Level], 
        CAST(parent.Path + '/' + STR(flh.TargetWorkItemID) AS nvarchar(256)) as [Path]
    FROM Hierarchy parent 
        JOIN FactWorkItemLinkHistory flh 
            ON flh.WorkItemLinkTypeSK = @ChildWorkItemLinkTypeSK
                AND flh.SourceWorkItemID = parent.ID
                AND flh.RemovedDate = CONVERT(DATETIME, '9999', 126)
        JOIN [CurrentWorkItemView] wi ON flh.TargetWorkItemID = wi.[System_ID]      


    WHERE parent.Path NOT LIKE CAST('%' + STR(flh.TargetWorkItemID) + '%' AS nvarchar(20)) AND parent.Level < 20 
)
INSERT @Hierarchy SELECT * FROM Hierarchy;
-- Hierarchy now contains all the Tasks and their ancestors that we're interested 

SELECT hierarchy.ID, ParentID, [Level], [Path], [ProjectNodeName] as Project, [System_State] as [State],
        [Microsoft_VSTS_Scheduling_RemainingWork] Remaining,
        [Microsoft_VSTS_Scheduling_CompletedWork] Completed,
        ([Microsoft_VSTS_Scheduling_RemainingWork] + [Microsoft_VSTS_Scheduling_CompletedWork]) Total,
        [System_WorkItemType] WIT,
        [System_Title] Title,
        [AreaPath] AreaPath,
        [IterationPath] IterationPath
    FROM @Hierarchy hierarchy
        INNER JOIN [CurrentWorkItemView] ON hierarchy.ID = [System_ID]
    ORDER BY [System_Id]

Результат:

enter image description here

0 голосов
/ 28 февраля 2019

Вы можете попробовать использовать представление vDimWorkItemTreeOverlay в качестве источника данных.Это пример запроса с одним уровнем иерархии:

SELECT Parent.[WorkItem]
      ,Parent.[System_Id]
      ,Parent.[System_Title]
      ,Parent.[System_State]
      ,Parent.[System_WorkItemType]
      ,Parent.[Microsoft_VSTS_Scheduling_TargetDate]
      ,Child.[WorkItem]
      ,Child.[System_Id]
      ,Child.[System_Title]
      ,Child.[System_State]
      ,Child.[System_Reason]
      ,Child.[System_WorkItemType]
      ,Child.[Microsoft_VSTS_Scheduling_StartDate]
      ,Child.[Microsoft_VSTS_Scheduling_FinishDate]
  FROM [Tfs_Warehouse].[dbo].[vDimWorkItemTreeOverlay] Parent
  LEFT JOIN [Tfs_Warehouse].[dbo].[vDimWorkItemTreeOverlay] Child ON Child.ParentWorkItemTreeSK = Parent.WorkItemTreeSK
  WHERE Parent.AreaTeamProject = 'DEV' AND Parent.System_IsDeleted = 0 AND Parent.System_WorkItemType in ('Bug', 'Product Backlog Item', 'Requirement') AND Child.System_WorkItemType = 'Task'
    AND Parent.WorkItemTreeSK = Parent.ParentWorkItemTreeSK AND Child.System_IsDeleted = 0

Это мой результат: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...