NET统计分析报表解决方案.docx

上传人:b****6 文档编号:5962543 上传时间:2023-01-02 格式:DOCX 页数:22 大小:896.71KB
下载 相关 举报
NET统计分析报表解决方案.docx_第1页
第1页 / 共22页
NET统计分析报表解决方案.docx_第2页
第2页 / 共22页
NET统计分析报表解决方案.docx_第3页
第3页 / 共22页
NET统计分析报表解决方案.docx_第4页
第4页 / 共22页
NET统计分析报表解决方案.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

NET统计分析报表解决方案.docx

《NET统计分析报表解决方案.docx》由会员分享,可在线阅读,更多相关《NET统计分析报表解决方案.docx(22页珍藏版)》请在冰豆网上搜索。

NET统计分析报表解决方案.docx

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--结束年份

AS

BEGIN

DECLARE@Temp_BeginYearINT

DECLARE@Temp_EndYearINT

DECLARE@BeginTimeNVARCHAR(16)

DECLARE@EndTimeNVARCHAR(16)

SET@Temp_BeginYear=@BeginYear

SET@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.CPCode

JOINProductInfopONuoi.ProductCode=p.ProductCode

WHEREuoi.Status=1ANDuoi.OrderTime>@BeginTimeANDuoi.OrderTime<@EndTime

