决策报表组件联动
实现效果:点击报表块单元格中不同的数据,图表能根据对应的数据展示图形。点击一个图表的分类或系列,另一个图表或表格能联动显示对应分类或系列的数据。
- 点击设计器左上角「文件>新建决策报表」,新建三个数据集,SQL 查询语句分别为:
ds1:SELECT * FROM 销量
ds2:SELECT * FROM 销量 WHERE 地区='${area}'
ds3:SELECT * FROM 销量 WHERE 销售员='${spe}'
ds2 数据集中定义了参数 area,表示「地区」,设置其默认值为「华东」。
ds3 数据集中定义了参数 spe,表示「销售员」,设置其默认值为「孙林」。 - 首先将决策报表 body 的布局方式修改为「绝对布局」,再分别拖入组件。
- 向 body 中拖入一个饼图,双击饼图,选择「数据」,绑定数据集 ds1 的数据,分类为「无」,系列为「地区」,值为「销量>求和」。
- 选择「样式>标题」,设置饼图标题为「地区销量对比」。
- 向 body 中拖入一个报表块,双击报表块进入编辑界面后,将 ds1 数据集的 地区、销售员、销量 字段拖入 A2~C2 单元格中,设置 C2 单元格的数据设置为「汇总>求和」。
- 向 body 中拖入一个柱形图,双击柱形图,选择「数据」,绑定数据集 ds2 的数据,分类为「销售员」,系列名使用「字段名」选择「销量」,汇总方式为「求和」。
- 选择「样式>标题」,点击 F(x) 进入公式定义界面,输入柱形图的标题为
$area+"销售员销量分析"
,则柱形图的标题也可以根据参数 area 变化。 - 向 body 中拖入一个报表块,双击报表块进入编辑界面后,合并 A1~C1 单元格,将 ds3 数据集的 销售员 字段拖入 A1 单元格,将 产品、产品类型、销量 字段拖入 A2~C2 单元格,设置 C2 单元格的数据设置为「汇总>求和」。
- 设置 A2 单元格的左父格为 A1 单元格。
- 设置 A1 单元格的显示值为 =
$$$+"各产品销量"
,$$$ 表示当前单元格显示的值。 - 上述设计的图表和报表块均为决策报表的组件,我们给每个组件均设置了标题。选中组件,在「属性>标题样式」中设置即可。
- 我们要实现的效果是:点击饼图的系列即地区,柱形图就显示为点击的地区下所有销售员的销量。编辑饼图,点击右侧属性面板的「特效」,在「交互属性>超级链接」处添加一个「当前表单对象」,选择柱形图对象即 chart1,并添加参数 area,参数值选择「系列名称」。即将饼图的系列名作为 area 参数传递给柱形图。
- 我们要实现的效果是:点击单元格中的地区,柱形图就显示为点击的地区下所有销售员的销量。选中 A2 单元格,点击右侧属性面板的「超级链接」,添加一个「当前决策报表对象」(同当前表单对象),选择柱形图对象即 chart1,并添加参数 area,参数值为公式 =A2。即将 A2 单元格的值作为 area 参数传递给柱形图。
- 我们要实现的效果是:点击柱形图的柱子,表格 B 就根据柱子的分类即销售员展示对应的各产品销量。
编辑柱形图,点击右侧属性面板的「特效」,在「交互属性>超级链接」处添加一个「当前表单对象」,选择表格 B 所在的报表块即 report1,并添加参数 spe,参数值选择「分类名」。即将柱形图的分类名作为 spe 参数传递给表格 B。
注:在普通报表中,无法直接在一张模板中实现图表联动单元格或单元格联动单元格,需借助网页框控件,详情可参考文档 数据钻取到当前模板 。 - 保存报表,点击「PC 端预览」。
决策报表自动查询
实现效果:在 body 中的下拉框控件选择「地区」,其他使用了地区参数的组件能根据选择的地区展示对应数据。
- 点击设计器左上角「文件>新建决策报表」,新建空白模板。
- 新建一个数据库查询 ds1,SQL 查询语句为:
SELECT * FROM 销量 where 1=1 ${if(len(area)=0,""," and 地区='"+area+"'")}
,即定义 area 参数,值为「地区」字段,且当参数为空时展示全部数据。 - 将 body 的布局方式修改为「绝对布局」,再向 body 中拖入「报表块」、「饼图」、「标签控件」和「下拉框控件」。
- 设置「标签控件」的控件值为「地区:」;「下拉框控件」的控件名称为「area」,即将下拉框控件与参数 $area 绑定。
- 设置「下拉框控件」的数据字典为「数据库表」销量表,实际值和显示值均为「地区」。
- 双击报表块,进入报表块编辑界面,拖入「地区、销售员、销量」字段,设置 C2 单元格的数据设置为「汇总>求和」。单元格样式可在「单元格属性>样式」中自行设置。
- 双击饼图,设置饼图的数据来源:数据集为 ds1,系列名为「销售员」,值为「销量」,汇总方式为「求和」。
- 保存决策报表,点击「PC端预览」。
决策报表实现控件联动并查询
实现效果:在决策报表中,希望实现有多个控件时,后一个控件的选项能根据前一个控件选择的值变化,并且在选择相应的选项后,其他组件内容能随之变化展示相应的数据。
如,城市选项需跟随地区所选值而变动,客户选项需跟随地区、城市所选值相应变动,报表块内容能跟随选择的地区、城市、客户自动查询处相应数据。
- 点击设计器左上角「文件>新建决策报表」,新建空白模板。
- 新建三个数据库查询,SQL 查询语句分别为:
订单:select 客户.地区,客户.城市,客户.客户ID,客户.公司名称,订单.订单ID,订单.订购日期,订单.发货日期,订单.到货日期,订单.运货商,货主名称,订单明细.产品ID,(订单明细.单价*订单明细.数量) AS 金额 from 客户,S订单 订单,S订单明细 订单明细 where 订单.订单ID=订单明细.订单ID and 客户.客户ID=订单.客户ID
城市:select 城市 from 客户 where 地区='${area}'
客户:select 公司名称 from 客户 where 城市='${city}' and 地区='${area}'
「订单」数据集主要将不同的数据表进行了关联;「城市」数据集定义了地区参数 $area ,表示根据参数获取对应的「城市」;「客户」数据集定义了城市参数 $city 和 地区参数 $area,表示根据参数获取对应的「公司名称」。 - 将 body 的布局方式修改为「绝对布局」,再向 body 中拖入三个「标签控件」、三个「下拉框控件」和一个「报表块」组件。
- 分别设置「标签控件」的控件值为 地区:、城市:、客户:;「下拉框控件」的控件名称分别为 area 、city 、customer,将下拉框控件与各个参数绑定。
- 设置三个「下拉框控件」的数据字典,具体设置如下表所示:
- 选中报表块,在「属性」中设置标题文本为「运货商月订单信息」,设置内容显示方式为「宽度铺满报表块」。
- 双击报表块,进入报表块编辑界面,将「订单」数据集中的 订单ID、公司名称、订购日期、货主名称、发货日期、到货日期、运货商 依次拖入 A2~G2 单元格,再输入对应表头信息。
- 因为 G2 单元格的「运货商」字段在「订单」数据集中实际上是「运货商ID」的字段值,所以这里需要设置其形态为数据字典,使其显示运货商ID对应的公司名称。
选中 G5 单元格,点击「单元格属性>形态」,设置为「数据字典」,将其显示值设为「运货商」表中的「公司名称」字段。 - 由于报表块中的数据与下拉框数据字典绑定的数据并不是来源于同一个数据集,它们之间不存在过滤关系,所以需要手动为单元格添加过滤条件。
双击「订单 ID」所在的 A2 单元格,弹出数据列设置界面,选择「过滤」界面,添加三个过滤条件,条件之间用 AND 连接:
条件一:「地区」列等于 F(x)if(len($area)== 0,nofilter,$area)
条件二:「城市」列等于 F(x)if(len($city)== 0,nofilter,$city)
条件三:「公司名称」列等于 F(x)if(len($customer)==0,nofilter,$customer)
注1:参数 $customer 可以直接引用「下拉框控件」customer 的值。
注2:公式中 nofilter 是不过滤的意思,即参数为空时不过滤显示全部数据,参数不为空时,显示出相应数据。 - 保存报表,点击「PC端预览」。
决策报表控件实现点击查询按钮后才能查询
实现效果:通过点击「查询按钮」来触发查询动作。
- 点击设计器左上角「文件>新建决策报表」,新建空白模板。
- 点击顶部菜单栏「模板>PC端自适应属性」,将报表布局设置为「绝对布局」。
- 向 body 中分别拖入标签控件、下拉复选框控件、按钮控件、报表块,调整到合适大小和布局。
- 选中标签控件,设置控件值为字符串 序列查询:
- 选中下拉复选框控件,设置控件名称为 a ,数据字典类型为「自定义」。
- 在事件中添加一个编辑结束事件,输入 JavaScript 代码:
return false;
- 选中按钮控件,将按钮名字修改为「查询」。
注:控件工具栏中的「查询按钮」控件只能在参数面板中使用,所以这里用「按钮控件」来实现查询按钮。 - 添加一个点击事件,输入 JavaScript 代码如下:
var a=_g().getWidgetByName('a').getValue(); // 获取下拉复选框控件 a 的值 _g().getWidgetByName("report0").gotoPage(1,"{a:'"+a+"'}",true); //将 a 的值作为参数传递给 report0 报表块
注:若需要传递多个参数,gotoPage 写法为 gotoPage(1,“{a:‘参数值’, b:‘参数值’}”,true) 。 - 本例中下拉复选框控件返回值为「数组」,那么给报表块的 A1 单元格添加公式 split($a,“,”) ,表示返回由逗号分割的字符串数组。再设置「单元格属性>扩展」中的扩展方向为「纵向扩展」,那么下拉框多选时,返回的值可纵向排列展示。
- 保存报表,点击「PC端预览」。
查询不同时间周期的数据
实现效果:决策报表查询指定区间日期数据时,希望可以通过点击按钮( 不在参数面板 )查询到最近的数据,如,近7天、近14天。
- 新建决策报表,新建数据集 ds1,SQL查询语句如下:
SELECT * FROM 订单 where 1=1
,
SELECT * FROM 订单 where 1=1
,
${if(len(endtime)=0,""," and 订购日期<='"+endtime+"'")}
- 设计报表样式。
- 绑定折线图数据。
- 选中开始时间日期控件,控件名称重命名为starttime,设置一个默认的日期控件值。
- 选中结束时间日期控件,控件名称重命名为endtime,设置一个默认的日期控件值。
- 以近七天按钮为例,添加 JS 点击事件,近14天按钮同理设置,只需要改下定义开始时间的公式即可。
JS 代码如下:var K1='${=date(2011,6,22)-7}';//定义开始时间 //alert(K1); _g().getWidgetByName("starttime").setValue(K1);//把K1值赋给开始时间控件 _g().getWidgetByName("starttime").fireEvent("afteredit");//触发开始控件的编辑后事件
- 保存报表,点击PC端预览。