帆软 FineReport 绘制漏斗图

news2024/12/24 11:32:34

七一建党节,祝党生日快乐!
夏日炎炎,周末在家,想起在用帆软做页面展示的时候,使用到了漏斗图,记录下来,方便查看。
以订单销量变化为例,分为五个阶段,商品浏览人数,点击商品人数,创建订单人数,加入购物车人数和支付订单任务等,来实现效果。展示效果大致如下图所示。
在这里插入图片描述

第一步、构造基本列表

新建数据集,根据五个阶段来组装SQL,即通过union连接后再group by 实现统计,查询SQL如下所示,仅做参考,可根据具体业务调整。

select 
data_type,
sum(aa.pvNum) as pvNum,
sum(aa.clickNum) as clickNum,
sum(aa.createNum) as createNum,
sum(aa.cartNum) as cartNum,
sum(aa.payNum) as payNum
from (
SELECT 
        '商品浏览人数' AS 'data_type',
         COUNT(*) AS pvNum,
				0 AS clickNum,
        0 AS createNum,
        0 AS cartNum,
				0 AS payNum
    FROM
        tb_order
    WHERE
        1 = 1 
        AND DATE_FORMAT(created_time, '%Y-%m-%d') >= DATE_ADD('${beginDate}', INTERVAL 1 DAY)
        AND DATE_FORMAT(created_time, '%Y-%m-%d') <= DATE_ADD('${endDate}', INTERVAL 1 DAY)
	UNION ALL 
		SELECT 
        '点击商品人数' AS 'data_type',
				0 AS pvNum,
        COUNT(*) AS clickNum,
				0 AS createNum,
        0 AS cartNum,
				0 AS payNum
    FROM
			tb_order
    WHERE
        1 = 1 
		and order_status IN ('CO','OP','FN')
        AND DATE_FORMAT(created_time, '%Y-%m-%d') >= DATE_ADD('${beginDate}', INTERVAL 1 DAY)
        AND DATE_FORMAT(created_time, '%Y-%m-%d') <= DATE_ADD('${endDate}', INTERVAL 1 DAY)
	UNION ALL 
		SELECT 
        '创建订单人数' AS 'data_type',
				0 AS pvNum,
        0 AS clickNum,
        COUNT(*) AS createNum,
				0 AS cartNum,
				0 AS payNum
    FROM
         tb_order
    WHERE
        1 = 1 
	and order_status = 'CO'
	AND DATE_FORMAT(created_time, '%Y-%m-%d') >= DATE_ADD('${beginDate}', INTERVAL 1 DAY)
	AND DATE_FORMAT(created_time, '%Y-%m-%d') <= DATE_ADD('${endDate}', INTERVAL 1 DAY)
	UNION ALL 
	SELECT 
        '加入购物车人数' AS 'data_type',
				0 AS pvNum,
        0 AS clickNum,
        0 AS createNum,
        COUNT(*) AS cartNum,
				0 AS payNum
    FROM
         tb_order
    WHERE
        1 = 1 
	and order_status = 'CA'
	AND DATE_FORMAT(created_time, '%Y-%m-%d') >= DATE_ADD('${beginDate}', INTERVAL 1 DAY)
	AND DATE_FORMAT(created_time, '%Y-%m-%d') <= DATE_ADD('${endDate}', INTERVAL 1 DAY)
UNION ALL 
	SELECT 
        '支付订单人数' AS 'data_type',
				0 AS pvNum,
        0 AS clickNum,
        0 AS createNum,
        0 AS cartNum,
        COUNT(*) AS payNum
    FROM
         tb_order
    WHERE
        1 = 1 
	and order_status = 'OP'
	AND DATE_FORMAT(created_time, '%Y-%m-%d') >= DATE_ADD('${beginDate}', INTERVAL 1 DAY)
	AND DATE_FORMAT(created_time, '%Y-%m-%d') <= DATE_ADD('${endDate}', INTERVAL 1 DAY)
) aa

绘制列表,对应字段绑定,效果如下图所示。
在这里插入图片描述
在浏览器预览效果如下。
在这里插入图片描述

第二步、绘制漏斗图

在列表下方单元格,点击属性列表,选择插入元素-插入图表,在类型中选择漏斗图(新特性),操作如下图所示。
在这里插入图片描述
构造数据源,类似的,五个阶段要分别拼接,展示值和对应的显示名要分开,即 key-values形式,注意要添加排序字段。

SELECT 
    data_type, num
