您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > NET统计分析报表解决方案
.NET统计分析报表解决方案1-用户订购统计分析案例前段时间接到很多报表的工作,现拿出一些小例子与大家分享。用户需求:运营商管理员:1.以合作伙伴为维度对用户订购进行统计分析:a.可对某一个合作伙伴进行分析,查看该合作伙伴下产品的用户订购在某个时间段内的发展趋势,需实现折线图、柱状图。b.可对所有合作伙伴进行分析,对比在某段时间内所有合作伙伴下产品的用户订购发展量,查看在某段时间内所有合作伙伴下产品的用户订购发展量在订购总量中所占比例,需实现柱状图、饼状图。2.以产品为维度对用户订购进行统计分析:a.可对某一个产品进行分析,查看该产品的用户订购在某个时间段内的发展趋势,需实现折线图、柱状图。b.可对所有产品进行分析,对比在某段时间内所有产品的用户订购发展量,查看在某段时间内所有产品的用户订购发展量在订购总量中所占比例,需实现柱状图、饼状图。合作伙伴管理员:1.以产品为维度对用户订购进行统计分析:a.可对本公司下某一个产品进行分析,查看该产品的用户订购在某个时间段内的发展趋势,需实现折线图、柱状图。b.可对本公司下所有产品进行分析,对比在某段时间内所有产品的用户订购发展量,查看在某段时间内所有产品的用户订购发展量在订购总量中所占比例,需实现柱状图、饼状图。时间需支持按年、按月统计。根据用户需求,我们可以开始进行实现。实现步骤:这里是用一个例子实现用户需求,没有用到系统内的表,系统内的表有很多例子中不需要的字段,所以根据系统内表结构新建。1.数据库数据表设计:合作伙伴表(CPInfo)产品信息表(ProductInfo):用户订购表(UserOrderInfo):因为是移动的系统,所以用户订购是通过手机。2.统计分析表建立:由于现实系统数据量比较大,统计的数据也不是实时的,所以统计分析不直接在原始数据表上进行,这样我们就需要建立一个专门用来存放统计分析数据的表。用户订购统计分析表(UserOrderStat):a.StatType字段为报表类型,这里定义为:CP-按CP公司统计数据,Product-按产品统计数据b.TimeType字段为时间类型,这里定义为:Year-按年统计数据,Month-按月统计数据3.统计分析存储过程建立:按年统计存储过程:IFEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_ID(N'[dbo].[SP_UserOrderStatByYear]')ANDtypein(N'P',N'PC'))DROPPROCEDURE[dbo].[SP_UserOrderStatByYear]GO--按年统计用户订购CREATEPROCEDURESP_UserOrderStatByYear@BeginYearINT,--开始年份@EndYearINT--结束年份ASBEGINDECLARE@Temp_BeginYearINTDECLARE@Temp_EndYearINTDECLARE@BeginTimeNVARCHAR(16)DECLARE@EndTimeNVARCHAR(16)SET@Temp_BeginYear=@BeginYearSET@Temp_EndYear=@EndYear+1--判断结束年份是否为当前时间年份或大于当前时间年份IF@EndYear=YEAR(GETDATE())SET@Temp_EndYear=YEAR(GETDATE())SET@BeginTime=CAST(@Temp_BeginYearASNVARCHAR(8))+'-1-1'SET@EndTime=CAST(@Temp_EndYearASNVARCHAR(8))+'-1-1'--添加年统计数据INSERTINTOUserOrderStat(StatType,TimeType,[Year],CPCode,CPChName,ProductCode,ProductName,OrderCount)--按CP公司统计SELECT'CP','Year',YEAR(uoi.OrderTime),uoi.CPCode,MAX(c.CPChName),'','',COUNT(0)FROMUserOrderInfouoiJOINCPInfocONuoi.CPCode=c.CPCodeJOINProductInfopONuoi.ProductCode=p.ProductCodeWHEREuoi.Status=1ANDuoi.OrderTime@BeginTimeANDuoi.OrderTime@EndTimeANDNOTEXISTS(SELECT0FROMUserOrderStatuosWHEREuos.CPCode=uoi.CPCodeANDuos.Year=YEAR(uoi.OrderTime))GROUPBYuoi.CPCode,YEAR(uoi.OrderTime)UNION--按产品统计SELECT'Product','Year',YEAR(uoi.OrderTime),MAX(uoi.CPCode),MAX(c.CPChName),uoi.ProductCode,MAX(p.ProductName),COUNT(0)FROMUserOrderInfouoiJOINCPInfocONuoi.CPCode=c.CPCodeJOINProductInfopONuoi.ProductCode=p.ProductCodeWHEREuoi.Status=1ANDuoi.OrderTime@BeginTimeANDuoi.OrderTime@EndTimeANDNOTEXISTS(SELECT0FROMUserOrderStatuosWHEREuos.CPCode=uoi.CPCodeANDuos.ProductCode=uoi.ProductCodeANDuos.Year=YEAR(uoi.OrderTime))GROUPBYuoi.ProductCode,YEAR(uoi.OrderTime)ENDGO按月统计存储过程:IFEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_ID(N'[dbo].[SP_UserOrderStatByMonth]')ANDtypein(N'P',N'PC'))DROPPROCEDURE[dbo].[SP_UserOrderStatByMonth]GO--按月统计用户订购CREATEPROCEDURESP_UserOrderStatByMonth@BeginYearINT,--开始年份@BeginMonthINT,--开始月份@EndYearINT,--结束年份@EndMonthINT--结束月份ASBEGINDECLARE@Temp_BeginYearINTDECLARE@Temp_BeginMonthINTDECLARE@Temp_EndYearINTDECLARE@Temp_EndMonthINTDECLARE@BeginTimeNVARCHAR(16)DECLARE@EndTimeNVARCHAR(16)SET@Temp_BeginYear=@BeginYearSET@Temp_BeginMonth=@BeginMonthSET@Temp_EndYear=@EndYearSET@Temp_EndMonth=@EndMonth+1--判断结束年份是否大于当前时间年份,当前月份是否为1月或者判断结束年份是否等于当前时间年份,结束月份是否大于当前时间月份IF@EndYearYEAR(GETDATE())OR(@EndYear=YEAR(GETDATE())AND@EndMonthMONTH(GETDATE()))BEGINSET@Temp_EndYear=YEAR(GETDATE())SET@Temp_EndMonth=MONTH(GETDATE())ENDSET@BeginTime=CAST(@Temp_BeginYearASNVARCHAR(8))+'-'+CAST(@BeginMonthASNVARCHAR(8))+'-1'SET@EndTime=CAST(@Temp_EndYearASNVARCHAR(8))+'-'+CAST(@EndMonthASNVARCHAR(8))+'-1'--添加月统计数据INSERTINTOUserOrderStat(StatType,TimeType,[Year],[Month],CPCode,CPChName,ProductCode,ProductName,OrderCount)--按CP公司统计SELECT'CP','Month',YEAR(uoi.OrderTime),MONTH(uoi.OrderTime),uoi.CPCode,MAX(c.CPChName),'','',COUNT(0)FROMUserOrderInfouoiJOINCPInfocONuoi.CPCode=c.CPCodeJOINProductInfopONuoi.ProductCode=p.ProductCodeWHEREuoi.Status=1ANDuoi.OrderTime@BeginTimeANDuoi.OrderTime@EndTimeANDNOTEXISTS(SELECT0FROMUserOrderStatuosWHEREuos.CPCode=uoi.CPCodeANDuos.Year=YEAR(uoi.OrderTime)ANDuos.Month=MONTH(uoi.OrderTime))GROUPBYuoi.CPCode,YEAR(uoi.OrderTime),MONTH(uoi.OrderTime)UNION--按产品统计SELECT'Product','Month',YEAR(uoi.OrderTime),MONTH(uoi.OrderTime),MAX(uoi.CPCode),MAX(c.CPChName),uoi.ProductCode,MAX(p.ProductName),COUNT(0)FROMUserOrderInfouoiJOINCPInfocONuoi.CPCode=c.CPCodeJOINProductInfopONuoi.ProductCode=p.ProductCodeWHEREuoi.Status=1ANDuoi.OrderTime@BeginTimeANDuoi.OrderTime@EndTimeANDNOTEXISTS(SELECT0FROMUserOrderStatuosWHEREuos.CPCode=uoi.CPCodeANDuos.ProductCode=uoi.ProductCodeANDuos.Year=YEAR(uoi.OrderTime)ANDuos.Month=MONTH(uoi.OrderTime))GROUPBYuoi.ProductCode,YEAR(uoi.OrderTime),MONTH(uoi.OrderTime)ENDGO4.新建数据库作业,用来定时执行年统计存储过程和月统计存储过程,一个用来执行月统计存储过程,计划为每月的1日零点执行。至此数据准备工作完成,现在开始着手设计报表。在例子中用三层架构的方式实现,分为UI层、业务逻辑层、数据访问层。5.新建用户统计报表工程解决方案统计分析数据查询存储过程:--统计查询存储过程CREATEPROCEDURE[dbo].[SP_UserOrderStatQuery]@StatTypeNVARCHAR(32),@TimeTypeNVARCHAR(32),@BeginYearINT,@EndYearINT,@BeginMonthINT,@EndMonthINT,@CPCodeNVARCHAR(32),@CPNameNVARCHAR(256),@ProductCodeNVARCHAR(32),@ProductNameNVARCHAR(256)ASBEGI
本文标题:NET统计分析报表解决方案
链接地址:https://www.777doc.com/doc-1060038 .html