ibm敏捷战略框架
IBM Business Process Manager提供了几种报告选项:即开即用的记分卡,定制报告和第三方工具中生成的报告。 开箱即用的报告使您能够分析个人绩效,团队绩效,业务流程绩效和违反SLA的行为。 自定义报告使您能够分析特定于流程的业务数据。 您可以定义变量以跟踪和创建自定义报告,以在Process Designer中查询跟踪的数据。 用户可以在Process Portal中查看结果报告。
在本文中,您将学习如何在Coach报告框架中使用TWList模式创建自定义报告,这些自定义报告可查询应用程序数据以进行报告。 我们将逐步介绍创建两个报表的过程,这些报表具有使用自定义工具包配置的向上钻取和向下钻取选项。
在我们的示例中,我们将不使用跟踪事件或自动跟踪功能来捕获数据以进行报告。 相反,我们将查询现有的自定义应用程序数据库,该数据库用于持久存储应用程序数据,而不是性能数据仓库数据库(PDWDB)。 此方法通过消除对PDWDB数据库的附加数据库操作(DB INSERT)来提高性能。 在业务流程跨越企业中逻辑连接的多个产品或集成框架的情况下,使用这种方法是有利的。 您可以维护中央数据库并基于该中央数据库构建报告,而不是在BW专用的PDWDB中跟踪所需的数据。
我们将使用以下各节中描述的场景来演示这一点。
示例场景
在这种情况下,我们将创建一个报告,用于计算组织在特定年份中某个特定部门的员工的平均工资。
出于说明目的,创建了人工服务,以演示如何使用TWList模式在两个教练( 年薪报告和按部门和职级的年收入)中开发自定义报告,如图1所示。此处使用的集成服务有助于数据显示在教练报告中。
图1.人员服务图
我们将使用Coach报告框架工具包的TWList模式来构建报告。 为了使用所提供的数据对象以及其他构造和元素,从BPM Wiki导入TW列表模式工具箱后,需要在Process App和工具箱之间创建依赖项。
该工具包包含以下内容:
- 数据
-
lswR2ChartData
-
lswDrillDown
-
lswTestObject
-
lswTestObject2
-
lswTimeTrend
-
- 图表布局类型
- 酒吧
- 组合
- 馅饼
- 报告
-
ReportFromTWList
-
- 数据转换
- 工具包中提供的对象数据转换将被使用。
我们将使用DataObject lswR2ChartData
指定在报表中映射的数据,并使用DataObject lswDrillDown
从顶层报表深入到详细的报表。 我们还将使用Coach工具箱中的ReportFromTWList
报告。
报表生成基本上包括两个步骤:
- 生成要在报告中显示的数据。
- 将报告嵌入教练中。
在以下各节中,我们将通过开发两个报告来证明这一点。
创建年薪报告
如图1所示 ,可以开发集成服务以lswChartData
类型列表的形式填充数据。 “获取年薪”服务从持久性媒体(在本例中为应用程序数据库)检索所需的数据(在我们的示例中为选定年份中每个部门的平均薪水),并构造lswChartData
对象的列表。 图2描述了Get Annual Salary集成服务以及所使用SQL查询。 变量tw.local.results
的类型为lswChartData
list。
图2.获取年薪集成服务
检查lswChartData
对象以找到三个参数Series(String)
, label(String)
和Value(Decimal)
。 该数据是在年薪报告用于显示基于的过滤器值报告2009
, 2010
, 2011
或2012
。
要将报告嵌入“年薪报告”教练中,我们将使用自定义HTML控件,并将以下内容粘贴到自定义HTML的属性的“ 演示”选项卡中。 为此,请完成以下步骤:
- 使用工具包创建报表ReportFromTWList的实例,如下所示:
<# var report = TWReport.getByName('ReportFromTWList'); #>
- 使用TWlist模式提供的API指定图表类型,如下所示:
<#report.setFilterValue('reportType','3dGroupedBar'); #>
BPM Wiki中提供了可用图表类型的列表。
- 如下所示指定属性,以定义图表的值,标签和系列或尺寸。
<# report.setFilterValue('listVariableName','tw.local.results'); report.setFilterValue('seriesConstant',tw.local.filterSelection); report.setFilterValue('labelProperty','label'); report.setFilterValue('valueProperty','value'); #>
注意,将生成的数据(
tw.local.results
设置为listVariableName
属性。类似地,现在将list变量的属性设置为使用labelProperty
和valueProperty
属性指定label
和value
。在我们的例子,因为我们显示报告(所选年)只有一个系列的价值,我们将设置
seriesConstant
属性而不是seriesProperty
。 - 设置其他属性,例如x轴和y轴标签,高度,宽度,如下所示。
<# report.setFilterValue('chartBottomAxisLabel','Department'); report.setFilterValue('chartLeftAxisLabel','Average Salary'); report.setFilterValue('chartWidth',1000); report.setFilterValue('chartHeight',500); report.setFilterValue('chartColorTable','xff0f00_150,xfff00f_150, x0000ff_150'); #>
- 在“年度年度报告”中,我们将启用向下钻取功能以从部门向下钻取,以便用户可以在所选年份中基于所选部门查看下一级别的详细信息,如下所示。
<# report.setFilterValue('ddButtonId','ButtonGroup2_Button0'); report.setFilterValue('ddSeriesVariableName', 'tw#local#drillDown#series'); report.setFilterValue('ddLabelVariableName', 'tw#local#drillDown#label'); report.setFilterValue('ddDataVariableName', 'tw#local#drillDown#data'); #>
要启用向下钻取功能,您需要将
ddButtomId
设置为隐藏按钮的控件ID(在这种情况下为ButtonGroup2_Button0
)。注意:您需要在Coach上有一个按钮来进行向下钻取并将其可见性设置为
hidden
。当用户单击图中特定部门的条形图时,将单击隐藏的按钮,并根据图中指定的连接在Coach外部导航控件。 在我们的示例中,控件导航到“获取员工薪水”服务。
完成此操作后,需要将年份和所选部门传递给服务,以便为所选年份提取该部门的详细信息。
ddSeriesVariableName
,使用ddSeriesVariableName
,ddLabelVariableName
和ddDataVariableName
在向下钻取对象中设置此值。 - 最后,在Coach中显示报告,如下所示:
<#= report.displayPage('report'); #>
该报告应如图3所示。请注意,列出的不同部门( label
)列出的平均薪水( value
),以2012
为年份( Series
)。
图3.部门的年薪报告
单击图形中的条形图之一时,报表将向下钻取以显示所选部门相对于该部门中不同雇员的职等的年收入。
按部门和年级创建年度收入报告
当用户从“年薪报告”中向下钻取,并将年和部门作为该服务的输入传递时,将启动此报告。
与以前的报告类似,集成服务Get Employee Salary用于生成要在报告中查看的数据,该数据包括不同的职系以及相对于部门和年份的平均工资。 因此, lswChartData
对象列表将以等级作为标签,将平均薪水作为值。 我们还使用提供更多详细信息的表格来扩充报告。 为此,该服务使用一个EmployeeSalaryData
列表,该列表包含所有雇员以及所选部门和年份中的职等和薪水。
图4显示了Get Employee Salary集成服务的详细信息。
图4.获取员工薪水集成服务
如下面SQL结果所示, tw.local.empSal
是用户定义的DataObjects EmployeeSalaryData
的列表,其中包含部门中每个雇员的薪金详细信息以及所选年份的等级。 SQL结果看起来类似于以下清单。
<#
report.setFilterValue('ddButtonId','ButtonGroup2_Button0');
report.setFilterValue('ddSeriesVariableName',
'tw#local#drillDown#series');
report.setFilterValue('ddLabelVariableName',
'tw#local#drillDown#label');
report.setFilterValue('ddDataVariableName',
'tw#local#drillDown#data');
#><object type="EmployeeSalaryData[]">
<arrayElement size="4">
<item type="EmployeeSalaryData">
<property name="empcd" type="String">001</property>
<property name="grade" type="String">B1</property>
<property name="Salary" type="String">1500000</property>
<metadata>
<property name="dirty" type="Boolean">true</property>
<property name="shared" type="Boolean">false</property>
<property name="key" />
<property name="version" />
</metadata>
</item>
<item type="EmployeeSalaryData">
<property name="empcd" type="String">002</property>
<property name="grade" type="String">B2</property>
<property name="Salary" type="String">1700000</property>
<metadata>
<property name="dirty" type="Boolean">true</property>
<property name="shared" type="Boolean">false</property>
<property name="key" />
<property name="version" />
</metadata>
</item>
<item type="EmployeeSalaryData">
<property name="empcd" type="String">003</property>
<property name="grade" type="String">B1</property>
<property name="Salary" type="String">1200560</property>
<metadata>
<property name="dirty" type="Boolean">true</property>
<property name="shared" type="Boolean">false</property>
<property name="key" />
<property name="version" />
</metadata>
</item>
<item type="EmployeeSalaryData">
<property name="empcd" type="String">004</property>
<property name="grade" type="String">C</property>
<property name="Salary" type="String">2200000</property>
<metadata>
<property name="dirty" type="Boolean">true</property>
<property name="shared" type="Boolean">false</property>
<property name="key" />
<property name="version" />
</metadata>
</item>
</arrayElement>
<metadata>
<property name="dirty" type="Boolean">true</property>
<property name="shared" type="Boolean">false</property>
<property name="key" />
<property name="version" />
</metadata>
</object>
服务器脚本“ Split Lists
负责提供图表lswChartData
列表所需的数据,因为现在需要两个列表:一个用于报表,另一个用于表格。
要将报告嵌入“按部门划分的年收入”和“成绩报告指导”中,我们将使用自定义HTML控件,如下所示:
- 使用工具包创建报表ReportFromTWList的实例,如下所示:
<# var report = TWReport.getByName('ReportFromTWList'); #>
- 使用工具箱提供的API,如下所示设置所需的图表类型:
<# report.setFilterValue('reportType','groupedBar’);#>
- 指定如下所示的属性,以定义图表的值,标签和系列或尺寸:
<# report.setFilterValue ('listVariableName','tw.local.results'); report.setFilterValue ('seriesProperty','label'); report.setFilterValue ('labelProperty','label'); report.setFilterValue ('valueProperty','value'); #>
请注意,所生成的数据被设置为
listVariableName
属性(tw.local.results
类型的lswChartData
)同样,现在可以使用
seriesProperty
,labelProperty
和valueProperty
属性将list变量的属性设置为指定系列,标签和值的值。 - 设置其他属性,例如x轴和y轴标签,高度,宽度等,如以下清单所示:
<# report.setFilterValue ('chartBottomAxisLabel','Employee Grade'); report.setFilterValue ('chartLeftAxisLabel','Income'); report.setFilterValue ('chartWidth',600); report.setFilterValue ('chartHeight',300); report.setFilterValue ('chartColorTable','x00ff00_150'); #>
- 最后,在Coach中显示报告,如下所示:
<#= report.displayPage ('report'); #>
- 在此报告中,我们需要显示一个表格,以表格形式提供有关员工,其职等和收入的特定详细信息,以作为图表的参考。 要显示此内容,请将用户定义的DataObject
EmployeeSalaryData
的变量tw.local.empSal
从面板拖到Coach上。 自动创建重复表。 确保在表格的“ 属性”视图中未选中“ 选择控件”复选框。
图5显示了2012年财务与运营部门的报告。
图5.财务和运营部门的2012年薪酬报告
我们在报告图表中添加了一个表格,该表格列出了所需部门中员工的详细信息。
此外,我们通过在Coach中引入一个按钮来提供向上钻取功能,该按钮导航到“获取薪资服务”以检索给定过滤器的每个部门在该年的年收入。 展开时,将显示先前的报告。
结论
本文介绍了创建自定义报告的另一种方法。 它说明了如何独立于Performance Data Warehouse数据库和BPM中提供的跟踪功能而生成报告。 由于报告是通过这种方法嵌入到教练中的,因此在提供报告数据,用户界面,其他过滤条件以及访问报告的方式方面,您将获得更大的灵活性。 例如,我们在本文中构建的服务可以像其他人员服务一样,在角色或特定人员集中的仪表板中公开。
翻译自: https://www.ibm.com/developerworks/bpm/bpmjournal/1212_venugopal/1212_venugopal.html
ibm敏捷战略框架