FROM
    (SELECT 
        '商品浏览人数' AS 'data_type',
            COUNT(*) AS num,
            1 AS ordSeq
    FROM
        tb_order
    WHERE
        1 = 1 
        AND DATE_FORMAT(created_time, '%Y-%m-%d') >= DATE_ADD('${beginDate}', INTERVAL 1 DAY)
        AND DATE_FORMAT(created_time, '%Y-%m-%d') <= DATE_ADD('${endDate}', INTERVAL 1 DAY)
	UNION ALL 
		SELECT 
        '点击商品人数' AS 'data_type',
            COUNT(*) AS num,
            2 AS ordSeq
    FROM
			tb_order
    WHERE
        1 = 1 
        and order_status IN ('CO','OP','FN')
        AND DATE_FORMAT(created_time, '%Y-%m-%d') >= DATE_ADD('${beginDate}', INTERVAL 1 DAY)
        AND DATE_FORMAT(created_time, '%Y-%m-%d') <= DATE_ADD('${endDate}', INTERVAL 1 DAY)
	UNION ALL 
		SELECT 
        '创建订单人数' AS 'data_type',
            COUNT(*) AS num,
            3 AS ordSeq
    FROM
         tb_order
    WHERE
        1 = 1 
        and order_status = 'CO'
	AND DATE_FORMAT(created_time, '%Y-%m-%d') >= DATE_ADD('${beginDate}', INTERVAL 1 DAY)
	AND DATE_FORMAT(created_time, '%Y-%m-%d') <= DATE_ADD('${endDate}', INTERVAL 1 DAY)
	UNION ALL 
	SELECT 
        '加入购物车人数' AS 'data_type',
            COUNT(*) AS num,
            4 AS ordSeq
    FROM
         tb_order
    WHERE
        1 = 1 
      and order_status = 'CA'
	AND DATE_FORMAT(created_time, '%Y-%m-%d') >= DATE_ADD('${beginDate}', INTERVAL 1 DAY)
	AND DATE_FORMAT(created_time, '%Y-%m-%d') <= DATE_ADD('${endDate}', INTERVAL 1 DAY)
UNION ALL 
	SELECT 
        '支付订单人数' AS 'data_type',
            COUNT(*) AS num,
            5 AS ordSeq
    FROM
         tb_order
    WHERE
        1 = 1 
     and order_status = 'OP'
	AND DATE_FORMAT(created_time, '%Y-%m-%d') >= DATE_ADD('${beginDate}', INTERVAL 1 DAY)
	AND DATE_FORMAT(created_time, '%Y-%m-%d') <= DATE_ADD('${endDate}', INTERVAL 1 DAY)
    ) main
ORDER BY ordSeq asc
;

编辑栏-数据,数据来源选择数据集数据,即上一步新建的,选择使用字段值,指定系列名和值,效果如下所示。
在这里插入图片描述
编辑栏-样式,可设置漏斗图的标题,图例等信息,效果所下图所示。
在这里插入图片描述
放大图的范围,即选中区域后,合并单元格,如下图所示。
在这里插入图片描述
图例页签下,勾选图例可见,在浏览器预览效果如下图所示。
在这里插入图片描述
比如可以使用标签,在编辑栏-格式,标签下-标签,使用标签
在这里插入图片描述
在浏览器展示效果如下图所示。
在这里插入图片描述
以上就是漏斗图添加的过程,帆软自带有很多属性,可以调试查看效果,祝好!

异常处理

【1】结果显示乱码,如????
处理方案
在数据库连接后指定编码方式为 utf8
在这里插入图片描述

?useUnicode=true&characterEncoding=utf8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/707921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

fastadmin给操作按钮添加权限菜单控制|新增权限控制菜单

1、在对应的控制器文件中&#xff0c;添加如下代码&#xff1a; $adminIds $this->getDataLimitAdminIds(); if (is_array($adminIds)) {if (!in_array($row[$this->dataLimitField], $adminIds)) {$this->error(__(You have no permission));} } 2、在对应的index…

Redis实战篇(三)

四.分布式锁 4.1.分布式锁概述 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。分布式锁的核心思想就是让大家都使用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;那么我们就能锁住线程&#xff0c;不让线程并行&#xff0c;让程序串行…

通过简数实现全网文章采集的方法简介

简数是一款全网文章采集工具&#xff0c;旨在帮助站长通过设置关键词来进行全网文章采集。然而&#xff0c;使用简数可能会有一些相对复杂的操作&#xff0c;导致站长在学习和使用过程中面临较高的学习成本&#xff0c;因为其中涉及到许多专业术语和功能的作用不明确。鉴于这一…

Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案

文章目录 环境目的Screen Space - Overlay优化限制该方案起源 环境 Unity : 2020.3.37f1 Pipeline : BRP &#xff08;另一个项目在 2021.1.xx 的 LTS 下的 URP 管线同样如此&#xff0c;目测&#xff1a;因为 UGUI 不受渲染管线切换而变化&#xff09; 目的 便于索引&#…

IDEA启动Tomcat控制台乱码问题解决方法

最近项目需要用到Tomcat跑一个项目&#xff0c;但是开发Sprintboot项目久了&#xff0c;也很少用Tomcat&#xff0c;因为Springboot是集成Tomcat等中间件的&#xff0c;所以不需要下载Tomcat&#xff0c;好了&#xff0c;回归真题&#xff0c;本博客介绍跑Tomcat过程遇到的控制…

信道编码【编码、纠错检错】

差错控制的基本概念--数字信号在传输过程中&#xff0c;由于信道传输特性不理想及加性噪声的影响&#xff0c;不可避免地会发生错误。 可通过以下三方面的措施来减小误码率&#xff1a;1&#xff09;提高信道容量&#xff1b;2&#xff09;降低编码效率&#xff1b;3&#xff…

