java中rational_通过Rational Team Concert中的多个项目区域创建定制的报告

报告如何帮助您检查项目的运行状况

从各个角度查看有关项目的信息对于确保整个软件开发过程中项目的良好状态非常重要。 收集有关IBM®Rational Team Concert™中项目的信息,并将其作为快照存储在数据仓库中。 快照类似于关系数据库管理系统中的表,并且存在诸如工作项,构建,软件配置管理(SCM)之类的快照。 您可以使用BIRT创建报告以从喜欢的角度显示此信息(请参阅“ 相关主题”部分中的“数据仓库概念”和“数据仓库快照模式”链接)。

本文可以指导您从自己的角度获取有用的报告,尤其是有关工作项的自定义报告,从而帮助您保持项目的健康。 为此,您将考虑开发人员经理的角色以及每个角色的自定义报告。 每个角色都有自己的职责,需要对某些操作的支持。

  • 每个开发人员都属于团队和项目。 开发人员在分配的工作项上工作,以按时完成任务,并要求其他开发人员批准工作项,以保持可交付成果的质量。
  • 每个经理监督项目和团队。 经理分配要在指定迭代结束之前完成的工作项,并平衡开发人员之间的工作量,以免其中任何工作过载。

在分为三部分的系列文章中,对标题为“使用BIRT和Rational Team Concert创建定制报告”的文章进行了说明( 有关链接,请参见“ 相关主题”部分)。 本文重点介绍如何创建报告以显示必要的信息,以便每个角色的人员都可以通过检查报告来确定项目的运行状况。

设置环境以创建报告

请参阅“创建和部署新的报告”,对开发团队的Jazz.net上维基(见链接相关信息 )的步骤来设置环境。 若要完成本文中的步骤,您将需要以下版本的以下软件:

  • Rational Team Concert 3.0.1
  • Eclipse框架和工具:
    • Eclipse建模框架2.5.0
    • Web工具平台3.1.2
    • 数据工具平台1.7.2
    • 商业智能和报告工具(BIRT)2.5.2

请按照下列步骤打开示例报告文件:

  1. 打开“ 报表设计”透视图。 在“数据资源管理器”视图中,单击样本报告文件.rptdesign
  2. 在“数据源”文件夹下,单击每个数据源以打开一个对话框。
  3. 在“输入存储库”和“输入项目区域”窗格中,分别选择您的存储库和项目区域。
    注意:
    如果没有出现存储库和项目区域,请检查以确保已创建存储库连接,并且您已登录到项目区域。
  4. 打开工作项透视图。
  5. 在“团队工件”视图中,展开项目区域下的“报告”文件夹,然后右键单击“报告模板”以选择“ 新建”>“报告模板”
  6. 在内容窗格中单击“浏览”,然后选择一个示例报告文件( rptdesign )。
  7. 单击确定

定制报告的类型

本文介绍了如何通过使用三种类型的报告来报告信息:表格,饼图和条形图(重点主要放在与Live_Workitem_Cnt表绑定的信息上)。

表格报告
表格显示有关通过设置参数列出的工作项目的信息。 第一个表格报告设置CONTRIBUTOR_ITEMID。 第二个表报告设置APPROVAL_APPROVER_ITEMID。 此外,BIRT脚本可以定义自己的输出列。
饼图报告
饼图显示有关按输出列的值分组的工作项的信息。 通过将输出列设置为类别定义,并将WI_COUNT设置为切片大小定义,可以显示每个组的费率。 第一个饼图设置WI_SEVERITY,第二个饼图将WI_PRIORITY设置为类别定义。
条形图报告
条形图通过将输出列设置为类别(X)系列并将WI_COUNT设置为值(Y)系列来显示工作项目的数量。 第一个条形图设置CONTRIBUTOR_NAME,第二个条形图将APPROVAL_APPROVER_NAME设置为类别(X)系列。

工作项目分配和批准请求

第一个表格报告显示了按截止日期或优先级顺序分配给每个开发人员的未完成的工作项目(图1)。 开发人员可以在迭代过程中的任何时候看到它,以决定首先要处理的工作项。

截止日期(数据类型:日期)
在Live_Workitem_Cnt和Iteration表的“联合”数据集中的计算列上定义。 如果存在截止日期,则Live_Workitem_Cnt表中的截止日期为DUE_DATE;如果不存在,则为迭代表中的ENDDATE。 按截止日期对工作项进行排序非常重要,尤其是在DUE_DATE早于ENDDATE的情况下,因为开发人员通常计划在迭代结束前完成工作项,然后忽略到期日期。
priority_label(数据类型:字符串)
在Live_Workitem_Cnt表的数据集中的计算列上定义。 priority_label存储人类可读的字符串,例如从WI_PRIORITY转换为高,中,低的字符串,其数字值的前缀将较小的值显示为较高的优先级。

创建图1所示的报告需要五种表(表1中列出)。 Project_Area,Live_Contributor表中的报表参数按此顺序是级联参数。

表1.用于报告分配的工作项目的表
说明
迭代 ENDDATE用于计算列的截止日期(截止日期显示在报告中)。
Live_Contributor 在报表参数处选择的CONTRIBUTOR_ITEMID在Live_Workitem_Cnt处设置为CONTRIBUTOR_ITEMID。
Live_Workitem_Cnt WI_ID,SUMMARY和PROJECT_AREA_NAME显示在表格报告中。

