《NET统计分析报表解决方案qei.docx》由会员分享,可在线阅读,更多相关《NET统计分析报表解决方案qei.docx(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、.NETT统计分分析报表表解决方方案1-用户订订购统计计分析案案例 前段时间间接到很很多报表表的工作作,现拿拿出一些些小例子子与大家家分享。用户需求求:运营商管管理员:1. 以以合作伙伙伴为维维度对用用户订购购进行统统计分析析: a. 可对某某一个合合作伙伴伴进行分分析,查查看该合合作伙伴伴下产品品的用户户订购在在某个时时间段内内的发展展趋势,需需实现折折线图、柱柱状图。 b. 可对所所有合作作伙伴进进行分析析,对比比在某段段时间内内所有合合作伙伴伴下产品品的用户户订购发发展量,查查看在某某段时间间内所有有合作伙伙伴下产产品的用用户订购购发展量量在订购购总量中中所占比比例,需需实现柱柱状图、饼
2、饼状图。2. 以以产品为为维度对对用户订订购进行行统计分分析: a. 可对某某一个产产品进行行分析,查查看该产产品的用用户订购购在某个个时间段段内的发发展趋势势,需实实现折线线图、柱柱状图。 b. 可对所所有产品品进行分分析,对对比在某某段时间间内所有有产品的的用户订订购发展展量,查查看在某某段时间间内所有有产品的的用户订订购发展展量在订订购总量量中所占占比例,需需实现柱柱状图、饼饼状图。合作伙伴伴管理员员:1. 以以产品为为维度对对用户订订购进行行统计分分析: a. 可对本本公司下下某一个个产品进进行分析析,查看看该产品品的用户户订购在在某个时时间段内内的发展展趋势,需需实现折折线图、柱柱状
3、图。 b. 可对本本公司下下所有产产品进行行分析,对对比在某某段时间间内所有有产品的的用户订订购发展展量,查查看在某某段时间间内所有有产品的的用户订订购发展展量在订订购总量量中所占占比例,需需实现柱柱状图、饼饼状图。时间需支持按年、按月统计。根据用户户需求,我我们可以以开始进进行实现现。实现步骤骤:这里是用用一个例例子实现现用户需需求,没没有用到到系统内内的表,系系统内的的表有很很多例子子中不需需要的字字段,所所以根据据系统内内表结构构新建。1. 数数据库数数据表设设计:合作伙伴伴表(CCPInnfo)产品信息息表(PProdducttInffo):用户订购购表(UUserrOrdderIIn
4、foo):因为是移移动的系系统,所所以用户户订购是是通过手手机。2. 统统计分析析表建立立:由于现实实系统数数据量比比较大,统统计的数数据也不不是实时时的,所所以统计计分析不不直接在在原始数数据表上上进行,这这样我们们就需要要建立一一个专门门用来存存放统计计分析数数据的表表。用户订购购统计分分析表(UserOrderStat):a. SStattTyppe字段段为报表表类型,这这里定义义为:CCP-按按CP公司司统计数数据,PProdductt-按产产品统计计数据b. TTimeeTyppe字段段为时间间类型,这这里定义义为:YYearr-按年年统计数数据,MMontth-按按月统计计数据3.
5、 统统计分析析存储过过程建立立:按年统计计存储过过程:IF EXIISTSS (SEELECCT * FROOM ssys.objjectts WWHERRE objjectt_idd = OBJJECTT_IDD(Ndboo.SP_UseerOrrderrStaatByyYeaar) ANND ttypee inn (NNP, NNPCC)DROPP PROOCEDDUREE dbbo.SPP_UsserOOrdeerSttatBByYeearGO-按年年统计用用户订购购CREAATE PROOCEDDUREE SPP_UsserOOrdeerSttatBByYeearBegginYYear
6、r INTT, -开开始年份份EnddYeaar INTT -结束束年份ASBEGIIN DECCLARRE Teemp_BegginYYearr INTT DECCLARRE Teemp_EnddYeaar INTT DECCLARRE BeeginnTimme NVAARCHHAR(16) DECCLARRE EnndTiime NVAARCHHAR(16) SETT Teemp_BegginYYearr = BeeginnYeaar SETT Teemp_EnddYeaar = EnndYeear + 1 -判判断结束束年份是是否为当当前时间间年份或或大于当当前时间间年份 IF Ennd
7、Yeear = YEAAR(GETTDATTE() SEET Teemp_EnddYeaar = YEAAR(GETTDATTE() SETT BeeginnTimme = CASST(Teemp_BegginYYearr AS NVAARCHHAR(8) + -11-1 SETT EnndTiime = CASST(Teemp_EnddYeaar AS NVAARCHHAR(8) + -11-1 -添添加年统统计数据据 INSSERTT INTTO UUserrOrdderSStatt ( SttatTTypee, TiimeTTypee, YYearr, CPPCodde, CPPChNN
8、amee, PrroduuctCCodee, PrroduuctNNamee, OrrderrCouunt ) -按按CP公公司统计计 SELLECTT CPP, Yeear, YEEAR(uoii.OrrderrTimme), uooi.CCPCoode, MAAX(cc.CPPChNNamee), , , COUUNT(0) FROOM UUserrOrdderIInfoo uooi JJOINN CPPInffo cc ONN uooi.CCPCoode = c.CPCCodee JOIIN PProdducttInffo pp ONN uooi.PProdducttCodde = p.
9、ProoducctCoode WHEERE uoii.Sttatuus = 1 ANDD uooi.OOrdeerTiime BeeginnTimme ANDD uooi.OOrdeerTiime BeeginnTimme ANDD uooi.OOrdeerTiime YEAAR(GETTDATTE() OOR (EnndYeear = YEAAR(GETTDATTE() AAND EnndMoonthh MONNTH(GETTDATTE() BEGGIN SEET Teemp_EnddYeaar = YEAAR(GETTDATTE() SEET Teemp_EnddMonnth = MONN
10、TH(GETTDATTE() ENDD SETT BeeginnTimme = CASST(Teemp_BegginYYearr AS NVAARCHHAR(8) + - + CASST(BeeginnMonnth AS NVAARCHHAR(8) + -11 SETT EnndTiime = CASST(Teemp_EnddYeaar AS NVAARCHHAR(8) + - + CASST(EnndMoonthh AS NVAARCHHAR(8) + -11 -添添加月统统计数据据 INSSERTT INTTO UUserrOrdderSStatt ( SttatTTypee, Tiime
11、TTypee, YYearr, MMontth, CPPCodde, CPPChNNamee, PrroduuctCCodee, PrroduuctNNamee, OrrderrCouunt ) -按按CP公公司统计计 SELLECTT CPP, Moonthh, YEAAR(uuoi.OrdderTTimee), MONNTH(uoii.OrrderrTimme), uooi.CCPCoode, MAAX(cc.CPPChNNamee), , , COUUNT(0) FROOM UUserrOrdderIInfoo uooi JJOINN CPPInffo cc ONN uooi.CCPCo
12、ode = c.CPCCodee JOIIN PProdducttInffo pp ONN uooi.PProdducttCodde = p.ProoducctCoode WHEERE uoii.Sttatuus = 1 ANDD uooi.OOrdeerTiime BeeginnTimme ANDD uooi.OOrdeerTiime BeeginnTimme ANDD uooi.OOrdeerTiime EnndTiime ANDD NOTT EXIISTSS (SEELECCT 0 FROOM UUserrOrdderSStatt uoos WWHERRE uuos.CPCCodee =
13、 uooi.CCPCoode ANDD uoos.PProdducttCodde = uooi.PProdducttCodde AAND uoss.Yeear = YEAAR(uuoi.OrdderTTimee) AAND uoss.Moonthh = MONNTH(uoii.OrrderrTimme) GROOUP BY uuoi.ProoducctCoode, YEEAR(uoii.OrrderrTimme), MOONTHH(uooi.OOrdeerTiime)ENDGO4. 新新建数据据库作业业,用来来定时执执行年统统计存储储过程和和月统计计存储过过程,一一个用来来执行月月统计存存储过
14、程程,计划划为每月月的1日零点点执行。至至此数据据准备工工作完成成,现在在开始着着手设计计报表。在例子中中用三层层架构的的方式实实现,分分为UII层、业业务逻辑辑层、数数据访问问层。5. 新新建用户户统计报报表工程程解决方方案统计分析析数据查查询存储储过程:-统计计查询存存储过程程CREAATE PROOCEDDUREE dbbo.SPP_UsserOOrdeerSttatQQuerryStaatTyype NVAARCHHAR(32),TimmeTyype NVAARCHHAR(32),BegginYYearr INTT,EnddYeaar INTT,BegginMMontth INTT,E
15、nddMonnth INTT,CPCCodee NVAARCHHAR(32),CPNNamee NVAARCHHAR(2566),ProoducctCoode NVAARCHHAR(32),ProoducctNaame NVAARCHHAR(2566)ASBEGIIN -查查询字段段 DECCLARRE Fiieldd NVAARCHHAR(5122) -查查询条件件 DECCLARRE Whheree NVAARCHHAR(5122) -按按范围查查询时间间字段 DECCLARRE Tiime NVAARCHHAR(2566) -分分组 DECCLARRE Grroupp NVAARCHHA
16、R(2566) -排排序 DECCLARRE Orrderr NVAARCHHAR(2566) -设设置查询询字段 SETT Fiieldd = NMMAX(SeeqNoo) AS SeqqNo,MAXX(SStattTyppe) ASS SttatTTypee,MAAX(TimmeTyype) AAS TTimeeTyppe, MAAX(Yeaar) ASS Yeear,MAXX(MMontth) ASS Moonthh,MAAX(CPCCodee) AS CPCCodee,MAAX(CPCChNaame) AAS CCPChhNamme, MAAX(ProoducctCoode) AAS
17、PProdducttCodde,MMAX(PrroduuctNNamee) AS ProoducctNaame,MAXX(OOrdeerCoountt) AS OrdderCCounnt SETT Tiime = -如如果时间间条件都都未选择择,则查查询总时时间段 IF BeeginnYeaar = -1 ANDD EnndYeear = -1 ANDD BeeginnMonnth = -1 ANDD EnndMoonthh = -1 SEET Tiime = ,总时时间段 AAS Timme -如如果年为为时间条条件,并并且开始始年与结结束年相相等 IF BeeginnYeaar -1 AN
18、DD EnndYeear -1 ANDD BeeginnYeaar = EnndYeear ANDD BeeginnMonnth = -1 ANDD EnndMoonthh = -1 SEET Tiime = , + CASST(BeeginnYeaar AS NVAARCHHAR(8) + 年 AAS Timme -如如果年为为时间条条件,并并且开始始年与结结束年不不相等 IF BeeginnYeaar -1 ANDD EnndYeear -1 ANDD BeeginnYeaar EnndYeear ANDD BeeginnMonnth = -1 ANDD EnndMoonthh = -1
19、SEET Tiime = , + CASST(BeeginnYeaar AS NVAARCHHAR(8) + 年 - + CASST(EnndYeear AS NVAARCHHAR(8) + 年 AAS Timme -如如果年和和月为时时间条件件,并且且开始年年与结束束年相等等,开始始月与结结束月相相等 IF BeeginnYeaar -1 ANDD EnndYeear -1 ANDD BeeginnYeaar = EnndYeear ANND BeeginnMonnth -1 ANDD EnndMoonthh -1 ANDD BeeginnMonnth = EnndMoonthh SEET
20、Tiime = , + CASST(BeeginnYeaar AS NVAARCHHAR(8) + 年 + CASST(BeeginnMonnth AS NVAARCHHAR(8) + 月 AAS Timme -如如果年和和月为时时间条件件,并且且开始年年与结束束年相等等或者开开始年与与结束年年不相等等,开始始月与结结束月不不相等 IF BeeginnYeaar -1 ANDD EnndYeear -1 ANDD BeeginnMonnth -1 ANDD EnndMoonthh -1 ANND (BBegiinYeear = EnndYeear ANDD BeeginnMonnth Ennd
21、Moonthh) ORR (BBegiinYeear EnndYeear ANDD BeeginnMonnth EnndMoonthh) SEET Tiime = , + CASST(BeeginnYeaar AS NVAARCHHAR(8) + 年 + CASST(BeeginnMonnth AS NVAARCHHAR(8) + 月 - + CCASTT(EnndYeear AS NVAARCHHAR(8) + 年 + CASST(EnndMoonthh AS NVAARCHHAR(8) + 月 AAS Timme SETT Fiieldd = Fiieldd + Tiime SETT Wh
22、heree = WWHERRE 11=1 -如如果时间间类型不不为按时时间范围围查询 IF TiimeTTypee Arrea SEET Whheree = Whheree + AAND TimmeTyype = + TiimeTTypee + -如如果SttatTTypee不为空空 IF SttatTTypee ANDD SttatTTypee IS NOTT NULLL SEET Whheree = Whheree + AAND StaatTyype = + SttatTTypee + -如如果CPPCodde不为为空 IF CPPCodde ANDD CPPCodde IS NOTT N
23、ULLL SEET Whheree = Whheree + AAND CPCCodee = + CPPCodde + -如如果CPPNamme不为为空 IF CPPNamme ANDD CPPNamme IS NOTT NULLL SEET Whheree = Whheree + AAND CPNNamee LIIKE % + CPPNamme + % -如如果PrroduuctCCodee不为空空 IF PrroduuctCCodee ANDD PrroduuctCCodee IS NOTT NULLL SEET Whheree = Whheree + AAND ProoducctCoode
24、 = + PrroduuctCCodee + -如如果PrroduuctNNamee不为空空 IF PrroduuctNNamee ANDD PrroduuctNNamee IS NOTT NULLL SEET Whheree = Whheree + AAND ProoducctNaame = % + PrroduuctNNamee + % IF BeeginnYeaar -1 ANDD EnndYeear -1 SEET Whheree = Whheree + AAND (YYearr = + CASST(BeeginnYeaar AS NVAARCHHAR(8) + ANND YYEARR
25、 = + CASST(EnndYeear AS NVAARCHHAR(8) + ) IF BeeginnMonnth -1 ANDD EnndMoonthh -1 SEET Whheree = Whheree + OOR (Monnth = + CASST(BeeginnMonnth AS NVAARCHHAR(8) + ANND MMontth = + CASST(EnndMoonthh AS NVAARCHHAR(8) + ) IF BeeginnYeaar -1 ANDD EnndYeear -1 SEET Whheree = Whheree + ) SETT Grroupp = GGR
26、OUUP BBY IF SttatTTypee = CPP SEET Grroupp = Grroupp + CPPCodde IF SttatTTypee = Prroduuct SEET Grroupp = Grroupp + PrroduuctCCodee IF TiimeTTypee = Yeear SEET Grroupp = Grroupp + ,YYearr IF TiimeTTypee = Moonthh SEET Grroupp = Grroupp + ,MMontth PRIINT SEELECCT + Fiieldd + FFROMM UsserOOrdeerSttat
27、+ Whheree + Grroupp EXEECUTTE (SEELECCT + Fiieldd + FFROMM UsserOOrdeerSttat + Whheree + Grroupp)ENDGO数据访问问类:UUserrOrdderSStattDALL.css在这里用用到了企企业库进进行数据据库操作作usinng SSysttem;usinng SSysttem.Colllecctioons.Genneriic;usinng SSysttem.Linnq;usinng SSysttem.Texxt;usinng SSysttem.Datta;usinng SSysttem.Datta
28、.CCommmon;usinng MMicrrosooft.Praactiicess.EnnterrpriiseLLibrraryy.Daata;nameespaace DALL pubblicc parrtiaal claass UseerOrrderrStaatDAAL / / 获获取用户户订购统统计分析析数据 / / 统统计类型型:CPP-按CCP统计计,Prroduuct-按产品品统计 / 时时间类型型:Yeear-按年统统计,MMontth-按按月统计计,Arrea-按时间间范围统统计 / 统计开开始年份份 / 统计计结束年年份 / 统计计开始月月份 / 统统计结束束月份 / CP编
29、编码 / CP名名称 / 产产品编码码 / 产产品名称称 / puubliic staaticc DaataSSet GettUseerOrrderrStaatDaata(strringg sttatTTypee, sstriing timmeTyype, innt bbegiinYeear, innt eendYYearr, iint begginMMontth, intt enndMoonthh, sstriing cpCCodee, sstriing cpNNamee, sstriing prooducctCoode, sttrinng pprodducttNamme) /创建建Dattabaase对对象 DDataabasse ddb = DaatabbaseeFacctorry.CCreaateDDataabasse(RepporttDBCConnnecttionn); /创建建DbCCommmandd对象 DDbCoommaand dbCCommmandd = db.GettStooreddProocCoommaand(SPP_UsserOOrdeerSttatQQuerry); /添加加输入输输出参数数 ddb.AAddIInPaarammeteer(ddbCoommaand, StaatTyype, DDbTyype.Strringg, s