多语言展示
当前在线:1645今日阅读:23今日分享:25

怎样在报表中实现地图过滤并与统计图联动的效果

制作报表时,常常会遇到需要实现地图和统计图联动的效果的需求。例如:1.使用root用户登录时,地图显示为浙江省的省份名称和地图;使用zhangsan用户登录时,显示为北京的省份名称和地图。2.默认显示浙江省宁波市的统计图来源数据和统计图,当地图中点击“绍兴”市区域时,统计图来源数据和统计图显示为显示为绍兴的数据和统计图。这样的报表效果不仅能够智能的对用户权限进行判断,而且大大增强了报表的可读性。下面详细介绍上图示例的实现方法和步骤,其中zhangsan属于北京省份的用户,报表的基本内容制作不做详细说明,主要介绍实现地图过滤并与统计图联动效果的设置方法。
工具/原料

GEEZN5.0

为报表引入js
1

报表需要使用的函数可以定义为js,并引入到报表中。报表中引入js的方式有“直接在报表中定义js”和“展现界面引入js文件”两种方式。

2

1. 直接在报表中定义js选中一个不使用的单元格,打开【插入】-【富文本与Html】窗口,在富文本与Html窗口中选择文本类型为HTML,并在内容编辑区定义需要使用的函数。

3

2. 展现界面引入js文件进入当前资源单独的展现设计界面,设置所定义的js文件所在的相对路径即可。

根据当前用户显示对应省份名称和地图
1

将绘制好的北京(cn-bj.svg)和浙江省(cn-zj.svg)的地图文件放到[WebRoot]\mis2\Charts\svg\路径下。在变量管理中设置全局变量map的表达式及属性,用于根据当前用户所在的省份,传递省份地图的svg文件名称给引用该变量的报表。

2

定义报表所使用的数据集sql,where条件使用动态宏进行过滤。动态宏的表达式:if(@sys_Orgs_ForDAUC=='zhejiang','省份代码='cn-bj'',if(str(var(sys, sys_Orgs_ForDAUC))!='zhejiang','省份代码='cn-zj'','1=2'))。该表达式用于实现当前用户所在的机构为“beijing”时,过滤出mapdata数据表中“省份代码”为“cn-bj”的数据;当前用户所在的机构不是“beijing”时,过滤出mapdata数据表中“省份代码”为“cn-zj”的数据。

3

为显示报表中的省份名称的单元格表达式=”信访量情况表”加上取省份名称的表达式,修改后的单元格表达式为:=mapdata.省份名称+”信访量情况表”。

4

打开【报表属性】-【参数定义】窗口,增加名称为svgName的参数,参数类型设置为动态参数,表达式设置为encode(var(global,map)),用于调用全局变量map。实现展现报表时地图根据所传递的svgName参数值来展现对应的名称的svg地图名称文件。再增加名称为city的参数,参数数据类型为字符串组,参数类型为普通参数,默认值为“bj-cyq,zj-ningbo”,用于为不同地图传递不同的默认参数值。

5

数据集预览效果。

点击地图某城市报表和统计图显示该城市对应的数据
1

修改地图,在选取数窗口设置是否包含超链接属性值为“=1”表达式,始终启用超链接。设置区域超链接为“手动输入URL”的方式,表达式为:javascript:refreshFCByLocation(@areaId),实现当钻取地图区域时将当前区域的areaId参数值传递出去。

2

为统计图的来源数据添加过滤条件“辖区代码 in list(@city)”,其中参数city的值是由中地图传递过来的。

3

为统计图数据来源单元格、统计图所在单元格设置刷新特效,刷新特效可在【插入】-【交互增强】-【其他】-【刷新】中设置。实现当点击地图中某城市区域时,自动刷新统计图数据来源单元格、统计图所在单元格。

4

在【报表属性】-【填报设置】中设置报表为可填报。只有填报表可以使用【特殊效果】功能,因此这是使用特殊效果必须设置的一步。

注意事项
1

svgName是要传递加密后的参数值,因此调用全局变量后需要使用encode加密

2

svgName参数是特定的传递地图所使用的svg文件名称的参数,不能随意修改名称,否则不能识别

推荐信息