DUE_DATE用于计算列的截止期限。

未完成状态设置为STATE_NAME。

报告中显示了计算列的priority_label。
优先 PRIORITY_ID和WI_PRIORITY分别在脚本onFetch处存储为变量priority_map (默认值: new Object() )作为键和值。

priority_map用于Live_Workitem_Cnt的priority_label。
项目区域 在报表参数中选择的PROJECT_AREA_ITEMID在Live_Workitem_Cnt和Live_Contributor均设置为PROJECT_AREA_ITEMID。
图1.按截止日期顺序分配的工作项目
根据截止日期列出了六个工作项目

第二张表格报告显示了需要向每个开发人员申请批准的工作项目(图2)。 如果完成工作项的条件需要批准,则忽略批准可能会导致其他开发人员受阻。 开发人员可以在迭代过程中的任何时候看到此情况,以避免忽略需要批准的工作项。

通过使用Live_Workitem_Cnt,Live_Contributor(表2)替换Live_Workitem_Cnt,Live_Contributor(表1),您需要五种表来创建图2所示的报告。

表2.用于报告工作项所请求的批准的不同表
说明
Live_Workitem_Cnt 与表1相同,但设置为STATE_NAME。

待处理状态设置为APPROVAL_STATE,而不是设置STATE_NAME。
Live_Contributor 在报表参数处选择的CONTRIBUTOR_ITEMID在Live_Workitem_Cnt处设置为APPROVAL_APPROVER_ITEMID。
图2.按优先级排序的工作项目批准请求
三个工作项目按优先级列出

迭代中未完成的工作项

第一个饼图报告按严重性顺序显示了未完成的缺陷(图3)。 经理在计划迭代时会看到它,因此他们可以将即时工作项目分配给开发人员,并检查项目是否按计划进行。

ality_label(数据类型:字符串)
在Live_Workitem_Cnt表的数据集中的计算列上定义。 duration_label存储人类可读的字符串,例如从WI_SEVERITY转换而来的字符串,例如Blocker, Critical,Major,Normal或Minor ,其数字值的前缀显示的值越小,表示严重性越高(0 =最严重)。

同样,您需要五种表(请参阅表3)来创建如图3所示的报告。Project_Area,Live_devline,Live_iteration表中的报告参数按此顺序层叠。

表3.按严重性顺序报告缺陷的表
说明
com.ibm.team.process.DevelopmentLine(Live_devline) 表属于实时快照。 在报表参数处选择的itemId用于在Live_iteration处设置internalDevelopmentLine.itemId。
com.ibm.team.process.Iteration(Live_iteration) 表属于实时快照。 在报表参数处选择的itemId设置为变量eration_param (默认值:“”)。 如果不选择,所有的itemId过滤用Live_devline在脚本onFetch连接成iteration_param。 在Live_Workitem_Cnt,将迭代参数设置为ITERATION_ITEMID。
Live_Workitem_Cnt 将饼图放在表的组标题行上,其中行按PROJECT_AREA_NAME分组。

工作项按“ severity_label”的值分组。 从WI_COUNT计算得出的每个组比率按严重性顺序显示在饼图报告中。

工作项类型(缺陷)设置为WI_TYPE。

未完成状态设置为STATE_NAME。
项目区域 报告参数中选择的PROJECT_AREA_ITEMID用于同时设置为Live_Workitem_Cnt的PROJECT_AREA_ITEMID和Live_devline的internalProjectArea.itemId。
严重程度 SEVERITY_ID和WI_SEVERITY在脚本onFetch上分别存储为严重性 _map变量(默认值: new Object() )作为键和值。

严重性图用于Live_Workitem_Cnt的严重性标签。

要通过一个饼图显示一个项目区域的信息,请将饼图放在表中的组标题行上,其中行按PROJECT_AREA_NAME分组。 图3显示了根据严重程度在两个项目区域中每个项目区域未完成的缺陷数量。

图3.未完成的缺陷报告按严重性顺序
两个饼图显示缺陷数量

第二个饼图报告按优先级顺序显示除缺陷之外未完成的工作项目(图4)。 在Live_Workitem_Cnt表的数据集中的计算列上定义了priority_label。

同样,您需要五种表来创建图4所示的报告,因此将Live_Workitem_Cnt(严重性)(请参见表3)替换为Live_Workitem_Cnt(优先级)(表4)。

表4.按优先级顺序报告工作项的不同表
说明
Live_Workitem_Cnt 在表的组标题行上放置一个饼形图,其中行按PROJECT_AREA_NAME分组。

工作项按priority_label值分组。 从WI_COUNT计算得出的每个组速率按优先级顺序显示在饼图中。

除缺陷外,工作项类型设置为WI_TYPE。

未完成状态设置为STATE_NAME
优先 PRIORITY_ID和WI_PRIORITY在onFetch脚本中分别存储为priority_map变量(默认值: new Object() )作为键和值。

priority_map用于Live_Workitem_Cnt的priority_label。 在分配的工作项目的报告中, priority_map和priority_label的计算方法相同。

要通过一个饼图显示一个项目区域的信息,请执行与第一个饼图报告相同的步骤。 图4按优先顺序显示了两个项目区域中按项目区域划分的除缺陷之外的未完成工作项目的数量。