Binder系列--ServiceManager的启动

ServiceManager的启动 hongxi.zhu Android 13 主要流程&#xff1a; 1. 启动ServiceManager进程 ServiceManager是由init(pid 1)进程启动的 system/core/rootdir/init.rc on init......# Start essential services.start servicemanager //framework层使用start hwservic…

Linux | Ubuntu卸载QQ

Linux | Ubuntu卸载QQ 终端输入&#xff1a; dpkg -l| grep qq如下图&#xff0c;找到QQ文件&#xff1a; 删除命令&#xff1a; sudo apt-get --purge remove 文件名在终端输入&#xff1a; sudo apt-get --purge remove libqqwing2v5:amd64如下图删除成功

【Java程序设计实训】基于B/S架构的MyShop商城

MYSHOP商城 实验目的实验概述系统功能概述Myshop 商城概述系统开发分析功能列表系统用例图系统活动图 数据库设计运作界面展示用户管理模块新用户注册用户登录商城首页与用户退出 商品模块商品分页展示查看商品详情信息 购物车模块空购物车页面加入商品到购物车 订单模块提交订…

4.32UDP通信实现 4.33广播 4.34组播 4.35本地套接字通信

4.32UDP通信实现 ![在这 udp_client.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <arpa/inet.h>int main() {// 1.创建一个通信的socketint fd socket(PF_INET, SOCK_DGRAM, 0);if(fd -1) {…

springboot项目外卖管理 day08-缓存优化

文章目录 一、缓存优化问题说明环境搭建导入maven坐标配置yml文件设置序列化器&#xff0c;编写配置类 缓存短信验证码缓存菜品数据实现思路 SpringCacheSpring Cache介绍Spring Cache常用注解Spring Cache使用方式 缓存套餐数据实现思路 一、缓存优化 问题说明 环境搭建 导入…

【Framework】startService启动流程

前言 启动service有两种方式&#xff1a;startService和bindService。 这一篇先讲startService&#xff0c;读者如果只想看流程图&#xff0c;可以直接跳到总结。 1. ContextImpl 代码路径&#xff1a;frameworks\base\core\java\android\app\ContextImpl.java 1.1 startServ…

SHA-256算法及示例

1. 引言 SHA-256&#xff08;安全哈希算法&#xff0c;FIPS 182-2&#xff09;是密码学哈希函数&#xff0c;其摘要长度为256位。SHA-256为keyless哈希函数&#xff0c;即为MDC&#xff08;Manipulation Detection Code&#xff09;。【MAC消息认证码有key&#xff0c;不是key…

【数据库】外键的作用

前言 说到外键&#xff0c;一般就会牵扯出约束。不谈约束&#xff0c;起始外键就是一个普通的字段&#xff08;Column&#xff09;&#xff0c;起到一个关联的作用。 先把约束放一边&#xff0c;看看外键有哪些作用。 建立表中记录的一对一的关系 学生表&#xff1a; 手机表…

C++引用计数

文章目录 1. 什么是引用计数2. 引用计数的实现3. 示例代码 1. 什么是引用计数 引用计数&#xff08;reference count&#xff09;的核心思想是使用一个计数器来标识当前指针指向的对象被多少类的对象所使用&#xff08;即记录指针指向对象被引用的次数&#xff09;。它允许有多…

Linux--查找文件指令:find

语法&#xff1a; find pathname -name 文件名 示例&#xff1a; 从根目录下开始查找名字中带file.txt文件的路径

C++思维导图以及作业

定义一个命名空间Myspace&#xff0c;包含以下函数&#xff1a;将一个字符串中的所有单词进行反转&#xff0c;并输出反转后的结果。例如&#xff0c;输入字符串为"Hello World"&#xff0c;输出结果为"olleH dlroW"&#xff0c;并在主函数内测试该函数。 …

战略书籍排行榜前五名

战略管理对企业的重要性不言而喻。有效的战略管理可以帮助企业确定未来的方向和目标、制定长期发展规划、提高企业的竞争力和获得市场份额。本文推荐的这5本优秀的战略管理类书籍&#xff0c;每一本都有其独特的思想和实践价值&#xff0c;值得企业管理者借鉴和学习。 战略书籍…

Leetcode---351周赛

周赛题目 2748. 美丽下标对的数目 2749. 得到整数零需要执行的最少操作数 2750. 将数组划分成若干好子数组的方式 2751. 机器人碰撞 一、美丽下标对的数目 这题没什么好说的&#xff0c;按照题目的要求直接暴力求解&#xff0c;代码如下 bool gcd(int x,int y){if(x1||y1)…

vue父子组件之间相互控制传值,子组件使用$parent直接控制父组件的值

父子组件之间相互控制传值&#xff0c;子组件控制父组件的值 需求概述 父组件在提交表单后&#xff0c;弹框进行提示&#xff0c;子组件是一个弹框。 vue版本 v2.x 实现原理 在父组件内建立控制器isShowModal&#xff0c;使用v-if来控制子组件的显示与隐藏。在子组件通过…