反馈已提交

网络繁忙

条件属性实现折叠树

  • 文档创建者:axing
  • 历史版本:11
  • 最近更新:TW 于 2023-05-23
  • 1. 概述

    1.1 问题描述

    现有的 动态折叠树 报表只能在「数据分析」预览模式下才能生效,如果想要在其他预览模式下也能使用折叠树,该如何实现呢?效果如下图所示:

    折叠树.gif

    1.2 解决思路

    利用「超级链接>动态参数」结合「条件属性>行高」来实现。

    将要点击的分组序号存入动态参数,再判断参数中是否有该分组来实现「行高」的显示与隐藏。

    2. 示例一

    2.1 数据准备

    新建数据集 ds1,数据库查询语句为:SELECT * FROM 销量

    image.png

    2.2 设计报表

    设计表格样式如下图所示:

    image.png

    单元格具体设置如下表所示:

    单元格
    数据列数据设置扩展方向左父格上父格
    A1
    销售员分组纵向默认默认
    B2产品类型列表纵向A1默认
    C2产品分组纵向默认默认
    D2销量分组纵向默认默认

    2.3 设置动态参数

    选中 A1 单元格,点击右侧属性面板「超级链接」,添加一个「动态参数」,参数名为 a ,参数值为「公式」,公式为:IF(LEN($a) = 0, &A1, if(inarray(&A1, split($a, ",")) > 0, joinarray(GREPARRAY(split($a, ","), item != &A1), ","), $a + "," + &A1))

    公式整体说明:初始化时,将 &A1 即要点击的分组序号赋值给动态参数 a,点击某个分组时,返回该分组序号在 a 中的位置,然后将该分组序号从 a 中过滤掉,再次点击时,a 中则没有该分组序号,那么就会返回 0。根据返回的值是否为 0,在条件属性中设置行高进行展开和折叠即可。

    公式分解说明如下表:


    公式
    说明
    LEN($a) = 0初始化时,a 为空,即长度为 0,将 &A1 存入动态参数中
    &A1 获取 A1 单元格扩展后每个值对应的序号
    split($a, ",")返回由逗号分割 a 组成的字符串数组
    inarray(co,array)返回 co 在数组 array 中的位置,如果 co 不在 array 中,则返回 0
    GREPARRAY(array,item != &A1)

    在 array 数组中过滤掉 &A1,形成一个新数组

    JOINARRAY(array,",")返回一个由逗号作为分隔符的字符串
    $a + "," + &A1动态参数 a 拼接逗号和 &A1 组成一个字符串

    步骤如下图所示:

    Snag_58299a5.png

    2.4 设置条件属性

    选中 B2 单元格,点击右侧属性面板「条件属性」,添加两个条件属性,并重命名为「展开」和「折叠」。如下图所示:

    Snag_58e1373.png

    「展开」属性:满足公式条件inarray(&A1, split($a, ",")) > 0时,即点击的分组序号在动态参数 a 中时,行高为 5 毫米。如下图所示:

    Snag_591491b.png

    「折叠」属性:满足公式条件inarray(&A1, split($a, ",")) = 0时,即点击的分组序号不在动态参数 a 中时,行高为 0 毫米。如下图所示:

    Snag_591d32b.png

    2.5 效果预览

    2.5.1 PC 端

    保存报表,点击分页预览,效果如下图所示:

    折叠树.gif

    2.5.2 移动端

    App 端和 HTML5 端均支持,效果如下图所示:

    折叠树1.gif

    2.6 一键折叠/展开功能

    1)在示例一的基础上,若想增加一件折叠和一键展开功能,在第一行插入一行空白行,然后在 A1 单元格输入文字:一键展开,在 B1 单元格输入文字:一键关闭,如下图所示:

    2)A1 单元格设置动态参数,参数名为 a,参数值为 joinarray(range(count(A2)), ","),B1 单元格设置动态参数,参数名为 a,参数值为空即可,如下图所示:


    3. 示例二

    3.1 准备数据

    新建一个内置数据集,如下图所示:

    3.2 设计表格

    1)设计表格,如下图所示:

    2)设置各单元格的扩展方向和左父格,如下表所示:

    单元格扩展方向左父格
    B1、C1合并单元格
    不扩展默认
    D1不扩展默认
    A3不扩展C2
    B2

    纵向扩展

    C2
    C2纵向扩展默认
    C3纵向扩展C2
    D3纵向扩展默认

    3.3 添加动态参数

    在 B2 单元格添加两个动态参数类型的超级链接:

    1)pre:if(find(C2, concatenate($pre, $cur)) > 0, replace(concatenate($pre, $cur), C2, ""), concatenate($pre, $cur))

    以上 pre 参数函数内容是为了获取上次点击的获取的值。(但是如果上次已经点击过一次,则去除点击过的状态)

    2)cur:if(find(C2, concatenate($pre, $cur)) > 0, 1, if(C2 = $cur, 1, C2))

    以上 cur 参数函数内容是为了获取本次点击的获取的值。concatenate 函数详情请参见:字符串拼接函数

    如下图所示:

    3.4 添加条件属性

    在 A3 单元格添加两个条件属性:

    1)条件属性 1:行高为 0:公式为 reverse(or($$$ = $cur, find($$$, $pre) > 0)) 此公式是为了判断当前值如果不是本次或者上次点击的则隐藏起来。

    2)条件属性 2:列宽为 0。

    如下图所示:

    3.5 添加箭头图标

    找两个小图标,如下图所示:

    给 B2 单元格添加两个条件属性:

    条件属性 1:背景选择向下的图片,公式为:reverse(or(C2 = $cur, find(C2, $pre) > 0))

    reverse 函数详情请参见:逻辑函数

    条件属性2:背景为向上的图片,公式为:or(C2 = $cur, find(C2, $pre) > 0)

    3.6 效果预览

    3.6.1 PC 端

    保存报表,点击「分页预览」,效果如下图所示:

    1.gif

    3.6.2 移动端

    保存报表,点击「移动端预览」,同时支持 App 和 HTML5 端,效果如下图所示:

    2.gif

    4. 模板下载

    1)示例一

    已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\primary\DetailReport\条件属性实现折叠树.cpt

    点击下载模板:条件属性实现折叠树.cpt

    2)示例二

    已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\DynamicCol\动态参数实现二级下拉折叠菜单.cpt

    点击下载模板:动态参数实现二级下拉折叠菜单.cpt

    另外附上三级下拉模板,原理同二级下拉一样,只是父格扩展可能稍微比刚刚的复杂一些。

    已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\DynamicCol\动态参数实现三级下拉折叠菜单.cpt

    点击下载模板:动态参数实现三级下拉折叠菜单.cpt

    5. 注意事项

    1)示例一为针对数据库中数据集的方式实现的,示例二为内置数据集的方式实现的,如果是使用 Oracle 数据集,可以用select distinct 大类别,小类别 from 表名 ,然后左联接同一个表,获取里面需要的值数据,然后放置到需要的位置,可能需要配置下过滤等,整体的表就可以做出来了。

    2)由于两种方式均采用了动态参数,在数据过多出现自动的时候,点击折叠/展开会出现自动跳转至第一页的情况,若希望避免此情况出现可以采用不分页的显示数据,详情请参见:不分页显示数据

    3)示例二的方法中的隐藏和显示是按名称来进行判断的,名称相同会归成一类,需要注意区分。

    附件列表


    主题: 报表专题
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持