CN103995899A - 一种kpi的分析系统 - Google Patents
一种kpi的分析系统 Download PDFInfo
- Publication number
- CN103995899A CN103995899A CN201410251993.XA CN201410251993A CN103995899A CN 103995899 A CN103995899 A CN 103995899A CN 201410251993 A CN201410251993 A CN 201410251993A CN 103995899 A CN103995899 A CN 103995899A
- Authority
- CN
- China
- Prior art keywords
- index
- kpi
- data
- grouping
- string
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/248—Presentation of query results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/06—Resources, workflows, human or project management; Enterprise or organisation planning; Enterprise or organisation modelling
- G06Q10/063—Operations research, analysis or management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Business, Economics & Management (AREA)
- Physics & Mathematics (AREA)
- Human Resources & Organizations (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Economics (AREA)
- Entrepreneurship & Innovation (AREA)
- Databases & Information Systems (AREA)
- Strategic Management (AREA)
- Data Mining & Analysis (AREA)
- Educational Administration (AREA)
- Tourism & Hospitality (AREA)
- General Business, Economics & Management (AREA)
- Quality & Reliability (AREA)
- Operations Research (AREA)
- Computational Linguistics (AREA)
- Marketing (AREA)
- Game Theory and Decision Science (AREA)
- Development Economics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种KPI的分析系统,属于计算机应用领域。该系统包括:一)KPI配置:用于维护指标分组、指标体系、指标取数来源、归集周期、方式、条件、公式,并进行指标数据的初始化;二)KPI计算:在业务处理时,用于根据配置调用KPI计算组件,对业务单据数据进行实时或异步处理,以计算基础指标及影响的复合指标,并把结果更新到指标库;三)KPI查询分析:用于根据用户设置,将指标数据按照不同维度、周期以图表的方式进行分析展现。与现有技术相比,本发明的KPI的分析系统能够快速有效的采集KPI数据,并基于此KPI数据进行动态分析,具有很好的推广应用价值。
Description
技术领域
本发明涉及计算机应用领域,具体地说是一种实现从信息系统提取KPI数据,并对KPI数据进行分析KPI的分析系统。
背景技术
企业里部署了大量的信息系统,如财务、HR、资产、供应链等,这些系统产生了数量上和种类上都非常庞大的数据,而对这些数据进行加工,生成KPI数据,为企业决策层及管理层提供决策支持,则是信息系统最重要的一环。
现有的KPI分析方法,大部分是通过查询或者报表平台实现,他们存在以下几点局限性:
1. 性能低下,在KPI分析的时候才对庞大的业务数据进行汇总加工,并且计算结果不能复用;
2. 灵活性差,需要根据用户的应用场景和需求定制大量的查询或报表。
发明内容
本发明的技术任务是针对上述现有技术的不足,提供一种能够快速有效的采集KPI数据,并基于此KPI数据进行动态分析的KPI的分析系统。
本发明的技术任务是按以下方式实现的:一种KPI的分析系统,包括以下内容:
一)KPI配置
用于维护指标分组(物理存储)、指标体系(逻辑分类)、指标取数来源、归集周期、方式、条件、公式,并进行指标数据的初始化;
二)KPI计算
在业务处理时,用于根据配置调用KPI计算组件,对业务单据数据进行实时或异步处理,以计算基础指标及影响的复合指标,并把结果更新到指标库;
三)KPI查询分析
用于根据用户设置,将指标数据按照不同维度、周期以图表的方式进行分析展现。
所述KPI配置包括:
1)定义指标分组
按照指标归集的主体、周期、相关度进行分组定义,确定指标库的数据存储结构,并设置其取数来源,如设备月度指标,其归集主体是设备(ID)、归集周期是月,其指标可以包括设备完好率、时间利用率、产品合格率、OEE、MTBF、MTBR等;
2)定义某指标分组下的指标
所述指标包括指标编号、名称、取数方式、精度、默认值、更新方式、复合公式、汇总公式及数据源、取数条件、取数公式等;
3)按照不同的口径,分级定义指标分类,指定该分类下包含的指标,如可以按照业务主题域、平衡计分卡角度对指标进行逻辑划分。
进一步的,定义指标分组时,
a)把指标进行动态物理分组管理,一个分组对应一个数据表,一个指标对应该表的一列,可根据用户需求动态设置,有效降低数据冗余,提高指标查询分析效率;
b)所述指标归集主体使用模型进行描述,以表明该主体的属性,以便进行多维度指标分析,如设备,其属性包括所属单位、使用单位、分类、功能位置、状态等;
c)一个分组包括至少一个归集主体,比如设备的往来费用指标组,归集主体就是设备和往来单位,以记录该设备对应往来单位的各项费用和收入指标,如租金收入、租金支出、维修费用等;
d)所述取数来源来源于系统中实现的业务实体,使用平台的业务模型进行描述;
e)分组保存时,对各取数来源对本分组影响的指标进行分析,确定计算顺序等信息,提高指标计算时效率。
定义某指标分组下的指标时,
a)指标归集公式支持初始化、日常归集选项;
b)指标支持累加更新、覆盖更新两种方式;
c)指标取数方式包括日常归集、手工输入、临时归集(查询时);
d)指标设置汇总公式,以满足比率指标等按照维度汇总时的计算。
分级定义指标分类,指定该分类下包含的指标时,支持根据不同的分类口径对指标进行分类,同一指标可以属于不同的逻辑分类,便于指标的分析查询。
所述KPI计算包括:
1)系统业务处理时,通过配置调用KPI计算单元;
2)若配置为实时归集,则KPI计算单元根据当前业务实体数据,检索该业务实体影响的指标分组及指标集,并根据预分析的计算顺序等信息进行计算并存储;
3)若配置为异步归集,则KPI计算单元把相关业务信息记录到异步处理队列,由平台任务调度单远根据配置进行异步处理并存储结果;
4)KPI分析时,若分析的指标中包含临时归集指标时,调用KPI计算单元进行计算。
所述KPI查询分析包括:
1)按照指标逻辑分类、周期、归集主体、归集主体的属性,对指标数据进行动态查询分析;
2)供分析的指标数据包括初始化和日常业务归集道指标库的数据,以及调用KPI计算单元临时归集的数据,如从异构系统读取的动态数据;
3)设置纵向、横向统计依据,并据此对指标数据进行汇总分析,查询方案保存并供下次使用;
4)分析结果以表格或图形(柱状图、折线图、饼状图等)的形式展现给用户。
本发明的KPI的分析系统与现有技术相比具有以下突出的有益效果:
1、 与业务系统松耦合:业务系统的业务实体以公司开发平台标准的元数据模型描述,在不同客户实施时,可以根据客户的需求,使用KPI配置单元进行配置就可以实现KPI数据的归集和分析,而业务系统不需要进行修改。
2、 提高指标计算和分析的性能:其一,指标数据根据分组设置,以动态表和列的方式存放,每个存储单元的数据量可以控制到合理范围;其二,对不同的业务数据,可配置不同的指标归集策略,如高频率的业务采取异步归集,中低频率的采取实时归集,不常变化的数据量少的采取分析时归集;其三,大量的指标数据在日常业务中进行了归集,在指标分析中就不再重复计算,节省了宝贵的计算资源。
3、 较高的灵活性:指标物理数据虽然只存储一份,而指标逻辑上可以属于不同分类,这样可以按照不同的指标体系进行查询分析;指标数据按照客户关注的最低粒度(归集主体、周期)归集,而分析时,可以按照指标归集主体及其属性、上级周期进行汇总分析。
4、 数据高效存储,如上所述,我们可以把指标分组存放到列上,这样可以有效减少数据冗余。
附图说明
附图1是本发明KPI的分析系统的功能框图;
附图2是本发明系统KPI配置流程图;
附图3是本发明系统KPI计算流程图;
附图4是本发明系统KPI分析流程图;
附图5是基于本发明实现的一个典型KPI分组结构。
具体实施方式
参照说明书附图以具体实施例对本发明的KPI的分析系统作以下详细地说明。
实施例:
如附图1所示,本发明实现的KPI分析系统包括三大块:1)KPI配置单元,是用来对KPI分析系统进行数据建模的,描述了KPI数据的物理存储结构、逻辑结构、取数来源、方式、归集主体、周期、公式等,并KPI数据进行初始化,这部分是整个KPI分析系统的基础;2)KPI计算单元,是一组服务端组件及接口,实现从业务系统归集指标数据;3)KPI分析单元,是客户对KPI数据进行查询分析的一套工具,包括查询方案的设置及选择、服务端KPI查询分析组件、客户端图表展现组件。
附图2列示了实施人员根据本发明进行KPI配置的一个典型步骤:首先分析用户决策支持需求,根据用户业务系统应用情况,对KPI进行整体规划;对外部业务系统的归集主体和取数来源的元数据模型进行配置;配置指标分组,并设置其归集主体、周期、一个或多个取数来源;定义指标分组包含的指标,设置其归集策略、针对不同取数来源的公式、取数条件等,并对KPI公式进行预分析,保存业务信息对指标的影响范围及计算顺序;根据指标分组配置创建指标物理存储结构;设置指标逻辑分类体系。
附图3列示了在日常业务处理时,指标归集的处理流程:首先,业务单据更改(增、删、改)或审核(取消审核)通过后,根据配置调用公共指标归集接口,并传递业务实体数据;指标归集接口(KPI计算单元),根据KPI配置信息,检查当前业务是否影响指标数据,若否则直接返回;检查是否异步归集,若是把业务信息记入KPI异步归集队列,由任务调度平台根据配置的时点进行调度计算;若非异步归集,则根据预分析的指标计算顺序进行计算;把计算结果按照配置累加或覆盖到指标数据供分析;如果是异步归集则计算完成后,更新异步归集完成标志。
附图4列示了指标分析的业务流程:首先选择或直接使用默认查询方案,显示相应的分析索引界面;其次,选择指标分类、分组、周期类型及范围等分析条件;然后,根据指标分类、分组条件,显示并设置指标分析动态条件(归集主体及其属性,如设备的类别、状态等)、汇总依据、分析的指标范围;然后调用服务端指标分析组件,对指标数据进行加工处理;最终把指标分析结果返回给客户端以图表的方式展现。可见,查询分析主要是针对日常归集的指标数据,具有良好的性能。
附图5列示了根据本发明实现的一个典型的设备管理产品的KPI分组结构:按照归集主体、周期(在此都是按月度),把设备管理指标分为设备指标、设备往来指标、设备维修指标;设备指标以设备为归集主体,按月归集、存储设备本身的指标数据,如完好率、利用率等;设备往来指标,以设备、往来单位为归集主体,按月归集存储设备与外部单位之间发生的业务指标数据,如与往来单位的租赁收入及费用、调入调出的原值及净值、捐赠及抵押的原值及净值等;设备维修指标,以设备、维修组织、往来单位为归集主体,按月归集设备维修方面的指标,用来考核或指导维修组织的工作,并分析外部维修单位的费用往来,指标包括人工费、材料费、检查费用、保养费用、润滑费用等。通过本发明的KPI分析方法,可以描述绝大多数系统KPI的分组结构,并且具有良好的灵活性和性能。
下边详细描述下实施本发明的技术方案:
1、 指标分析元数据模型设计:
1) 指标,用来抽取指标的属性信息,是整个KPI分析的基础。
。2) 指标分类,定义指标的分类的信息:
指标分类明细,定义某个指标分类下所有的指标分组及指标。
。 3) 指标分组,其结构如下:
4) 指标分组数据源,存储指标分组对应的取数来源。其结构如下:
5) 指标归集主体。其结构如下:
6) 指标归集主体。其结构如下:
7) 归集主体关系,定义归集主体间的关联关系。其结构如下:
8) 指标分组归集主体,指标分组所对应的归集主体,具有多对多的关系。
。9) 归集主体列映射,将数据来源的取数列与归集主体关联起来。
。 10) 指标取数来源,将数据来源的取数列与归集主体关联起来。
2、 KPI数据进行初始化。主要是指根据实际需求预置要分析的指标,并将指标与相应的数据来源关联起来,是指标数据归集和分析的基础。
3、 数据归集接口的设计:
1) 抽象类:AMKPIBaseManager,作为指标数据归集公共单据数据处理基类,是单据保存或审批通过归集数据的接口。
/// <summary>
/// 指标数据归集公共单据数据处理基类
/// </summary>
public abstract class AMKPIBaseManager
{
/// <summary>
/// 业务实体编号
/// </summary>
private string bizCode = string.Empty;
/// <summary>
/// 业务实体编号列表
/// </summary>
private List<string> bizCodeList;
/// <summary>
/// 指标归集主体
/// </summary>
private static Dictionary<string, DataRow> amKPIEntityDict = new Dictionary<string, DataRow>();
/// <summary>
/// 业务对象关系
/// </summary>
private static Dictionary<string, Dictionary<string, DataRow>> amBizObjRelationDict = new Dictionary<string, Dictionary<string, DataRow>>();
/// <summary>
/// 业务实体编号
/// </summary>
public string BizCode
{
get { return bizCode; }
set { bizCode = value; }
}
/// <summary>
/// 业务实体编号列表
/// </summary>
public List<string> BizCodeList
{
get { return bizCodeList; }
set { bizCodeList = value; }
}
/// <summary>
/// 指标归集主体
/// </summary>
public Dictionary<string, DataRow> AMKPIEntityDict
{
get { return amKPIEntityDict; }
set { amKPIEntityDict = value; }
}
/// <summary>
/// 业务对象关系
/// </summary>
protected Dictionary<string, Dictionary<string, DataRow>> AMBizObjRelationDict
{
get { return amBizObjRelationDict; }
set { amBizObjRelationDict = value; }
}
/// <summary>
/// 初始化指标归集实例
/// </summary>
/// <param name="bizCode"></param>
private void InitAMKPIManager(string bizCode)
{
this.bizCode = bizCode;
this.bizCodeList = new List<string>();
this.bizCodeList.Add(bizCode);
if (string.Compare(bizCode, "AMCARD", true) == 0)
{
this.bizCodeList.Add("AMHisCard");
}
if (amKPIEntityDict.Count == 0)
{
this.InitAMKPIEntity();
}
}
/// <summary>
/// 从表关系中获取表名
/// </summary>
/// <param name="bizCode">业务实体编号</param>
/// <param name="propGroupID">属性组ID</param>
/// <returns></returns>
public string GetTabNameFromRelationDict(string bizCode, string propGroupID)
{
string tabName = string.Empty;
if (amBizObjRelationDict.ContainsKey(bizCode))
{
foreach (KeyValuePair<string, DataRow> amTabRelation in amBizObjRelationDict[bizCode])
{
if (propGroupID == amTabRelation.Value["ChildPropGroupID"].ToString())
{
tabName = amTabRelation.Key;
break;
}
}
}
return tabName;
}
/// <summary>
/// 初始化(重新获取)指标归集主体
/// </summary>
protected void InitAMKPIEntity()
{
AMKPIManagerCore amKPIManagerCore = new AMKPIManagerCore();
DataTable amKPIEntity = amKPIManagerCore.GetAMKPIEntity(null);
amKPIEntityDict.Clear();
foreach (DataRow dr in amKPIEntity.Rows)
{
if (!amKPIEntityDict.ContainsKey(dr["EntityCode"].ToString()))
{
amKPIEntityDict.Add(dr["EntityCode"].ToString(), dr);
}
}
}
/// <summary>
/// 用来创建合适的日志处理管理类
/// </summary>
/// <param name="bizCode">资产活动编号</param>
/// <returns></returns>
public static AMKPIBaseManager GetManagerByBizCode(string bizCode)
{
AMKPIBaseManager baseManager = null;
switch (bizCode.ToUpper())
{
////资产卡片维护的日志处理---本身就是资产卡片不用映射
//case "AMCARD":
// baseManager = new AMKPICommBizBillManager();
// break;
//资产运行记录单据的指标处理-------主从从表结构处理
case "AMYXJL":
baseManager = new AMKPIYXJLManager();
break;
//资产租赁收付款单据指标处理-----根据单据类型变换指标归集主体
case "AMZCZLSFK":
baseManager = new AMKPIZLSFKManager();
break;
//通用业务单据的指标处理
default:
baseManager = new AMKPICommBizBillManager();
break;
}
baseManager.InitAMKPIManager(bizCode);
return baseManager;
}
/// <summary>
/// 更新指标数据
/// </summary>
/// <param name="bdsBill">表单数据</param>
public abstract void UpdateAMKPIData(BillDataSource bdsBill);
/// <summary>
/// 获取表单上的指标分组时间类型、映射字段名称及类型
/// </summary>
/// <param name="returnType">指标分组时间类型</param>
/// <param name="srcColumnType">指标分组时间映射字段名称</param>
/// <param name="srcColumnName">指标分组时间映射字段类型</param>
/// <param name="bdsBill">表单字段</param>
/// <param name="amKPIGroupEx">指标分组</param>
/// <param name="amKPIGroupDataSrc">指标分组数据源</param>
protected void GetAMKPIPeriodGroupValeType(out AMKPIPeriod returnType, out AMKPIPeriod srcColumnType,
out string srcColumnName, BillDataSource bdsBill, DataRow amKPIGroupEx, DataRow amKPIGroupDataSrc)
{
if (amKPIGroupEx["KPIGroupCycle"].ToString() == ((int)AMKPIPeriod.Year).ToString())
{
returnType = AMKPIPeriod.Year;
if (!string.IsNullOrEmpty(amKPIGroupDataSrc["YearCol"].ToString()))
{
srcColumnType = AMKPIPeriod.Year;
srcColumnName = amKPIGroupDataSrc["YearCol"].ToString();
}
else if (!string.IsNullOrEmpty(amKPIGroupDataSrc["MonthCol"].ToString()))
{
srcColumnType = AMKPIPeriod.Month;
srcColumnName = amKPIGroupDataSrc["MonthCol"].ToString();
}
else if (!string.IsNullOrEmpty(amKPIGroupDataSrc["DateCol"].ToString()))
{
srcColumnType = AMKPIPeriod.Day;
srcColumnName = amKPIGroupDataSrc["DateCol"].ToString();
}
else
{
throw new GSPException(
string.Format("指标分组[{0}][{1}]中指标分组数据源[{2}]映射错误,缺少时间字段数据映射,请修改!",
amKPIGroupEx["KPIGroupCode"], amKPIGroupEx["KPIGroupName"], bdsBill.BizObject.Code),
ErrorLevel.Warning);
}
}
else if (amKPIGroupEx["KPIGroupCycle"].ToString() == ((int)AMKPIPeriod.Month).ToString())
{
returnType = AMKPIPeriod.Month;
if (!string.IsNullOrEmpty(amKPIGroupDataSrc["MonthCol"].ToString()))
{
srcColumnType = AMKPIPeriod.Month;
srcColumnName = amKPIGroupDataSrc["MonthCol"].ToString();
}
else if (!string.IsNullOrEmpty(amKPIGroupDataSrc["DateCol"].ToString()))
{
srcColumnType = AMKPIPeriod.Day;
srcColumnName = amKPIGroupDataSrc["DateCol"].ToString();
}
else
{
throw new GSPException(
string.Format("指标分组[{0}][{1}]中指标分组数据源[{2}]映射错误,缺少时间字段数据映射,请修改!",
amKPIGroupEx["KPIGroupCode"], amKPIGroupEx["KPIGroupName"], bdsBill.BizObject.Code),
ErrorLevel.Warning);
}
}
else
{
returnType = AMKPIPeriod.Day;
if (!string.IsNullOrEmpty(amKPIGroupDataSrc["DateCol"].ToString()))
{
srcColumnType = AMKPIPeriod.Day;
srcColumnName = amKPIGroupDataSrc["DateCol"].ToString();
}
else
{
throw new GSPException(
string.Format("指标分组[{0}][{1}]中指标分组数据源[{2}]映射错误,缺少时间字段数据映射,请修改!",
amKPIGroupEx["KPIGroupCode"], amKPIGroupEx["KPIGroupName"], bdsBill.BizObject.Code),
ErrorLevel.Warning);
}
}
}
/// <summary>
/// 获取指标分组时间归集主体数据
/// </summary>
/// <param name="returnType">时间归集主体类型</param>
/// <param name="srcColumnType">归集主体映射字段类型</param>
/// <param name="srcColumnName">归集主体映射字段名称</param>
/// <param name="selectRow">分录数据</param>
/// <param name="bdsBill">表单数据</param>
/// <param name="amKPIGroupEx">指标分组</param>
/// <param name="amBillExInfoDict">资产数据</param>
/// <param name="amKPIGroupEntityData">指标分组归集主体</param>
protected void GetBillChildKPIPeriodGroupVale(AMKPIPeriod returnType, AMKPIPeriod srcColumnType, string srcColumnName,
DataRow selectRow, BillDataSource bdsBill, DataRow amKPIGroupEx,
Dictionary<string, Dictionary<string, Dictionary<string, string>>> amBillExInfoDict,
Dictionary<string, string> amKPIGroupEntityData)
{
List<string> expItems = this.GetAMKPIExpItems(srcColumnName);
string tableName = expItems[0].Replace("[", "").Replace("]", "");
string columnName = expItems[2].Replace("[", "").Replace("]", "");
DataRow srcRow = null;
if (string.Compare(tableName, selectRow.Table.TableName, true) == 0)
{
srcRow = selectRow;
}
else if (string.Compare(tableName, bdsBill.MainData.TableName, true) == 0)
{
srcRow = bdsBill.MainData.Rows[0];
}
else
{
throw new GSPException(
string.Format("指标分组[{0}][{1}]中指标分组数据源[{2}][YearCol]字段映射错误,两分录数据表字段不能做分组,请修改!",
amKPIGroupEx["KPIGroupCode"], amKPIGroupEx["KPIGroupName"], bdsBill.BizObject.Code),
ErrorLevel.Warning);
}
if (expItems.Count == 3)
{
this.GetAMKPIPeriodGroupVale(returnType, srcColumnType, srcRow[columnName].ToString(),
amKPIGroupEntityData);
}
else if (expItems.Count > 5 && expItems[3] == "=" && expItems[4] == ">")
{
string billRefColValue = srcRow[columnName].ToString();
string refBizCode = expItems[5].Replace("[", "").Replace("]", "");
string refTabName = expItems[7].Replace("[", "").Replace("]", "");
string refColName = expItems[9].Replace("[", "").Replace("]", "");
string billRefValue = GetRefBillExInfoValue(billRefColValue, refTabName, refColName, amKPIGroupEx,
bdsBill.BizObject.Code, refBizCode, amBillExInfoDict);
this.GetAMKPIPeriodGroupVale(returnType, srcColumnType, billRefValue,
amKPIGroupEntityData);
}
else
{
throw new GSPException(
string.Format("指标分组[{0}][{1}]中指标分组数据源[{2}]时间字段表达式错误,请修改!",
amKPIGroupEx["KPIGroupCode"], amKPIGroupEx["KPIGroupName"], bdsBill.BizObject.Code),
ErrorLevel.Warning);
}
}
/// <summary>
/// 获取表单数据映射的业务实体数据
/// </summary>
/// <param name="billRefColValue">表单数据映射值</param>
/// <param name="billRefTabName">映射的业务实体表</param>
/// <param name="billRefColName">映射的业务实体字段</param>
/// <param name="amKPIGroupEx">指标分组</param>
/// <param name="billBizCode">表单业务实体编号</param>
/// <param name="billRefBizCode">映射的业务实体编号</param>
/// <param name="amBillExInfoDict">表单映射数据集合</param>
/// <returns></returns>
protected string GetRefBillExInfoValue(string billRefColValue, string billRefTabName, string billRefColName,
DataRow amKPIGroupEx, string billBizCode, string billRefBizCode,
Dictionary<string, Dictionary<string, Dictionary<string, string>>> amBillExInfoDict)
{
string returnValue = string.Empty;
if (amBillExInfoDict.ContainsKey(billRefTabName))
{
//映射的主键
if (amBillExInfoDict[billRefTabName].ContainsKey(billRefColValue))
{
if (amBillExInfoDict[billRefTabName][billRefColValue].ContainsKey(billRefColName))
{
returnValue = amBillExInfoDict[billRefTabName][billRefColValue][billRefColName];
}
else
{
throw new GSPException(
string.Format("指标分组[{0}][{1}]中指标分组数据源[{2}]映射业务实体{3}错误,不存在表字段[{4}][{5}],请修改!",
amKPIGroupEx["KPIGroupCode"], amKPIGroupEx["KPIGroupName"], billBizCode, billRefBizCode,
billRefTabName, billRefColName), ErrorLevel.Warning);
}
}
//映射的外键
else
{
foreach (KeyValuePair<string, Dictionary<string, string>> amBillExRecInfo in amBillExInfoDict[billRefTabName])
{
if (amBillExRecInfo.Value["ForeignKey"] == billRefColValue)
{
returnValue = amBillExRecInfo.Value[billRefColName];
break;
}
}
}
}
else
{
throw new GSPException(
string.Format("指标分组[{0}][{1}]中指标分组数据源[{2}]映射业务实体{3}错误,不存在表[{4}],请修改!",
amKPIGroupEx["KPIGroupCode"], amKPIGroupEx["KPIGroupName"], billBizCode, billRefBizCode,
billRefTabName), ErrorLevel.Warning);
}
return returnValue;
}
/// <summary>
/// 获取指标分组的时间分组
/// </summary>
/// <param name="returnType">指标分组时间类型</param>
/// <param name="srcColumnType">数据字段的时间类型</param>
/// <param name="columnValue">数据</param>
/// <param name="amKPIGroupEntityData">指标分组数据</param>
protected void GetAMKPIPeriodGroupVale(AMKPIPeriod returnType, AMKPIPeriod srcColumnType, string columnValue,
Dictionary<string, string> amKPIGroupEntityData)
{
if (returnType == srcColumnType)
{
if (returnType == AMKPIPeriod.Year)
{
amKPIGroupEntityData.Add(AMKPIPeriod.Year.ToString(), columnValue);
}
else if (returnType == AMKPIPeriod.Month)
{
string[] periodValue = columnValue.Split('-');
amKPIGroupEntityData.Add(AMKPIPeriod.Year.ToString(), periodValue[0]);
amKPIGroupEntityData.Add(AMKPIPeriod.Month.ToString(), periodValue[2]);
}
else if (returnType == AMKPIPeriod.Month)
{
DateTime periodValue = DateTime.Parse(columnValue);
amKPIGroupEntityData.Add(AMKPIPeriod.Year.ToString(), periodValue.Year.ToString());
amKPIGroupEntityData.Add(AMKPIPeriod.Month.ToString(), periodValue.Month.ToString().PadLeft(2, '0'));
amKPIGroupEntityData.Add(AMKPIPeriod.Day.ToString(), periodValue.Day.ToString().PadLeft(2, '0'));
}
}
else if (returnType == AMKPIPeriod.Year)
{
if (srcColumnType == AMKPIPeriod.Month)
{
string[] periodValue = columnValue.Split('-');
amKPIGroupEntityData.Add(AMKPIPeriod.Year.ToString(), periodValue[0]);
}
else if (srcColumnType == AMKPIPeriod.Day)
{
DateTime periodValue = DateTime.Parse(columnValue);
amKPIGroupEntityData.Add(AMKPIPeriod.Year.ToString(), periodValue.Year.ToString());
}
}
else if (returnType == AMKPIPeriod.Month)
{
if (srcColumnType == AMKPIPeriod.Day)
{
DateTime periodValue = DateTime.Parse(columnValue);
amKPIGroupEntityData.Add(AMKPIPeriod.Year.ToString(), periodValue.Year.ToString());
amKPIGroupEntityData.Add(AMKPIPeriod.Month.ToString(), periodValue.Month.ToString().PadLeft(2, '0'));
}
}
}
/// <summary>
/// 获取字典字符串
/// </summary>
/// <param name="dictionary">字典</param>
/// <returns></returns>
protected string GetDictionaryString(Dictionary<string, string> dictionary)
{
StringBuilder dictString = new StringBuilder(1000);
Dictionary<string, string> dictOrderCopy = dictionary.OrderBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value);
foreach (KeyValuePair<string, string> itemValue in dictOrderCopy)
{
dictString.AppendFormat("{0}-{1};", itemValue.Key, itemValue.Value);
}
return dictString.ToString();
}
/// <summary>
/// 解析表达式,将表达式按顺序分组
/// </summary>
/// <param name="expString">表达式</param>
/// <returns></returns>
protected List<string> GetAMKPIExpItems(string expString)
{
List<string> expItems = new List<string>();
string expItem = string.Empty;
int count = 0;
foreach (char charItem in expString)
{
//空格不作为表达式的一项
if (charItem == ' ')
{
if (!string.IsNullOrEmpty(expItem))
{
expItems.Add(expItem);
expItem = string.Empty;
}
}
else if (charItem.ToString().IndexOfAny(new char[] { '+', '-', '*', '/', '(', ')', ',', '.', '<', '>', '=' }) >= 0)
{
//符号是字符串中的一部分
if (count != 0)
{
expItem += charItem;
continue;
}
if (!string.IsNullOrEmpty(expItem))
{
expItems.Add(expItem);
expItem = string.Empty;
}
expItems.Add(charItem.ToString());
}
else if (charItem.ToString().IndexOfAny(new char[] { '#', '', '$', '[', ']' }) >= 0)
{
expItem += charItem;
count++;
if (count == 2)
{
expItems.Add(expItem);
expItem = string.Empty;
count = 0;
}
}
else
{
expItem += charItem;
}
}
if (!string.IsNullOrEmpty(expItem))
{
expItems.Add(expItem);
}
return expItems;
}
}
/// <summary>
/// 指标归集周期
/// </summary>
public enum AMKPIPeriod
{
/// <summary>
/// 年度
/// </summary>
Year =0,
/// <summary>
/// 月份
/// </summary>
Month =1,
/// <summary>
/// 日期
/// </summary>
Day = 2
}
/// <summary>
/// 指标数据类型
/// </summary>
public enum AMKPIDataType
{
/// <summary>
/// 时间
/// </summary>
DateTime = 0,
/// <summary>
/// 比率
/// </summary>
Rate = 1,
/// <summary>
/// 数量
/// </summary>
Number = 2,
/// <summary>
/// 金额
/// </summary>
Money = 3
}
/// <summary>
/// 指标取数方式
/// </summary>
public enum AMKPIGetDataMode
{
/// <summary>
/// 手工录入
/// </summary>
Input = 1,
/// <summary>
/// 实时归集
/// </summary>
EveryTime = 2,
/// <summary>
/// 使用时归集
/// </summary>
Using = 3,
/// <summary>
/// 手工归集
/// </summary>
HandWork = 4,
/// <summary>
/// 手工归集并允许修改
/// </summary>
HandWorkAndUpdate = 5
}
/// <summary>
/// 指标数据更新方式
/// </summary>
public enum AMKPIUpdateDateMode
{
/// <summary>
/// 追加
/// </summary>
Add = 0,
/// <summary>
/// 实时归集
/// </summary>
OverWrite = 1
}
/// <summary>
/// 指标取数触发方式
/// </summary>
public enum AMKPIDataSrcRange
{
/// <summary>
/// 初始化
/// </summary>
Init = 0,
/// <summary>
/// 实时归集
/// </summary>
EveryTime = 1,
/// <summary>
/// 初始化和实时归集
/// </summary>
All = 2
}
/// <summary>
/// 资产指标计算使用栈
/// </summary>
public class AMKPIComputeStack
{
private List<string> expList;
public AMKPIComputeStack()
{
expList = new List<string>();
}
public int ItemsCount
{
get { return expList.Count; }
}
}
2) 实体类主要是对上述抽象类的实现。
4、指标查询分析,主要根据条件对指标数据的查询分析,它依托统一查询平台,是客户对KPI数据进行查询分析的一套工具,包括查询方案的设置及选择、服务端KPI查询分析组件、客户端图表展现组件。
Claims (7)
1.一种KPI的分析系统,其特征在于包括以下内容:
一)KPI配置
用于维护指标分组、指标体系、指标取数来源、归集周期、方式、条件、公式,并进行指标数据的初始化;
二)KPI计算
在业务处理时,用于根据配置调用KPI计算组件,对业务单据数据进行实时或异步处理,以计算基础指标及影响的复合指标,并把结果更新到指标库;
三)KPI查询分析
用于根据用户设置,将指标数据按照不同维度、周期以图表的方式进行分析展现。
2.根据权利要求1所述的KPI的分析系统,其特征在于KPI配置包括:
1)定义指标分组
按照指标归集的主体、周期、相关度进行分组定义,确定指标库的数据存储结构,并设置其取数来源;
2)定义某指标分组下的指标
所述指标包括指标编号、名称、取数方式、精度、默认值、更新方式、复合公式、汇总公式及数据源、取数条件、取数公式;
3)按照不同的口径,分级定义指标分类,指定该分类下包含的指标。
3.根据权利要求2所述的KPI的分析系统,其特征在于定义指标分组时,
a)把指标进行动态物理分组管理,一个分组对应一个数据表,一个指标对应该表的一列;
b)所述指标归集主体使用模型进行描述,以表明该主体的属性;
c)一个分组包括至少一个归集主体;
d)所述取数来源来源于系统中实现的业务实体,使用平台的业务模型进行描述;
e)分组保存时,对各取数来源对本分组影响的指标进行分析,确定计算顺序信息。
4.根据权利要求2所述的KPI的分析系统,其特征在于定义某指标分组下的指标时,
a)指标归集公式支持初始化、日常归集选项;
b)指标支持累加更新、覆盖更新两种方式;
c)指标取数方式包括日常归集、手工输入、临时归集;
d)指标设置汇总公式。
5.根据权利要求2所述的KPI的分析系统,其特征在于分级定义指标分类,指定该分类下包含的指标时,支持根据不同的分类口径对指标进行分类,同一指标可以属于不同的逻辑分类。
6.根据权利要求1所述的KPI的分析系统,其特征在于KPI计算包括:
1)系统业务处理时,通过配置调用KPI计算单元;
2)若配置为实时归集,则KPI计算单元根据当前业务实体数据,检索该业务实体影响的指标分组及指标集,并根据预分析的计算顺序等信息进行计算并存储;
3)若配置为异步归集,则KPI计算单元把相关业务信息记录到异步处理队列,由平台任务调度单远根据配置进行异步处理并存储结果;
4)KPI分析时,若分析的指标中包含临时归集指标时,调用KPI计算单元进行计算。
7.根据权利要求1所述的KPI的分析系统,其特征在于KPI查询分析包括:
1)按照指标逻辑分类、周期、归集主体、归集主体的属性,对指标数据进行动态查询分析;
2)供分析的指标数据包括初始化和日常业务归集道指标库的数据,以及调用KPI计算单元临时归集的数据;
3)设置纵向、横向统计依据,并据此对指标数据进行汇总分析,查询方案保存并供下次使用;
4)分析结果以表格或图形的形式展现给用户。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410251993.XA CN103995899A (zh) | 2014-06-10 | 2014-06-10 | 一种kpi的分析系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410251993.XA CN103995899A (zh) | 2014-06-10 | 2014-06-10 | 一种kpi的分析系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103995899A true CN103995899A (zh) | 2014-08-20 |
Family
ID=51310064
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410251993.XA Pending CN103995899A (zh) | 2014-06-10 | 2014-06-10 | 一种kpi的分析系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103995899A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045576A (zh) * | 2015-06-29 | 2015-11-11 | 用友优普信息技术有限公司 | 业务单据中计算公式的管理方法及装置 |
CN106557507A (zh) * | 2015-09-29 | 2017-04-05 | 镇江雅迅软件有限责任公司 | 一种基于元数据的动态指标库实现办法 |
CN106709652A (zh) * | 2016-12-27 | 2017-05-24 | 中国建设银行股份有限公司 | 一种员工业绩多维度计量系统和方法 |
CN106920027A (zh) * | 2017-01-16 | 2017-07-04 | 华北电力大学 | 一种基于kpi的面向风机制造过程全方位质量考核系统 |
CN108074033A (zh) * | 2017-10-30 | 2018-05-25 | 链家网(北京)科技有限公司 | 指标数据的处理方法、系统、电子设备和存储介质 |
US9985866B1 (en) | 2016-07-23 | 2018-05-29 | Sprint Communications Company L.P. | Task performance with virtual probes in a network function virtualization (NFV) software defined network (SDN) |
CN108108477A (zh) * | 2018-01-04 | 2018-06-01 | 焦点科技股份有限公司 | 一种联动的kpi系统及权限管理系统 |
CN108416042A (zh) * | 2018-03-14 | 2018-08-17 | 贵州电网有限责任公司 | 基于指标库数据源映射实现信息化的数据分析管理系统 |
CN108492012A (zh) * | 2018-03-09 | 2018-09-04 | 广州天维信息技术股份有限公司 | 一种绩效考核指标计算方法和系统 |
CN111324649A (zh) * | 2020-02-13 | 2020-06-23 | 山东浪潮通软信息科技有限公司 | 一种基于异构系统归集内部交易的方法 |
CN111695829A (zh) * | 2020-06-17 | 2020-09-22 | 南京星邺汇捷网络科技有限公司 | 一种指标波动周期计算方法、装置、存储介质及电子设备 |
CN113742036A (zh) * | 2020-05-28 | 2021-12-03 | 阿里巴巴集团控股有限公司 | 指标处理方法、装置及电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101605049A (zh) * | 2008-06-13 | 2009-12-16 | 中国移动通信集团天津有限公司 | 网管数据统计分析指标的处理方法和装置、数据管理系统 |
CN101894316A (zh) * | 2010-06-10 | 2010-11-24 | 焦点科技股份有限公司 | 一种国际市场景气状况的监测指数方法及系统 |
CN102013049A (zh) * | 2010-10-20 | 2011-04-13 | 浪潮集团山东通用软件有限公司 | 基于虚拟组织的kpi指标分析方法及统计分析系统 |
CN102194164A (zh) * | 2011-04-18 | 2011-09-21 | 上海实时数据软件有限公司 | 基于指标体系模型的敏捷商业智能数据构建方法 |
CN102289373A (zh) * | 2011-07-28 | 2011-12-21 | 福建富士通信息软件有限公司 | 一种实现指标评价体系动态配置的方法 |
CN103020280A (zh) * | 2012-12-27 | 2013-04-03 | 北京讯鸟软件有限公司 | 一种通过多维度kpi函数对sql查询语句进行扩充的方法 |
-
2014
- 2014-06-10 CN CN201410251993.XA patent/CN103995899A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101605049A (zh) * | 2008-06-13 | 2009-12-16 | 中国移动通信集团天津有限公司 | 网管数据统计分析指标的处理方法和装置、数据管理系统 |
CN101894316A (zh) * | 2010-06-10 | 2010-11-24 | 焦点科技股份有限公司 | 一种国际市场景气状况的监测指数方法及系统 |
CN102013049A (zh) * | 2010-10-20 | 2011-04-13 | 浪潮集团山东通用软件有限公司 | 基于虚拟组织的kpi指标分析方法及统计分析系统 |
CN102194164A (zh) * | 2011-04-18 | 2011-09-21 | 上海实时数据软件有限公司 | 基于指标体系模型的敏捷商业智能数据构建方法 |
CN102289373A (zh) * | 2011-07-28 | 2011-12-21 | 福建富士通信息软件有限公司 | 一种实现指标评价体系动态配置的方法 |
CN103020280A (zh) * | 2012-12-27 | 2013-04-03 | 北京讯鸟软件有限公司 | 一种通过多维度kpi函数对sql查询语句进行扩充的方法 |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045576A (zh) * | 2015-06-29 | 2015-11-11 | 用友优普信息技术有限公司 | 业务单据中计算公式的管理方法及装置 |
CN106557507A (zh) * | 2015-09-29 | 2017-04-05 | 镇江雅迅软件有限责任公司 | 一种基于元数据的动态指标库实现办法 |
US9985866B1 (en) | 2016-07-23 | 2018-05-29 | Sprint Communications Company L.P. | Task performance with virtual probes in a network function virtualization (NFV) software defined network (SDN) |
CN106709652A (zh) * | 2016-12-27 | 2017-05-24 | 中国建设银行股份有限公司 | 一种员工业绩多维度计量系统和方法 |
CN106920027A (zh) * | 2017-01-16 | 2017-07-04 | 华北电力大学 | 一种基于kpi的面向风机制造过程全方位质量考核系统 |
CN108074033A (zh) * | 2017-10-30 | 2018-05-25 | 链家网(北京)科技有限公司 | 指标数据的处理方法、系统、电子设备和存储介质 |
CN108108477A (zh) * | 2018-01-04 | 2018-06-01 | 焦点科技股份有限公司 | 一种联动的kpi系统及权限管理系统 |
CN108108477B (zh) * | 2018-01-04 | 2019-04-05 | 焦点科技股份有限公司 | 一种联动的kpi系统及权限管理系统 |
CN108492012A (zh) * | 2018-03-09 | 2018-09-04 | 广州天维信息技术股份有限公司 | 一种绩效考核指标计算方法和系统 |
CN108416042A (zh) * | 2018-03-14 | 2018-08-17 | 贵州电网有限责任公司 | 基于指标库数据源映射实现信息化的数据分析管理系统 |
CN108416042B (zh) * | 2018-03-14 | 2021-08-03 | 贵州电网有限责任公司 | 基于指标库数据源映射实现信息化的数据分析管理系统 |
CN111324649A (zh) * | 2020-02-13 | 2020-06-23 | 山东浪潮通软信息科技有限公司 | 一种基于异构系统归集内部交易的方法 |
CN113742036A (zh) * | 2020-05-28 | 2021-12-03 | 阿里巴巴集团控股有限公司 | 指标处理方法、装置及电子设备 |
CN113742036B (zh) * | 2020-05-28 | 2024-01-30 | 阿里巴巴集团控股有限公司 | 指标处理方法、装置及电子设备 |
CN111695829A (zh) * | 2020-06-17 | 2020-09-22 | 南京星邺汇捷网络科技有限公司 | 一种指标波动周期计算方法、装置、存储介质及电子设备 |
CN111695829B (zh) * | 2020-06-17 | 2023-08-29 | 南京星邺汇捷网络科技有限公司 | 一种指标波动周期计算方法、装置、存储介质及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103995899A (zh) | 一种kpi的分析系统 | |
US20180210934A1 (en) | Systems and methods for interest-driven business intelligence systems including event-oriented data | |
CN106055584B (zh) | 管理数据查询 | |
CN102024062B (zh) | 一种实现数据动态缓存处理的装置及方法 | |
US10255307B2 (en) | Database object management for a shared pool of configurable computing resources | |
CN101556666A (zh) | 建立审计模型的方法、装置及审计系统 | |
CN101719119A (zh) | 一种报表管理系统及方法 | |
CN1347529A (zh) | 数据仓库环境下使信息可视化的方法 | |
CN103970902A (zh) | 一种大量数据情况下的可靠即时检索方法及系统 | |
US20190149344A1 (en) | Intelligent search system for service cost and method thereof | |
CN107408114A (zh) | 基于事务访问模式识别联结关系 | |
CN109920506A (zh) | 医疗统计报告生成方法、装置、设备及存储介质 | |
CN108648068A (zh) | 一种信用风险评估方法及系统 | |
CN102819589A (zh) | 一种基于etl的数据优化方法及设备 | |
CN106649226A (zh) | 一种报表生成方法及装置 | |
CN101706926A (zh) | 一种卷烟消费信息调查及处理方法 | |
Singh et al. | Managing attribute-based access control policies in a unified framework using data warehousing and in-memory database | |
CN106383897B (zh) | 数据库容量计算方法和装置 | |
CN107945092A (zh) | 用于审计领域的大数据综合管理方法及系统 | |
CN115552392A (zh) | 执行时间动态范围分区变换 | |
CN106651024A (zh) | 一种电费回收预测模型的构建方法 | |
Lapura et al. | Development of a University Financial Data Warehouse and its Visualization Tool | |
CN105359172A (zh) | 计算企业存在拖欠的概率 | |
CN107908784A (zh) | 一种基于大数据的矿产资源储量动态管理方法及其系统 | |
CN106709029A (zh) | 基于Hadoop和MySQL的文件分层处理方法及处理系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20140820 |