• 报表之PlainText


      我们知道,在tfs中我们定义字段时,可以定义成String、Integer、Double、DateTime、PlainText、Html、TreePath和History,其中PlainText、Html和History不可用作报表格式。大多数情况下我们在定制流程时经常会用到PlainText类型字段,比如“说明”等,那么在定制报表时我们如何取出这些数据呢,当然我们用Excel的数据透视表可以实现,下面我们说一下是用报表开发工具如何读取此字段。

      首先,我们定制报表是从Warehouse数据仓库和Analysis Services多维数据集里读取数据,而PlainText不能做为报表格式,所以要想从Warehouse数据库里捞取数据的想法是行不通的。那么我们另辟蹊径,既然在tfs上可以查到数据,那么这些数据就一定会存在这个项目所在项目集合的数据库中。假设我们的项目集合名字为DefaultCollection,那么我们现在看一下DefaultCollection数据库的表,明显的我们可以看到一张QueryItems表,这里面的Text字段记录了我们在tfs中定义的查询,我们现在取出一条看看:

    select [System.Id], [Microsoft.VSTS.Common.StackRank], [System.Description], [System.WorkItemType], [System.State], [System.Title]
      from WorkItems
     where [System.TeamProject] = @project
       and [System.AssignedTo] = @me
       and [System.State] <> '已关闭'
       and [System.WorkItemType] <> '共享步骤'
     order by [Microsoft.VSTS.Common.StackRank], [Microsoft.VSTS.Common.Priority], [System.WorkItemType], [System.Id]

    这就说明了我们的数据确实是存在这个数据库中的,或者是通过这个语句来指向其他的数据库中的。我们看到上面的查询语句是从WorkItems表里获取数据的,在DefaultCollection数据库里并没有这张表,我们现在做一下假设,WorkItems是tfs建立的临时表,是TFS和sql server数据库的中间表,那么既然这张表里能读到PlainText类型字段,那么说明此类型的字段还是在数据库中有存储的,通过查找MSDN,我们查到一张WorkItemLongTexts表,我们查询这张表,里面有一个Words字段,里面就记录了我们PlainText类型字段的值,又通过FldID来定位是哪个字段,通过ID来定位是哪个工作项,通过Rev来标志此条数据的版本。知道了这些,我们现在就可以通过跨数据库来实现查询。

      例如我们现在要查询“研发任务”流程的ID、标题、指派给和问题说明,就可通过一下语句实现:

    with LongText as
       (select a.FldID,a.ID,MAX(a.rev) as REV
          from Tfs_DefaultCollection.dbo.WorkItemLongTexts a
          where a.FldID=52
         group by a.FldID,a.ID)
    select a.System_Id,a.System_Title,e.Name,c.Words,a.System_WorkItemType
      from Tfs_Warehouse.dbo.DimWorkItem a,Tfs_Warehouse.dbo.FactCurrentWorkItem b,Tfs_DefaultCollection.dbo.WorkItemLongTexts c,LongText d,Tfs_Warehouse.dbo.DimPerson e
      where a.TeamProjectSK=3
        and a.TeamProjectSK=b.TeamProjectSK
        and a.WorkItemSK=b.WorkItemSK
        and a.System_AssignedTo__PersonSK=e.PersonSK
        and a.System_Id=c.ID
        and c.FldID=d.FldID
        and c.ID=d.ID
        and c.Rev=d.REV
        and c.FldID=52
        and a.System_WorkItemType='研发任务';

      这样便查询出了PlainText类型的字段“说明”,顺便提一下,我现在使用的表DimWorkItem,我们也可以使用WorkItemHistoryView,这里面的人可以直接显示,不用再关联DimPerson表。

      

  • 相关阅读:
    k8s令牌登录设置方法
    etcd查看集群信息
    go Map
    go 切片重组
    go For-range结构
    go 切片
    go 数组与切片
    go 内存优化
    go 格式化输出
    go 闭包函数
  • 原文地址:https://www.cnblogs.com/huhu-xiaomaomi/p/3403461.html
Copyright © 2020-2023  润新知