图4.未完成的工作项目按优先级排序
两个饼图显示工作项的数量

生产力和贡献

第一个条形图报告显示每个开发人员完成了多少工作项目(图5)。 经理在迭代结束时对其进行检查,以查看谁的工作效率最高。

创建图5中的报告需要六种表(表5)。Project_Area,Live_teamarea,Live_devline,Live_iteration表中的报告参数按此顺序是级联参数。

表5.报告生产率的表
说明
Live_Contributor 通过Live_teamarea过滤的所有CONTRIBUTOR_ITEMID在脚本onFetch处被串联到contributor_param变量中(默认值:“”)。

contributor_param在Live_Workitem_Cnt设置为CONTRIBUTOR_ITEMID。
com.ibm.team.process.DevelopmentLine(Live_devline) 该表属于实时快照。

在报表参数处选择的itemId用于在Live_iteration处设置internalDevelopmentLine.itemId。
com.ibm.team.process.Iteration(Live_iteration) 该表属于实时快照。

在report参数处选择的itemId设置为eration_param变量(默认值:“”)。

如果不选择,所有的itemId过滤用Live_devline在脚本onFetch连接成iteration_param。

iteration_param在Live_Workitem_Cnt设置为ITERATION_ITEMID(计算和iteration_param的设置方法是,在未完成的缺陷和工作项的报表相同)。
com.ibm.team.process.TeamArea(Live_teamarea) 在报表参数处选择的itemId在Live_Contributor处设置为TEAM_AREA_ITEMID。
Live_Workitem_Cnt 使用WI_COUNT,按CONTRIBUTOR_NAME对完成的工作项目进行计数,并且每个数字都按降序显示。

完成状态设置为STATE_NAME。
Project_Area, 在报表参数处选择的PROJECT_AREA_ITEMID用于设置为三个参数,Live_teamarea处的projectArea.itemId,Live_devline处的internalProjectArea.itemId和Live_Workitem_Cnt处的PROJECT_AREA_ITEMID。

要在一个条形图中显示来自多个项目区域的信息摘要,请使用堆积的条形图,并将PROJECT_AREA_NAME列设置为可选的Y系列分组。 图5显示了两个项目区域中每个贡献者完成的工作项目数。

图5.每个开发人员完成的工作项
完成的工作项目数(按名称)

第二个条形图显示了开发人员批准了多少个工作项(图6)。 经理在迭代结束时进行检查,以查看谁贡献最大。

通过将Live_Contributor,Live_Workitem_Cnt(表5)替换为Live_Contributor,Live_Workitem_Cnt(表6)来创建图6报告,您需要六种表。

表6.报告捐款的不同表格
说明
Live_Contributor 通过Live_teamarea过滤的所有CONTRIBUTOR_ITEMID在脚本onFetch处被串联到变量contributor_param中。 contributor_param在Live_Workitem_Cnt设置为APPROVAL_APPROVER_ITEMID。
Live_Workitem_Cnt 使用WI_COUNT对每个APPROVAL_APPROVER_NAME批准的工作项目进行计数,并且每个数字以降序显示。

批准的完成状态设置为APPROVAL_STATE。

要在一个条形图中显示多个项目区域的信息摘要,请对第一个条形图报告执行相同的步骤。 图6显示了两个项目区域中每个贡献者的批准工作项目数。

图6.批准的工作项按开发人员排序
项目数量和名称

创建报告

本节说明了当应用于Rational Team Concert中的项目区域的过程是Scrum时如何创建报告。 它说明了创建分配的工作项目报告的所有步骤。 还说明了其他报告的重点。

分配的工作项目

创建分配的工作项目报告涉及以下七个步骤:

  1. 创建数据源
  2. 创建数据集
  3. 创建报告参数
  4. 在数据集上设置报告参数
  5. 用变量创建计算列
  6. 创建报告参数以选择排序类型
  7. 创建布局

创建数据源

创建COMMON和WORKITEMS数据源。

  1. 选择“ 文件” >“ 新建” > “报告” ,然后为“文件名”输入assigned_workitems.rptdesign
  2. 单击“ 下一步” ,选择“ 空白报告” ,然后单击“ 完成”
  3. 打开数据资源管理器视图。
  4. 右键单击“ 数据源” ,选择“ 新数据源” ,然后执行以下步骤
    1. 在下面的列表中选择从数据源类型创建
    2. 从列表中选择Jazz数据源
    3. 在数据源名称中输入COMMON
    4. 单击下一步。
  5. 从每个窗格的列表中选择这些值,然后单击Finish
    • 输入存储库: your repository
    • 输入快照: COMMON_SNAPSHOT
    • 输入项目区域: your project
  6. 通过在“输入快照”窗格中选择WORKITEMS_SNAPSHOT来重复步骤4和5,以创建另一个WORKITEMS数据源。

创建数据集

