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