ANDNOTEXISTS(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.CPCode

JOINProductInfopONuoi.ProductCode=p.ProductCode

WHEREuoi.Status=1ANDuoi.OrderTime>@BeginTimeANDuoi.OrderTime<@EndTime

ANDNOTEXISTS(SELECT0FROMUserOrderStatuosWHEREuos.CPCode=uoi.CPCode

ANDuos.ProductCode=uoi.ProductCodeANDuos.Year=YEAR(uoi.OrderTime))

GROUPBYuoi.ProductCode,YEAR(uoi.OrderTime)

END

GO

 

按月统计存储过程:

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--结束月份

AS

BEGIN

DECLARE@Temp_BeginYearINT

DECLARE@Temp_BeginMonthINT

DECLARE@Temp_EndYearINT

DECLARE@Temp_EndMonthINT

DECLARE@BeginTimeNVARCHAR(16)

DECLARE@EndTimeNVARCHAR(16)

SET@Temp_BeginYear=@BeginYear

SET@Temp_BeginMonth=@BeginMonth

SET@Temp_EndYear=@EndYear

SET@Temp_EndMonth=@EndMonth+1

 

--判断结束年份是否大于当前时间年份,当前月份是否为1月或者判断结束年份是否等于当前时间年份,结束月份是否大于当前时间月份

IF@EndYear>YEAR(GETDATE())OR(@EndYear=YEAR(GETDATE())AND@EndMonth>MONTH(GETDATE()))

BEGIN

SET@Temp_EndYear=YEAR(GETDATE())

SET@Temp_EndMonth=MONTH(GETDATE())

END

SET@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.CPCode

JOINProductInfopONuoi.ProductCode=p.ProductCode

WHEREuoi.Status=1ANDuoi.OrderTime>@BeginTimeANDuoi.OrderTime<@EndTime

ANDNOTEXISTS(SELECT0FROMUserOrderStatuosWHEREuos.CPCode=uoi.CPCode

ANDuos.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.CPCode

JOINProductInfopONuoi.ProductCode=p.ProductCode

WHEREuoi.Status=1ANDuoi.OrderTime>@BeginTimeANDuoi.OrderTime<@EndTime

ANDNOTEXISTS(SELECT0FROMUserOrderStatuosWHEREuos.CPCode=uoi.CPCode

ANDuos.ProductCode=uoi.ProductCodeANDuos.Year=YEAR(uoi.OrderTime)ANDuos.Month=MONTH(uoi.OrderTime))

GROUPBYuoi.ProductCode,YEAR(uoi.OrderTime),MONTH(uoi.OrderTime)

END

GO

 

4.新建数据库作业,用来定时执行年统计存储过程和月统计存储过程,一个用来执行月统计存储过程,计划为每月的1日零点执行。

至此数据准备工作完成,现在开始着手设计报表。

在例子中用三层架构的方式实现,分为UI层、业务逻辑层、数据访问层。

5.新建用户统计报表工程解决方案

统计分析数据查询存储过程:

--统计查询存储过程

CREATEPROCEDURE[dbo].[SP_UserOrderStatQuery]

@StatTypeNVARCHAR(32),

@TimeTypeNVARCHAR(32),

@BeginYearINT,

@EndYearINT,

@BeginMonthINT,

@EndMonthINT,

@CPCodeNVARCHAR(32),

@CPNameNVARCHAR(256),

@ProductCodeNVARCHAR(32),

@ProductNameNVARCHAR(256)

AS

BEGIN

--查询字段

DECLARE@FieldNVARCHAR(512)

--查询条件

DECLARE@WhereNVARCHAR(512)

--按范围查询时间字段

DECLARE@TimeNVARCHAR(256)

--分组

DECLARE@GroupNVARCHAR(256)

--排序

DECLARE@OrderNVARCHAR(256)

--设置查询字段

SET@Field=N'MAX([SeqNo])ASSeqNo,MAX([StatType])ASStatType,MAX([TimeType])ASTimeType,

MAX([Year])ASYear,MAX([Month])ASMonth,MAX([CPCode])ASCPCode,MAX([CPChName])ASCPChName,

MAX([ProductCode])ASProductCode,MAX([ProductName])ASProductName,MAX([OrderCount])ASOrderCount'

SET@Time=''

--如果时间条件都未选择,则查询总时间段

IF@BeginYear=-1AND@EndYear=-1AND@BeginMonth=-1AND@EndMonth=-1

SET@Time=',''总时间段''AS[Time]'

--如果年为时间条件,并且开始年与结束年相等

IF@BeginYear<>-1AND@EndYear<>-1AND@BeginYear=@EndYearAND@BeginMonth=-1AND@EndMonth=-1

SET@Time=','''+CAST(@BeginYearASNVARCHAR(8))+'年''AS[Time]'

--如果年为时间条件,并且开始年与结束年不相等

IF@BeginYear<>-1AND@EndYear<>-1AND@BeginYear<>@EndYearAND@BeginMonth=-1AND@EndMonth=-1

SET@Time=','''+CAST(@BeginYearASNVARCHAR(8))+'年-'+CAST(@EndYearASNVARCHAR(8))+'年''AS[Time]'

--如果年和月为时间条件,并且开始年与结束年相等,开始月与结束月相等

IF@BeginYear<>-1AND@EndYear<>-1AND@BeginYear=@EndYear

AND@BeginMonth<>-1AND@EndMonth<>-1AND@BeginMonth=@EndMonth

SET@Time=','''+CAST(@BeginYearASNVARCHAR(8))+'年'+CAST(@BeginMonthASNVARCHAR(8))+'月''AS[Time]'

--如果年和月为时间条件,并且开始年与结束年相等或者开始年与结束年不相等,开始月与结束月不相等

IF@BeginYear<>-1AND@EndYear<>-1AND@BeginMonth<>-1AND@EndMonth<>-1

AND((@BeginYear=@EndYearAND@BeginMonth<>@EndMonth)OR(@BeginYear<>@EndYearAND@BeginMonth<>@EndMonth))

SET@Time=','''+CAST(@BeginYearASNVARCHAR(8))+'年'+CAST(@BeginMonthASNVARCHAR(8))+'月-'+

CAST(@EndYearASNVARCHAR(8))+'年'+CAST(@EndMonthASNVARCHAR(8))+'月''AS[Time]'

SET@Field=@Field+@Time

SET@Where='WHERE1=1'

--如果时间类型不为按时间范围查询

IF@TimeType<>'Area'

SET@Where=@Where+'ANDTimeType='''+@TimeType+''''

--如果StatType不为空

IF@StatType<>''AND@StatTypeISNOTNULL

SET@Where=@Where+'ANDStatType='''+@StatType+''''

--如果CPCode不为空

IF@CPCode<>''AND@CPCodeISNOTNULL

SET@Where=@Where+'ANDCPCode='''+@CPCode+''''

--如果CPName不为空

IF@CPName<>''AND@CPNameISNOTNULL

SET@Where=@Where+'ANDCPNameLIKE''%'+@CPName+'%'''

--如果ProductCode不为空

IF@ProductCode<>''AND@ProductCodeISNOTNULL

SET@Where=@Where+'ANDProductCode='''+@ProductCode+''''

--如果ProductName不为空

IF@ProductName<>''AND@ProductNameISNOTNULL

SET@Where=@Where+'ANDProductName=''%'+@ProductName+'%'''

IF@BeginYear<>-1AND@EndYear<>-1

SET@Where=@Where+'AND((Year>='+CAST(@BeginYearASNVARCHAR(8))+

'ANDYEAR<='+CAST(@EndYearASNVARCHAR(8))+')'

IF@BeginMonth<>-1AND@EndMonth<>-1

SET@Where=@Where+'OR(Month>='+CAST(@BeginMonthASNVARCHAR(8))+

'ANDMonth<='+CAST(@EndMonthASNVARCHAR(8))+')'

IF@BeginYear<>-1AND@EndYear<>-1

SET@Where=@Where+')'

SET@Group='GROUPBY'

IF@StatType='CP'

SET@Group=@Group+'CPCode'

IF@StatType='Product'

SET@Group=@Group+'ProductCode'

IF@TimeType='Year'

SET@Group=@Group+',Year'

IF@TimeType='Month'

SET@Group=@Group+',Month'

PRINT'SELECT'+@Field+'FROMUserOrderStat'+@Where+@Group

EXECUTE('SELECT'+@Field+'FROMUserOrderStat'+@Where+@Group)

END

GO

 

 

数据访问类:

UserOrderStatDAL.cs

在这里用到了企业库进行数据库操作

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Data;

usingSystem.Data.Common;

usingMicrosoft.Practices.EnterpriseLibrary.Data;

namespaceDAL

{

publicpartialclassUserOrderStatDAL

{

///

///获取用户订购统计分析数据

///

///统计类型:

CP-按CP统计,Product-按产品统计

///时间类型:

Year-按年统计,Month-按月统计,Area-按时间范围统计

///

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1