客户的成功,我们的骄傲

我们的上万家客户来自电信、电力能源、石油石化、冶金矿产、金融保险、制造、流通、服务、科教文卫、IT高科技、政府及公共服务等各个行业,他们靠自己的力量成功实现了企业管理信息化,请来分享他们的成功故事,还有,你也能!

勤哲Excel服务器做复杂报表

详情请联系范展鹏 qq3051828416 电话15818855188

要求:从外部数据源图一提取数据,按图二报表格式自动提数

难点:  a) 需要的数据分散在很多个字段里面,需要SQL知识转换数据源格式;b) 报表格式比较特殊,数据区域非连续,每个年级分为上下两个区域,如果做成多个子表,定义数据项和设置提数公式都非常复杂。

技术方案: 把加工后的数据源根据学校和年份动态筛选到一个表,以这个表为新的数据源,通过Excel内置函数sumifs() 填充目标报表。

具体步骤:

1. 创建外部数据源视图【v_unPivot_RawDt】,并通过unpivot处理,使之格式简化,效果如 。

2. 进一步把上面视图转化为新视图【v_data2】, 方便提数。



3. 创建主表,明细表,定义数据项



4. 创建表间公式,根据主表下拉选项,提取数据

5. 在Sheet1的目标报表内写入sumifs公式,提取sheet2数据

最终效果

附录

图四•SQL源代码

--【v_data_0】WITH a
AS (SELECT
SUBSTRING(grage_name, CHARINDEX('届', grage_name) - 4, 4) AS Yr, CASE
WHEN SUBSTRING(nj, 1, 1) = 1 THEN
'一年级下学期'
WHEN SUBSTRING(nj, 1, 1) = 2 THEN
'二年级下学期'
WHEN SUBSTRING(nj, 1, 1) = 3 THEN
'三年级下学期'
WHEN SUBSTRING(nj, 1, 1) = 4 THEN
'四年级下学期'
WHEN SUBSTRING(nj, 1, 1) = 5 THEN
'五年级下学期'
WHEN SUBSTRING(nj, 1, 1) = 6 THEN
'六年级下学期' ELSE
'无定义' END AS 年级,
CAST(CAST(SUBSTRING(class_name, CHARINDEX('届', class_name) + 1, 2) AS INT) AS VARCHAR
* FROM dbo.std
) SELECT Yr,
年级,
班级, Cat,
CAST(HC AS INT) HC,
tenant_name AS 学校
FROM a
UNPIVOT (
HC
FOR Cat IN (disabilityStu, insideArea, outsideArea, overSeas, class_stuCount, lodging, le countryside, girlStu, minorityNational, follow_class, foreignStu, fieldStu
)
) AS P;

--【v_data2】SELECT a.*,
b.表单名 AS 分类
FROM v_data_0 a
LEFT JOIN 字段映射 b
ON a.Cat = b.字段名;