创建迭代,Live_Contributor,Project_Area,Live_Workitem_Cnt和优先级数据集。

  1. 右键单击“ 数据集” ,然后选择“ 新建数据集” ,然后完成以下步骤:
    1. 在“数据源选择”上单击“ 常见”
    2. 在“数据集类型”中选择“ Jazz简单数据集”
    3. 在“数据集名称”中输入“ Iteration
    4. 单击下一步
  2. 在每个窗格中选择这些值,然后单击“ 完成”。
    • 输入表格名称: ITERATION
    • 选择列: ENDDATEITERAITON_ITEMIDITERATION_NAME
    • 选择参数: PROJECT_AREA_ITEMID
  3. 选择公共数据源,然后重复步骤1和2以创建这些数据集。
    • 数据集名称: Live_Contributor
      • 输入表格名称: LIVE_CONTRIBUTOR
      • 选择列: CONTRIBUTOR_ITEMIDCONTRIBUTOR_NAME
      • 选择参数: CONTRIBUTOR_ARCHIVEDPROJECT_AREA_ITEMID
    • 数据集名称: Project_Area
      • 输入表格名称: PROJECT_AREA
      • 选择列: PROJECT_AREA_ITEMIDPROJECT_AREA_NAME
      • 选择参数: PROJECT_AREA_ARCHIVED
  4. 选择WORKITEMS数据源,然后重复步骤1和2以创建这些数据集。
    • 数据集名称: Live_Workitem_Cnt
      • 输入表格名称: LIVE_WORKITEM_CNT
      • 选择列: WI_ID,SUMMARYPROJECT_AREA_NAMEITERATION_ITEMIDWI_PRIORITYDUE_DATE
      • 选择参数: PROJECT_AREA_ITEMIDCONTRIBUTOR_ITEMIDSTATE_NAME
    • 数据集名称: Priority
      • 输入表格名称: PRIORITY
      • 选择列: PRIORITY_IDWI_PRIORITY

创建报告参数

创建级联参数组,ProjectArea和ContributorName。

  1. 右键单击Report Parameters以选择New Cascading Parameter Group
  2. 在常规中输入这些值
    • 级联参数组名称: ProjectAreaAndContributorName
    • 提示文本: Select ProjectArea and ContributorName
  3. 选择多个数据集
  4. 单击添加 ,然后输入并选择这些值,然后单击确定
    • 在名称处输入ProjectArea
    • 在“数据集”中选择Project_Area
    • 在“值”处选择PROJECT_AREA_ITEMID
    • 在“显示文字”中选择PROJECT_AREA_NAME
  5. 选择以下值:
    • 排序方式: PROJECT_AREA_NAME
    • 排序方向: 升序
  6. 通过执行这些步骤,重复步骤4和5。
    • 在名称中输入ContributorName
    • 在“数据集”中选择“ Live_Contributor”
    • 在[值]中选择CONTRIBUTOR_ITEMID
    • 在显示文字中选择CONTRIBUTOR_NAME
    • 单击确定。
    • 在排序依据中选择CONTRIBUTOR_NAME
    • 选择在排序方向上升序
  7. 单击确定

在数据集上设置报告参数

在以下数据集上设置参数:Iteration,Live_Contributor,Live_Workitem_Cnt和Project_Area数据集。

要获取未完成的工作项,请在参数对话框中将未完成的状态设置为STATE_NAME 。 未完成状态可能会根据项目区域的过程或过程的用户定制而有所不同。 通过打开项目区域和“过程配置”选项卡,请参考状态标签中的id属性值。 清单1显示了具有打开或正在进行的组属性的值。

小费:
请记住,已解决的缺陷状态与任务的“完成”状态具有相同的值3,并且它们都处于封闭的组中。 这意味着使用清单1中的代码,报告中不会显示“已解决”状态的缺陷。一种解决方法是创建两个Live_Workitem_Cnt数据集以分别显示缺陷和任务,并分别设置STATE_NAME。

清单1. Scrum流程中未完成的工作项状态
'\'1\',\'2\',\'6\',\'com.ibm.team.workitem.buildTrackingWorkflow.state.s2\',\'com.ibm.te
am.apt.epic.workflow.state.s1\',\'com.ibm.team.apt.epic.workflow.state.s2\',\'com.ibm.te
am.apt.story.idea\',\'com.ibm.team.apt.story.tested\',\'com.ibm.team.apt.story.defined\'
,\'com.ibm.team.workitem.retrospectiveWorkflow.state.new\',\'com.ibm.team.workitem.retro
spectiveWorkflow.state.inprogress\',\'com.ibm.team.workitem.impedimentWorkflow.state.s1\
',\'com.ibm.team.rtc.workflow.adoption.state.s1\',\'com.ibm.team.rtc.workflow.adoption.s
tate.s2\''
  1. 单击迭代以选择参数 ,然后单击编辑以选择以下值:
    • 参数名称:PROJECT_AREA_ITEMID
      • 数据类型: 字符串
      • 链接到报表参数: ProjectArea
  2. 通过选择以下值并将其输入参数,对其他数据集重复步骤1:
    • 数据集:Live_Contributor
      • 参数名称:CONTRIBUTOR_ARCHIVED
        • 数据类型: 布尔
        • 默认值: false
      • 参数名称:PROJECT_AREA_ITEMID
        • 数据类型: 字符串
        • 链接到报表参数: ProjectArea
    • 数据集:Live_Workitem_Cnt
      • 参数名称:PROJECT_AREA_ITEMID
        • 数据类型: 字符串
        • 链接到报表参数: ProjectArea
      • 参数名称:CONTRIBUTOR_ITEMID
        • 数据类型: 字符串
        • 链接到报表参数: ContributorName
      • 参数名称:STATE_NAME
        • 数据类型: 字符串
        • 默认值:输入工作项目的未完成状态(清单1)
    • 数据集:Project_Area
      • 参数名称:PROJECT_AREA_ARCHIVED:
        • 数据类型: 布尔
        • 默认值: false

