勤哲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.字段名;