CN103995899A - 一种kpi的分析系统 - Google Patents

一种kpi的分析系统 Download PDF

Info

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
Application number
CN201410251993.XA
Other languages
English (en)
Inventor
李玉成
张安国
王利娜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur General Software Co Ltd
Original Assignee
Inspur General Software Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Inspur General Software Co Ltd filed Critical Inspur General Software Co Ltd
Priority to CN201410251993.XA priority Critical patent/CN103995899A/zh
Publication of CN103995899A publication Critical patent/CN103995899A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/248Presentation of query results
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION 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/00Administration; Management
    • G06Q10/06Resources, workflows, human or project management; Enterprise or organisation planning; Enterprise or organisation modelling
    • G06Q10/063Operations 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数据进行分析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)分析结果以表格或图形的形式展现给用户。
CN201410251993.XA 2014-06-10 2014-06-10 一种kpi的分析系统 Pending CN103995899A (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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查询语句进行扩充的方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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