版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.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@EndYear>YEAR(GETDATE())OR(@EndYear=YEAR(GETDATE())AND@EndMonth>MONTH(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)ENDGO
4.新建数据库作业,用来定期执行年记录存储过程和月记录存储过程,一个用来执行月记录存储过程,计划为每月的1日零点执行。至此数据准备工作完毕,现在开始着手设计报表。在例子中用三层架构的方式实现,分为UI层、业务逻辑层、数据访问层。5.新建用户记录报表工程解决方案记录分析数据查询存储过程:--记录查询存储过程CREATEPROCEDURE[dbo].[SP_UserOrderStatQuery]@StatTypeNVARCHAR(32),@TimeTypeNVARCHAR(32),@BeginYearINT,@EndYearINT,@BeginMonthINT,@EndMonthINT,@CPCodeNVARCHAR(32),@CPNameNVARCHAR(256),@ProductCodeNVARCHAR(32),@ProductNameNVARCHAR(256)ASBEGIN--查询字段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=-1SET@Time=',''总时间段''AS[Time]'--假如年为时间条件,并且开始年与结束年相等IF@BeginYear<>-1AND@EndYear<>-1AND@BeginYear=@EndYearAND@BeginMonth=-1AND@EndMonth=-1SET@Time=','''+CAST(@BeginYearASNVARCHAR(8))+'年''AS[Time]'--假如年为时间条件,并且开始年与结束年不相等IF@BeginYear<>-1AND@EndYear<>-1AND@BeginYear<>@EndYearAND@BeginMonth=-1AND@EndMonth=-1SET@Time=','''+CAST(@BeginYearASNVARCHAR(8))+'年-'+CAST(@EndYearASNVARCHAR(8))+'年''AS[Time]'--假如年和月为时间条件,并且开始年与结束年相等,开始月与结束月相等IF@BeginYear<>-1AND@EndYear<>-1AND@BeginYear=@EndYearAND@BeginMonth<>-1AND@EndMonth<>-1AND@BeginMonth=@EndMonthSET@Time=','''+CAST(@BeginYearASNVARCHAR(8))+'年'+CAST(@BeginMonthASNVARCHAR(8))+'月''AS[Time]'--假如年和月为时间条件,并且开始年与结束年相等或者开始年与结束年不相等,开始月与结束月不相等IF@BeginYear<>-1AND@EndYear<>-1AND@BeginMonth<>-1AND@EndMonth<>-1AND((@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+@TimeSET@Where='WHERE1=1'--假如时间类型不为准时间范围查询IF@TimeType<>'Area'SET@Where=@Where+'ANDTimeType='''+@TimeType+''''--假如StatType不为空IF@StatType<>''AND@StatTypeISNOTNULLSET@Where=@Where+'ANDStatType='''+@StatType+''''--假如CPCode不为空IF@CPCode<>''AND@CPCodeISNOTNULLSET@Where=@Where+'ANDCPCode='''+@CPCode+''''--假如CPName不为空IF@CPName<>''AND@CPNameISNOTNULLSET@Where=@Where+'ANDCPNameLIKE''%'+@CPName+'%'''--假如ProductCode不为空IF@ProductCode<>''AND@ProductCodeISNOTNULLSET@Where=@Where+'ANDProductCode='''+@ProductCode+''''--假如ProductName不为空IF@ProductName<>''AND@ProductNameISNOTNULLSET@Where=@Where+'ANDProductName=''%'+@ProductName+'%'''IF@BeginYear<>-1AND@EndYear<>-1SET@Where=@Where+'AND((Year>='+CAST(@BeginYearASNVARCHAR(8))+'ANDYEAR<='+CAST(@EndYearASNVARCHAR(8))+')'IF@BeginMonth<>-1AND@EndMonth<>-1SET@Where=@Where+'OR(Month>='+CAST(@BeginMonthASNVARCHAR(8))+'ANDMonth<='+CAST(@EndMonthASNVARCHAR(8))+')'IF@BeginYear<>-1AND@EndYear<>-1SET@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+@GroupEXECUTE('SELECT'+@Field+'FROMUserOrderStat'+@Where+@Group)ENDGO
数据访问类:UserOrderStatDAL.cs在这里用到了公司库进行数据库操作usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Data;usingSystem.Data.Common;usingMicrosoft.Practices.EnterpriseLibrary.Data;namespaceDAL{publicpartialclassUserOrderStatDAL{///<summary>///获取用户订购记录分析数据///</summary>///<paramname="statType">记录类型:CP-按CP记录,Product-按产品记录</param>///<paramname="timeType">时间类型:Year-按年记录,Month-按月记录,Area-准时间范围记录</param>///<paramname="beginYear">记录开始年份</param>///<paramname="endYear">记录结束年份</param>///<paramname="beginMonth">记录开始月份</param>///<paramname="endMonth">记录结束月份</param>///<paramname="cpCode">CP编码</param>///<paramname="cpName">CP名称</param>///<paramname="productCode">产品编码</param>///<paramname="productName">产品名称</param>///<returns></returns>publicstaticDataSetGetUserOrderStatData(stringstatType,stringtimeType,intbeginYear,intendYear,intbeginMonth,intendMonth,stringcpCode,stringcpName,stringproductCode,stringproductName){//创建Database对象Databasedb=DatabaseFactory.CreateDatabase("ReportDBConnection");//创建DbCommand对象DbCommanddbCommand=db.GetStoredProcCommand("SP_UserOrderStatQuery");//添加输入输出参数db.AddInParameter(dbCommand,"@StatType",DbType.String,statType);db.AddInParameter(dbCommand,"@TimeType",DbType.String,timeType);db.AddInParameter(dbCommand,"@BeginYear",DbType.Int32,beginYear);db.AddInParameter(dbCommand,"@EndYear",DbType.Int32,endYear);db.AddInParameter(dbCommand,"@BeginMonth",DbType.Int32,beginMonth);db.AddInParameter(dbCommand,"@EndMonth",DbType.Int32,endMonth);db.AddInParameter(dbCommand,"@CPCode",DbType.String,cpCode);db.AddInParameter(dbCommand,"@CPName",DbType.String,cpName);db.AddInParameter(dbCommand,"@ProductCode",DbType.String,productCode);db.AddInParameter(dbCommand,"@ProductName",DbType.String,productName);returndb.ExecuteDataSet(dbCommand);}}}
业务逻辑层:UserOrderStatBLL.csusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingDAL;usingSystem.Data;namespaceBLL{publicclassUserOrderStatBLL{///<summary>///获取用户订购记录分析数据///</summary>///<paramname="statType">记录类型:CP-按CP记录,Product-按产品记录</param>///<paramname="timeType">时间类型:Year-按年记录,Month-按月记录,Area-准时间范围记录</param>///<paramname="beginYear">记录开始年份</param>///<paramname="endYear">记录结束年份</param>///<paramname="beginMonth">记录开始月份</param>///<paramname="endMonth">记录结束月份</param>///<paramname="cpCode">CP编码</param>///<paramname="cpName">CP名称</param>///<paramname="productCode">产品编码</param>///<paramname="productName">产品名称</param>///<returns></returns>publicstaticDataSetGetUserOrderStatData(stringstatType,stringtimeType,intbeginYear,intendYear,intbeginMonth,intendMonth,stringcpCode,stringcpName,stringproductCode,stringproductName){try{//调用DAL层方法returnUserOrderStatDAL.GetUserOrderStatData(statType,timeType,beginYear,endYear,beginMonth,endMonth,cpCode,cpName,productCode,productName);}catch(Exceptionex){//在此处记录异常日记,并抛出异常throwex;}}}}在这个例子里,这一层没有起到任何作用,但是在实际的系统里这一层是必须的。
6.新建数据集:在UI层中新建一个数据集
在数据集中添加一个DataTable
7.新建报表文献:在本例子中使用rdlc报表
报表文献新建后,从工具栏中拖一个饼状图到设计器然后从网站数据源中将相应字段拖到饼状图中,如下:数据字段放置报表记录字段,类别字段决定报表记录字段按什么进行分类,而序列字段是在分类的基础上再进行细分。在这例子里只演示按CP记录用户订购量,所以只需要将订购量拖到数据字段,将CP编码或CP名称拖到类别字段便可。
可认为报表添加输入参数,在报表菜单下报表参数内进行添加,在本例子中我添加了一个title参数和一个bottom参数。
到此一个报表文献便设计完毕。
8.新建报表展示页面:UserOrderStat.aspx<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="UserOrderStat.aspx.cs"Inherits="UserOrderReportPortal.UserOrderStat"%><%@RegisterAssembly="Microsoft.ReportViewer.WebForms,Version=,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"Namespace="Microsoft.Reporting.WebForms"TagPrefix="rsweb"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"""><htmlxmlns=""><headrunat="server"><title></title></head><body><formid="form1"runat="server"><div><rsweb:ReportViewerID="rptView"runat="server"SizeToReportContent="true"Height="500px"Width="100%"BackColor="Linen"></rsweb:ReportViewer></div></form></body></html>
在页面上我只放了一个ReportViewer控件,大家在做例子的时候可以加上条件输入控件。
UserOrderStat.aspx.csusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingMicrosoft.Reporting.WebForms;usingBLL;usingSystem.Data;namespaceUserOrderReportPortal{publicpartialclassUserOrderStat:System.Web.UI.Page{protectedvoidPage_Load(objectsender,EventArgse){i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届北京东城二中学初三2月月考试题英语试题含解析
- 2026年四川省成都市青白江区重点达标名校高中毕业班第二次教学质量检查语文试题含解析
- 河北省唐山市迁安市市级名校2026年初三二模冲刺(一)英语试题试卷含解析
- 广西壮族自治区河池市东兰县2026届初三一测英语试题试卷含解析
- 山东省济宁市市中区2025-2026学年中考语文试题全真模拟卷含解析
- 招标投标诚信行为保证承诺书9篇范文
- 技术部门文档编写及维护模板
- 企业融资合法性承诺书5篇范文
- 企业培训需求评估问卷标准化模板
- 服务器停机紧急处置流程企业IT部门预案
- 机械传动培训课
- 2025中证信息技术服务有限责任公司招聘16人考前自测高频考点模拟试题附答案
- 十五五规划纲要解读:物业管理服务提质
- 郑州铁路职业技术学院单招职业技能测试参考试题库(含答案)
- 鲜切花保鲜方法
- 糖尿病课件教学课件
- 网红集装箱商业街方案
- 豆制品企业生产过程节能降耗方案
- 在线网课学习课堂《学术交流英语(哈工 )》单元测试考核答案
- 2026兵团职工考试试题及答案大全
- 烟台劳动合同(标准版)
评论
0/150
提交评论