表格模板-NET统计分析报表解决方案 精品
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前段时间接到很多报表的工作,现拿出一些小例子与大家分享。
用户需求:
运营商管理员:
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. 统计分析存储过程建立:
按年统计存储过程:
IF EXISTS (SELECT*FROM sys.objects WHERE object_id=
OBJECT_ID(N'[dbo].[SP_UserOrderStatByYear]') AND type in (N'P', N'PC'))
DROP PROCEDURE[dbo].[SP_UserOrderStatByYear]
GO
--按年统计用户订购
CREATE PROCEDURE SP_UserOrderStatByYear
@BeginYear INT, --开始年份
@EndYear INT--结束年份
AS
BEGIN
DECLARE@Temp_BeginYear INT
DECLARE@Temp_EndYear INT
DECLARE@BeginTime NVARCHAR(16)
DECLARE@EndTime NVARCHAR(16)
SET@Temp_BeginYear=@BeginYear
SET@Temp_EndYear=@EndYear+1
--判断结束年份是否为当前时间年份或大于当前时间年份
IF@EndYear>=YEAR(GETDATE())
SET@Temp_EndYear=YEAR(GETDATE())
SET@BeginTime=CAST(@Temp_BeginYear AS NVARCHAR(8)) +'-1-1'
SET@EndTime=CAST(@Temp_EndYear AS NVARCHAR(8)) +'-1-1'
--添加年统计数据
INSERT INTO UserOrderStat
(
StatType,
TimeType,
[Year],
CPCode,
CPChName,
ProductCode,
ProductName,
OrderCount
)
--按CP公司统计
SELECT'CP', 'Year', YEAR(uoi.OrderTime), uoi.CPCode, MAX(c.CPChName), '', '', COUNT(0)
FROM UserOrderInfo uoi JOIN CPInfo c ON uoi.CPCode = c.CPCode
JOIN ProductInfo p ON uoi.ProductCode = p.ProductCode
WHERE uoi.Status =1AND uoi.OrderTime >@BeginTime AND uoi.OrderTime <@EndTime AND NOT EXISTS (SELECT0FROM UserOrderStat uos WHERE uos.CPCode = uoi.CPCode AND uos.Year=YEAR(uoi.OrderTime))
GROUP BY uoi.CPCode, YEAR(uoi.OrderTime)
UNION
--按产品统计
SELECT'Product', 'Year', YEAR(uoi.OrderTime), MAX(uoi.CPCode),
MAX(c.CPChName), uoi.ProductCode, MAX(p.ProductName), COUNT(0)
FROM UserOrderInfo uoi JOIN CPInfo c ON uoi.CPCode = c.CPCode
JOIN ProductInfo p ON uoi.ProductCode = p.ProductCode
WHERE uoi.Status =1AND uoi.OrderTime >@BeginTime AND uoi.OrderTime <@EndTime AND NOT EXISTS (SELECT0FROM UserOrderStat uos WHERE uos.CPCode = uoi.CPCode AND uos.ProductCode = uoi.ProductCode AND uos.Year=YEAR(uoi.OrderTime))
GROUP BY uoi.ProductCode, YEAR(uoi.OrderTime)