上一节中实现了使用按钮动态查询报表的功能,报表中的数据都是汇总数据,如果要查看报表某一单元格内汇总的数据包含哪些明细数据,就要用到【显示明细】按钮了。

具体操作如下:

当用户在报表界面想查看某一项汇总数据的明细时,用鼠标点击,把想要查看的数据所在单元格变成活动单元格,点击【显示明细】按钮,宏代码将与活动单元格相关的明细数据和项目汇总数据分别提取到不同的工作表内。

活动单元格相关的数据依据就是对标题和排序汇总行的解析,然后形成查询条件,如图13.0:

标题与排序 图13.0


在报表.et工作薄,新增两个工作表,分别命名为【项目分类明细汇总】、【支出明细】,用于存放“项目分类明细汇总数据” “支出明细”。如图13.1:

新增工作表 图13.1

? 从database.et工作薄提取 “项目分类明细汇总数据” 的SQL语句分析如下:

“项目分类明细汇总数据”,是根据活动单元格提供的条件,从数据源提取相同项目的汇总数据

相同项目的汇总数据,根据 第6节 项目的分类条件,使用的分类语句是:

select [单位], [项目], [支出功能分类], 
  max([指标总金额]) as [指标总额],
 max([指标已用金额]) as [已用指标], 
  [指标总额] -[已用指标] as [指标余额],
 sum([计划金额]) as [计划金额], 
  round([已用指标]/[指标总额]*100,2) & "%" as [预算执行进度],
 [政府经济分类], [部门经济分类], [项目类别],[是否政府采购]
from [src$]
?//where 
group by [单位], [项目], [项目类别], [支出功能分类],
  [政府经济分类], [部门经济分类], [是否政府采购]

上面这条分组语句为了避免字段名冲突产生错误,将 max([指标总金额]) 和 max([指标已用金额]) 分别重命名为 [指标总额] 和 [已用指标]。

里面加了这条语句:round([已用指标]/[指标总额]*100,2) & "%" as [预算执行进度],用于显示预算执行进度,显示示例:100%。

同样根据 第10节 的类似内容,在执行宏代码的时候,将?替换成where语句就可以了。

将以上SQL语句复制后,粘贴存储到【字典】工作表的D2单元格,并在F2中录入“项目分类明细汇总语句”,作为标识。如图13.2。

? 从database.et工作薄提取 “支出明细” 的SQL语句分析如下:

“支出明细”,是根据活动单元格提供的条件,从数据源提取关键列的数据明细。

“支出明细”的SQL语句如下:

select [编号], [单位], [项目],
  ([指标总金额]+0) as [指标总金额],
  ([指标已用金额]+0) as [指标已用金额],
  ([指标可用金额]+0) as [指标可用金额],
  ([计划金额]+0) as [计划金额],
  round(([指标已用金额]/[指标总金额])*100,2) & '%' as [执行进度],
  [计划月份],[支出功能分类],[政府经济分类],[部门经济分类],[项目类别],[是否政府采购]
from [src$] ?

上面语句中类似([指标总金额]+0)这种金额的字段处理,将文本转换成了数值

在此之前的SQL语句在涉及到金额的地方都使用了聚合函数,这些文本格式的字符串被聚合函数自动的转换成了数值。

上面这条语句没有使用聚合函数,所以对金额使用计算,自动地将文本转换为数值。

将以上SQL语句复制后,粘贴存储到【字典】工作表的D3单元格,并在F3中录入“支出明细语句”,作为标识。如图13.2。

新增SQL语句 图13.2


至此,本节完成了明细查询的方案设计。

在下一节,将实现明细查询的宏代码。