用变量创建计算列

使用project_area_array和priority_map变量创建计算列,priority_label和截止日期。

Live_Workitem_Cnt的WI_PRIORITY可能不是可读格式。 通过使用优先级的PRIORITY_ID和Live_Workitem_Cnt的WI_PRIORITY之间的关系,可以将其转换为优先级为WI_PRIORITY(请参见清单2)。 然后,将优先级为WI_PRIORITY的优先级存储在优先级较高的数字值中,这些数字的较小值显示为较高优先级(0 =最高)。

清单2. PRIORITY_ID和WI_PRIORITY之间的关系
PRIORITY_ID (at Priority) = PROJECT_AREA_ITEMID (at Project_Area) + "p" + 
    WI_PRIORITY (at Live_Workitem_Cnt)

将报告文件部署在Rational Team Concert服务器上时,ProjectArea报告参数以一种格式保存选定的项目区域,每个项目区域都用单引号引起来并且用逗号隔开( 注: ProjectArea保留一个没有单引号的项目区域)在本地环境中运行报告文件时,标记和逗号。)代码清单3显示了如何解析ProjectArea并将每个ID存储在project_area_array变量中。 项目区域的信息用于计算清单4中的priority_map变量。

清单3.将选定的项目区域存储到project_area_array
var project_area_str = params["ProjectArea"].value; 
var project_area_ids = project_area_str.split(","); 
var str = ""; 
var arr = new Array(); 
for(var count = 0; count < project_area_ids.length; count++ ){ 
    var project_area_id = project_area_ids[count]; 
    project_area_id = project_area_id.replace(/\'/g, ""); 
    arr.push(project_area_id); 
} 
vars["project_area_array"] = arr;
清单4.添加到priority_map
var priority_id = row["PRIORITY_ID"]; 
var wi_priority = row["WI_PRIORITY"]; 
var arr = vars["project_area_array"]; 

if(priority_id != null){ 
    for(var count = 0; count < arr.length; count++){ 
        var project_area_itemid = arr[count]; 
        if(priority_id.indexOf(project_area_itemid)>= 0){ 
            vars["priority_map"][priority_id] = wi_priority; 
        } 
    } 
}
  1. 右键单击Variables ,选择New Variable ,输入这些值,然后单击OK
    • 类型: 报告变量
    • 名称: priority_map
    • 默认值: new Object()
  2. 选择Priority数据集,选择Script选项卡,选择onFetch ,然后输入脚本(清单4)。

注意:
该脚本将PRIORITY_ID和WI_PRIORITY分别存储为priority_map变量作为键和值。

  1. 单击Live_Workitem_Cnt ,然后选择“ 计算列”
  2. 单击“ 新建” ,输入这些值,然后单击“ 确定”
    • 列名称: priority_label
    • 数据类型: 字符串
    • 表达式:输入脚本(清单5)
清单5. priority_label的表达式
var map = vars["priority_map"]; 
var label = ""; 
for(var key in map){ 
    var val = map[key]; 
    if(key.indexOf(row["WI_PRIORITY"]) >= 0){ 
        if(val == "High"){ 
            label = "id0:" + val; 
        }else if(val == "Medium"){ 
            label = "id1:" + val; 
        }else if(val == "Low"){
            label = "id2:" + val; 
        }else if(val == "Unassigned"){
            label = "id3:" + val; 
        } 
        break; 
    } 
} 
label;

创建一个包含Live_Workitem_Cnt和Iteration数据集中的Live_Workitem_Cnt_with_Iteration的联合数据集。 在联合数据集中,创建一个计算列,即截止日期。 截止日期是截止日期(如果存在),或者是迭代的结束日期(如果没有)。 截止日期列用于对表格进行排序。

  1. 右键单击“ 数据集” ,然后选择“ 新建联合数据集”
  2. 选择并输入这些值,然后单击完成
    • 左窗格
      • 下拉列表: Live_Workitem_Cnt
      • 菜单: ITERATION_ITEMID
    • 右窗格
      • 下拉菜单: 迭代
      • 菜单: ITERATION_ITEMID
    • 联接类型: 左外联接
    • 数据集名称: Live_Workitem_Cnt_with_Iteration
  3. 单击“ Live_Workitem_Cnt_with_Iteration” ,选择“ 计算列” ,然后选择并输入以下值:
    • 列名称: deadline
    • 数据类型: 日期
    • 表达式:输入脚本(清单6)
清单6.期限表示
if(row["DUE_DATE"]){ 
    row["DUE_DATE"]; 
}else if(row["ENDDATE"]){ 
    row["ENDDATE"]; 
}else{ 
    null; 
}

创建报告参数以选择排序类型

创建SortType报告参数以按截止日期还是优先级进行排序。

  1. 右键单击“报表参数” ,然后选择“ 新建参数”
  2. 输入并选择以下值:
    • 名称: SortType
    • 提示文字: Select sort type.
    • 数据类型: 字符串
    • 显示类型: 单选按钮
  3. 单击“ 新建” ,输入这些值,然后单击“ 确定” 。 重复两次相同的步骤以添加这两组值:
    • 第一
      • 显示文字: deadline
      • 值: sort_by_deadline
    • 第二名
      • 显示文字: priority
      • 值: sort_by_priority

创建布局

您需要添加绑定到“优先级”数据集的动态文本。 否则,onFetch脚本将无法运行,并且Priority数据集的priority_map变量将保持为空。

  1. 从“组件面板”视图中添加动态文本
    • 输入脚本来计算project_area_array变量( 清单3 )。
    • 在属性编辑器的“属性”选项卡上的“可见性”选项卡上,为所有输出选择“ 隐藏元素 ”。
  2. 从“组件面板”视图中添加动态文本
    • 输入文本"Priority data set for script onFetch"
    • 在属性编辑器的“属性”选项卡上,为所有输出选择“ 隐藏元素 ”。
    • 在属性编辑器的“绑定”选项卡上选择“数据集优先级 ”。
  3. 添加Table ,然后在属性编辑器的“绑定”选项卡上的“数据集”处设置Live_Workitem_Cnt_with_Iteration
  4. 在添加的表中,选择以下输出列:
    • Live_Workitem_Cnt :: WI_ID
    • Live_Workitem_Cnt :: SUMMARY
    • Live_Workitem_Cnt :: priority_label
    • Live_Workitem_Cnt :: PROJECT_AREA_NAME
    • 迭代:: ITERATION_NAME
    • 最后期限
  5. 在添加的表的属性编辑器中,单击“排序”选项卡上的“ 添加 ”,输入并选择这些值,然后单击“ 确定”
    • 关键:输入脚本(清单7)
    • 方向: 升序
    • 区域设置: 自动
    • 强度: ASCII
  6. 故障排除:
    • 如果数据没有出现在每个数据集中的“预览结果”中,请运行数据收集作业。 在应用程序管理中,单击“报告” ,然后单击“运行所有数据仓库收集作业”
    • 要更改表的外观,请单击表的左上方标题,然后在属性编辑器中编辑属性。 例如,在“高级”选项卡中,分别在“ Box”属性中将“ solid”和“ thin”设置为“ style”和“ width”。
清单7.排序选项卡上的主键
var sorted_by = params["SortType"].value; 
sorted_by = sorted_by.replace(/\'/g, ""); 
if(sorted_by == "sort_by_deadline"){ 
    row["deadline"]; 
}else if(sorted_by == "sort_by_priority"){ 
    row["priority_label"]; 
}
图7.报告分配的工作项目的布局
BIRT的两个文本,动态文本和表格
图8.请求参数
选择三个参数

为了创建图2的表报告,清单8显示了Live_Workitem_Cnt处APPROVAL_STATE的参数,用于报告正在审批的工作项。

清单8.待处理状态设置为APPROVAL_STATE
"com.ibm.team.workitem.approvalState.pending"

迭代中未完成的工作项

本节是对两种未完成缺陷报告的说明(按严重性顺序)和工作项(按优先级顺序)的补充。

表7显示了用于报告未完成缺陷的STATE_NAME和WI_TYPE参数的值。 未完成表示以下四个状态之一:

  • 进行中
  • 解决
  • 重新开启
表7. Live_Workitem_Cnt上的STATE_NAME和WI_TYPE
名称 数据类型 表达
STATE_NAME '\'1 \',\'2 \',\'3 \',\'6 \''
WI_TYPE “缺陷”

如果Live_Workitem_Cnt的WI_SEVERITY不是人类可读的格式,则可以通过关系将其转换为Severity的WI_SEVERITY(清单9)。 首先,将选定的项目区域存储到project_area_array变量中( 清单3 )。

清单9. SEVERITY_ID和WI_SEVERITY之间的关系
SEVERITY_ID (at Severity) = PROJECT_AREA_ITEMID (at Project_Area) + "v" + 
        WI_SEVERITY (at Live_Workitem_Cnt)

接着,SEVERITY_ID和WI_SEVERITY在严重性被存储在severity_map(清单10)。

清单10.严重性级别onFetch的严重性
var severity_id = row["SEVERITY_ID"]; 
var wi_severity = row["WI_SEVERITY"]; 
var arr = vars["project_area_array"]; 

if(severity_id != null){ 
    for(var count = 0; count < arr.length; count++){ 
        var project_area_itemid = arr[count]; 
        if(severity_id.indexOf(project_area_itemid) >= 0){ 
            vars["severity_map"][severity_id] = wi_severity; 
        } 
    } 
}

如果在SEVERITY_ID包括severity_map在WI_SEVERITY Live_Workitem_Cnt,WI_SEVERITY在severity_map返回与显示出较小的值作为严重性更高数值的前缀(清单11)。

清单11. Live_Workite_Cnt上的severity_label计算列
var map = vars["severity_map"]; 
var label = ""; 
for(var key in map){ 
    var val = map[key]; 
    if(key.indexOf(row["WI_SEVERITY"]) >= 0){ 
        if(val == "Blocker"){ 
            label = "id0:" + val; 
        }else if(val == "Critical"){ 
            label = "id1:" + val; 
        }else if(val == "Major"){ 
            label = "id2:" + val; 
        }else if(val == "Normal"){ 
            label = "id3:" + val; 
        }else if(val == "Minor"){ 
            label = "id4:" + val; 
        }else if(val == "Unclassified"){ 
            label = "id5:" + val; 
        } 
    } 
} 
label;

迭代参数是在Live_iteration的onFetch中计算的(清单12)。

清单12. Live_iteration处的eration_param onFetch
var userIter = params["Iteration"].value 

if(userIter == null || userIter == ""){ // only devline is selected. 
    var itemId = row["itemId"]; 
    var str = vars["iteration_param"]; 
    // itemId of one iteration is added to str at once. 
    if(itemId != null && str.indexOf(itemId) == -1 ){ 
        str += '\'' + itemId + '\'' + ","; 
        vars["iteration_param"] = str; 
    } 
}else{ // iteration is selected. 
    var str = vars["iteration_param"]; 
    if(str == ""){ 
        str = userIter + ","; 
        vars["iteration_param"] = str; 
    } 
}

计算之后,在Live_Workitem_Cnt(清单13)将迭代参数设置为ITERATION_ITEMID。

清单13.在Live_Workitem_Cnt设置的迭代参数
var iteration_param = vars["iteration_param"]; 
if(iteration_param.length > 0){ 
    iteration_param = iteration_param.substr(0, iteration_param.length - 1);
} 
iteration_param;

表8显示了布局中的报告项目。 这些项目按从上到下的顺序放置。

表8.布局中的报告项目
报告项目 绑定表 表达
动态文字 没有 为计算project_area_array变量而添加(清单3)。
动态文字 Live_iteration 加入在onFetch的iteration_param变量的计算,而不是在报告中显示(通过在属性编辑器在可视性检查隐藏元素 )。
动态文字 严重程度 已添加,用于在onFetch上计算严重性 _map变量,未在报告中显示。
Live_Workitem_Cnt 在输出列中选择PROJECT_AREA_NAME,WI_SEVERITY和WI_COUNT,并在计算列中创建严重性标签(清单11)。 以下是详细设置:

  1. 通过选择在行标题上插入组来创建组。
    • 名称: ProjectAreaGroup
    • 分组依据PROJECT_AREA_NAME
  2. 在每个组中,“严重性标签”编号(根据WI_SEVERITY计算)由WI_COUNT计算。
  3. 图表放在“组标题行”上。
  4. 在“排序”选项卡上设置“ severity_label”:
    • 排序键: row [“ severity_label”]
    • 排序方向: 升序
    • 排序区域设置: 自动
    • 排序强度: ASCII
图表 (从容器继承数据:继承列和组) 显示在报告中。 此“图表”报告项目放在上方“表”报告项目中的组标题行上。

以下是详细设置:
  • 图表类型: 饼图
  • 输出格式: PNG (如果SVG在浏览器视图中不起作用。)
  • 从容器继承数据: 继承列和组
  • 类别定义: row [“ severity_label”]
  • 切片大小定义: 第[“ WI_COUNT”]行
  • 图表标题: Unfinished defects in order of severity
Live_Workitem_Cnt_list 如果需要检查工作项列表,则为可选。
图9.未完成的缺陷报告的布局
动态文本,饼图,文本,BIRT表

为了创建如图4所示的饼图报告,表9显示了STATE_NAME和WI_TYPE参数的值,用于报告未完成的工作项(缺陷和跟踪构建项除外)。 未完成表示每种工作项类型都有两个状态组:“打开”或“进行中”。 这些在Scrum流程的项目区域中定义。

表9. Live_Workitem_Cnt上的STATE_NAME和WI_TYPE
名称 数据类型 表达
STATE_NAME 清单14
WI_TYPE 清单15
清单14. STATE_NAME表达式
'\'1\',\'2\',\'com.ibm.team.apt.epic.workflow.state.s1\',\'com.ibm.team.apt.epic.workflo
w.state.s2\',\'com.ibm.team.apt.story.idea\',\'com.ibm.team.apt.story.tested\',\'com.ibm
.team.apt.story.defined\',\'com.ibm.team.workitem.retrospectiveWorkflow.state.new\',\'co
m.ibm.team.workitem.retrospectiveWorkflow.state.inprogress\',\'com.ibm.team.workitem.imp
edimentWorkflow.state.s1\',\'com.ibm.team.rtc.workflow.adoption.state.s1\',\'com.ibm.tea
m.rtc.workflow.adoption.state.s2\''
清单15. WI_TYPE表达式
'\'com.ibm.team.apt.workItemType.epic\',\'com.ibm.team.apt.workItemType.story\',\'com.ib
m.team.workItemType.adoption\',\'com.ibm.team.workitem.workItemType.impediment\',\'com.i
bm.team.workitem.workItemType.retrospective\',\'task\''

使用优先级Live_Workitem_Cnt(表10)替换表8中的严重性(动态文本)和Live_Workitem_Cnt(表和图表)的报告项用于布局。

表10.布局中的报告项目,按从上到下的顺序
报告项目 绑定表 表达
动态文字 优先 为在onFetch上计算priority_map变量而添加,未在报告中显示。
Live_Workitem_Cnt WI_SEVERITY和严重性标签(表8)分别更改为WI_PRIORITY和priority_label。

在“排序”选项卡上设置priority_label。
图表 (从容器继承数据:继承列和组) 显示在报告中。 此“图表”报告项目放在上方“表”报告项目中的组标题行上。

除此处所述以外的其他设置与表8相同。
类别定义:
行[“ priority_label”]

生产力和贡献

本节是对每次迭代中完成并批准多少个工作项目的报告的解释的补充。

表11显示了用于报告完成的工作项目的STATE_NAME值,但跟踪构建项目除外(表11)。 “完成”表示每种工作项类型的关闭状态组。 (这表明还计算为“已解决”状态的缺陷。)在Scrum流程的项目区域中定义。

表11. Live_Workitem_Cnt上的STATE_NAME
名称 数据类型 表达
STATE_NAME 清单16
清单16. STATE_NAME表达式
'\'3\',\'4\',\'com.ibm.team.workitem.taskWorkflow.state.s4\',\'com.ibm.team.apt.epic.wor
kflow.state.s3\',\'com.ibm.team.apt.epic.workflow.state.s5\',\'com.ibm.team.apt.epic.wor
kflow.state.s6\',\'com.ibm.team.apt.storyWorkflow.state.s1\',\'com.ibm.team.apt.story.ve
rified\',\'com.ibm.team.apt.storyWorkflow.state.s2\',\'com.ibm.team.workitem.retrospecti
veWorkflow.state.finished\',\'com.ibm.team.workitem.retrospectiveWorkflow.state.s1\',\'c
om.ibm.team.workitem.impedimentWorkflow.state.s2\',\'com.ibm.team.workitem.impedimentWor
kflow.state.s3\',\'com.ibm.team.rtc.workflow.adoption.state.s4\',\'com.ibm.team.rtc.work
flow.adoption.state.s3\''

contributor_param在onFetch在LIVE_CONTRIBUTOR(清单17)来计算。

清单17. Live_Contributor中onFetch的contributor_param
var itemId = row["CONTRIBUTOR_ITEMID"]; 
var str = vars["contributor_param"]; 
if( itemId != null && str.indexOf(itemId) == -1 ){ 
    str += '\'' + itemId + '\'' + ","; 
    vars["contributor_param"] = str; 
}

经计算后,contributor_param被设置为在CONTRIBUTOR_ITEMID Live_Workitem_Cnt(清单18)。

清单18.在Live_Workitem_Cnt设置的contributor_param
var contributor_param = vars["contributor_param"]; 
if(contributor_param.length > 0){ 
    contributor_param = contributor_param.substr(0, contributor_param.length - 1);
}
contributor_param;

表12显示了布局中的报告项目。 这些项目按从上到下的顺序放置。

表12.布局中的报告项目
报告项目 绑定表 表达
动态文字 Live_iteration 加入在onFetch的iteration_param变量的计算,而不是在报告中显示(通过在属性编辑器在可视性检查隐藏元素 )。
动态文字 Live_Contributor 它是在onFetch上添加的,用于计算变量contributor_param ,未在报告中显示。
图表 Live_Workitem_Cnt 显示在报告中。 以下是详细设置:

选择聊天类型:
  • 选择子类型: 堆积条形图
  • 输出格式: PNG (如果SVG在浏览器视图中无法正常工作。)
(X)类类别: 行[“ CONTRIBUTOR_NAME”]
  • 数据排序: 升序
  • 排序依据第[“ CONTRIBUTOR_NAME”行
  • 启用分组: 取消选中
值(Y)系列: 第[“ WI_COUNT”]行
  • 聚合表达式:
可选的Y系列分组: 行[“ PROJECT_AREA_NAME”]
  • 数据排序: 降序
  • Sort On: row["PROJECT_AREA_NAME"]
  • Grouping Enabled: checked
  • Type: Text
  • Unit: String
  • Interval: 1
Chart Title: The number of finished work items.
Live_Workitem_Cnt_list 可选的。 Use it if lists of work items need to be reviewed.
Figure 10. Layout of Finished Work Items report by developer
dynamic texts, bar chart, a text, a table of BIRT

To create the Figure 6 bar chart report, Table 13 shows parameters to report how many work items are approved in iterations.

Table 13. Parameters set at Live_Workitem_Cnt
名称 Data Type 表达
APPROVAL_STATE "com.ibm.team.workitem.approvalState.approved"
APPROVAL_APPROVER_ITEMID Set from contributor_param . (Listing 18)

Report items by replacing Live_Workitem_Cnt (Chart) at Table 12 with Live_Workitem_Cnt (Table 14) are used for layout of a report.

Table 14. Report items at layout
Report items Bound table 表达
图表 Live_Workitem_Cnt Shown in report. Settings other than described here are the same as Table 12.

Category (X) Series:
  • row["APPROVAL_APPROVER_NAME"]

摘要

This article explained how to create reports to show developers and managers necessary information in Rational Team Concert by using BIRT. The article explained what information needs to be reported for each role, with use cases. It also explained how to implement them, step by step. By using these reports, each stakeholder can act to keep projects healthy.

致谢

The author thanks Masaki Wakao for technical advice.


翻译自: https://www.ibm.com/developerworks/rational/library/customized-reports-rational-team-concert/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值