自从我在SQL工作以来已经很久了,所以如果这是一个愚蠢的问题,请道歉。
我正在使用TFS数据库,我正在尝试对其进行查询报告,以获取当前sprint迭代和转发中的项目的所有“OriginalEstimate”字段的总和。
即,如果数据的布局如下:
Sprint Name | Original Estimate Total
Sprint #1: | 10
Sprint #2: | 20
Sprint #3: | 30
Sprint #4: | 40
我想要返回一个如下所示的数据集:
Sprint Name | Original Estimate Total
Sprint #1: | 90
Sprint #2: | 70
Sprint #3: | 40
Sprint #4: | 0
首先,我甚至不知道使用SQL是否可以实现上述功能。如果没有,请告诉我。 :)
如果事情变得更加开始,我是否了解如何在TFS SQL服务器表结构中执行此操作。我不能修改结构,因此非常感谢任何关于如何实现这一点的想法。
如果你不熟悉TFS的数据库布局,这里有一个快速的表格摘要,剪下来并重新命名,以便更容易理解:
(Table) Iteration
-----------------
IterationName
IterationGuid
(Table) WorkItem
----------------
ID
Name
IterationGUID // Relates to Iteration table, above
StartDate
OriginalEstimate // The field I care about, only valid on 'Task' in our case.
WorkItemType // Used to distinguish the type, for our purposes assume only 'Task' and 'Sprint' exist
简要说明:
TFS中的“WorkItem”是从积压,任务到“冲刺”的所有内容。 'sprint'只是一个包含StartDate和EndDate的条目,用于计算您的sprint开始/结束,还链接到所有任务也将进行的迭代。所以,我想要的是上面提到的数据,按照Sprint的“名称”分组,由Sprint的“StartDate”排序,即前面所有冲刺的前向和。
这就是我想要绞尽脑汁的地方。
如果可以,我只需要做更多的阅读,请告诉我要查找的内容。我似乎无法使用子查询进行此操作,但也许我只是没有正确使用它们。
谢谢!
答案 0 :(得分:2)
所以,这些答案都帮助我引导我需要做的事情,但没有一个是完全自己的。这是我找到的最终解决方案:
SELECT Name, Microsoft_VSTS_Scheduling_StartDate AS StartDate,
(SELECT SUM(Microsoft_VSTS_Scheduling_OriginalEstimate) AS OriginalEstimateTotal
FROM CurrentWorkItemView AS wi1
WHERE (IterationPath IN
(SELECT IterationPath
FROM CurrentWorkItemView AS wi2
WHERE (WorkItemType = 'Sprint') AND
(Microsoft_VSTS_Scheduling_StartDate > wi3.Microsoft_VSTS_Scheduling_StartDate))) AND (State NOT IN ('Removed')))
AS OriginalEstimateTotal
FROM CurrentWorkItemView AS wi3
WHERE (WorkItemType = 'Sprint') AND (State <> 'Removed')
ORDER BY StartDate
理想情况下,我想将此查询移至MDX查询,但我并不是最模糊的。如果有人对此有任何意见,那就太好了。 :)
答案 1 :(得分:1)
可能不是最佳性能,但获得结果的一种方法就是在select语句中使用标量子查询。您的样本和结果数据似乎与您的解释不同。所以,我只是按照你的样本数据,即我将所有任务的值加总,大于当前任务。
SELECT name,
(SELECT SUM(originalestimate) AS oe
FROM workitem AS wi1
WHERE wi1.id = wi2.id
AND wi1.startdate > wi2.startdate) AS oe_total
FROM workitem AS wi2
WHERE workitemtype = 'Task'
ORDER BY name,
startdate
答案 2 :(得分:1)
SELECT
wi.id, wi.name,
SUM(ahead.originalestimate) ahead_estimate
FROM
workitem wi
INNER JOIN workitem ahead ON ahead.id = wi.id
AND ahead.startdate > wi.startdate
WHERE
workitemtype = 'Task'
GROUP BY
wi.id, wi.name
ORDER BY
wi.name
答案 3 :(得分:0)
这可以在SSRS中轻松完成 - 只需为您的汇总值创建一列,然后在汇总列中的详细行单元格的表达式中输入如下公式:
=Sum(Fields!OriginalEstimate.Value, "DataSet1")-Fields!OriginalEstimate.Value