之前看了这篇播文DORIS----漏斗转化分析案例实现_咚动咚的博客-CSDN博客,大致了解了如何计算漏斗分析。如果在这个基础上增加关联属性功能,应该如何实现呢?关联属性的意思是指在在转化的过程中都是同一个商品。比如:点击秒杀活动–>参加活动—>参与秒杀–>秒杀成功—>成功支付的都是同一个商品
另外,这篇博文写的计算方式应该是按照人数计算转化率,如果按次数计算该如何改造呢?
@咚动咚 您要有时间帮忙解答下
语法:
window_funnel(window, mode, timestamp_column, event1, event2, ... , eventN)
漏斗分析函数搜索滑动时间窗口内最大的发生的最大事件序列长度。
-- window :滑动时间窗口大小,单位为秒。
-- mode :保留,目前只支持default。-- 相邻两个事件之间没有时间间隔要求,并且相邻两个事件中可以做其他的事件
-- timestamp_column :指定时间列,类型为DATETIME, 滑动窗口沿着此列工作。
-- eventN :表示事件的布尔表达式。
select
user_id,
window_funnel(3600*24, 'default', event_time, event_id='e1', event_id='e2' , event_id='e4', event_id='e5') as step
from event_info_log
group by user_id
+---------+------+
| user_id | step |
+---------+------+
| u006 | 4 |
| u007 | 2 |
| u005 | 3 |
| u004 | 3 |
| u010 | 0 |
| u001 | 3 |
| u003 | 2 |
| u002 | 3 |
| u008 | 3 |
| u009 | 2 |
+---------+------+
-- 算每一层级的转换率
select
'购买转化漏斗' as funnel_name,
sum(if(step >= 1 ,1,0)) as step1,
sum(if(step >= 2 ,1,0)) as step2,
sum(if(step >= 3 ,1,0)) as step3,
sum(if(step >= 4 ,1,0)) as step4,
round(sum(if(step >= 2 ,1,0))/sum(if(step >= 1 ,1,0)),2) as 'step1->step2_radio',
round(sum(if(step >= 3 ,1,0))/sum(if(step >= 2 ,1,0)),2) as 'step2->step3_radio',
round(sum(if(step >= 4 ,1,0))/sum(if(step >= 3 ,1,0)),2) as 'step3->step4_radio'
from
(
select
user_id,
window_funnel(3600*24, 'default', report_date, event_id='e1', event_id='e2' , event_id='e4', event_id='e5') as step
from event_info_log
where to_date(report_date) = '2022-11-01'
and event_id in('e1','e4','e5','e2')
group by user_id
) as t1
-- res
+--------------------+-------+-------+-------+-------+--------------------+--------------------+--------------------+
| funnel_name | step1 | step2 | step3 | step4 | step1->step2_radio | step2->step3_radio | step3->step4_radio |
+--------------------+-------+-------+-------+-------+--------------------+--------------------+--------------------+
| 购买转化漏斗 | 9 | 9 | 6 | 1 | 1 | 0.67 | 0.17 |
+--------------------+-------+-------+-------+-------+--------------------+--------------------+--------------------+
所有回答麻烦请基于此SQL进行回复,不要复制粘贴概念理论
按照次数来统计的话,可供参考
SELECT
user_id,
count(CASE WHEN event_id='e1' THEN 1 END) as step_1_count,
count(CASE WHEN event_id='e2' THEN 1 END) as step_2_count,
count(CASE WHEN event_id='e4' THEN 1 END) as step_3_count,
count(CASE WHEN event_id='e5' THEN 1 END) as step_4_count,
window_funnel(3600 * 24, 'default', event_time, event_id='e2', before_event_id='e1') as step_2_conversion,
window_funnel(3600 * 24, 'default', event_time, event_id='e4', before_event_id='e2') as step_3_conversion,
window_funnel(3600 * 24, 'default', event_time, event_id='e5', before_event_id='e4') as step_4_conversion
FROM
event_info_log
GROUP BY
user_id;
该问题已经自行解决,分享最终答案给大家
select
d,
sum(if(step >= 1 , 1, 0)) as 启动,
sum(if(step >= 1 , 1, 0) * cnt) as 启动次数,
sum(if(step >= 2 , 1, 0)) as 首页,
sum(if(step >= 2 , 1, 0) * cnt) as 首页次数,
sum(if(step >= 3 , 1, 0)) as 详情,
sum(if(step >= 3 , 1, 0) * cnt) as 详情次数,
sum(if(step >= 4 , 1, 0)) as 下载,
sum(if(step >= 4 , 1, 0) * cnt) as 下载次数,
round(sum(if(step >= 2 , 1, 0))/ sum(if(step >= 1 , 1, 0)), 2) as '启动->首页',
round(sum(if(step >= 3 , 1, 0))/ sum(if(step >= 2 , 1, 0)), 2) as '首页->详情',
round(sum(if(step >= 4 , 1, 0))/ sum(if(step >= 3 , 1, 0)), 2) as '详情->下载'
from
(
select
userid,
count(1) cnt,
to_date(day) as d,
window_funnel(86400,
'default',
day,
event = '启动',
event = '首页',
event = '详情',
event = '下载') as step
from
funnel_test
where
date(day) >= '2023-07-01'
and date(day) <= '2023-07-30'
and (
(event = '启动' )
Or (event = '首页' )
Or (event = '详情' )
Or (event = '下载' )
)
group by
userid, productid, to_date(day)
order by userid, to_date(day)
) as t1
group by d
order by d;
不知道你这个问题是否已经解决, 如果还没有解决的话:
- 第一步,导入数据库: 方式,两种:
- 第一种 指定导入:
source xxx/test.sql
导入sql文件,sql文件实际上是一个脚本文件,里面有多行SQL语句,通过source命令可以批量执行。 (命令导入)sql 文件代码:
comm SMALLINT ) ; CREATE TABLE IF NOT EXISTS salgrade ( grade INT, losal INT, hisal INT ); -- 插入测试数据 —— dept INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK'); INSERT INTO dept VALUES (20,'RESEARCH','DALLAS'); INSERT INTO dept VALUES (30,'SALES','CHICAGO'); INSERT INTO dept VALUES (40,'OPERATIONS','BOSTON'); -- 插入测试数据 —— emp INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20); INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,'1981-2-20',1600,300,30); INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,'1981-2-22',1250,500,30); INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,'1981-4-2',2975,NULL,20); INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,'1981-9-28',1250,1400,30); INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,'1981-5-1',2850,NULL,30); INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,'1981-6-9',2450,NULL,10); INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20); INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10); INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,'1981-9-8',1500,0,30); INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20); INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,'1981-12-3',950,NULL,30); INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,'1981-12-3',3000,NULL,20); INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,'1982-1-23',1300,NULL,10); -- 插入测试数据 —— salgrade INSERT INTO salgrade VALUES (1,700,1200); INSERT INTO salgrade VALUES (2,1201,1400); INSERT INTO salgrade VALUES (3,1401,2000); INSERT INTO salgrade VALUES (4,2001,3000); INSERT INTO salgrade VALUES (5,3001,9999);
新建一个文件命名为test.sql 将上述拷贝进去,导入执行上述语句创建数据库即可
Apache Doris是一种高性能、低延迟、分布式SQL查询引擎,适用于各种复杂的数据分析场景。在业务分析中,漏斗分析是一种经常使用的分析方法,可以帮助企业精确定位业务流程中的瓶颈,从而优化业务流程并提升业务效率。本文将介绍如何利用Apache Doris实现漏斗分析。
漏斗分析需要准备的是一组有序的事件流,这些事件流通常会记录用户在业务过程中执行的不同步骤。在准备数据时,需要将每个步骤的事件数据收集到一张表中,并确保每个事件都能够被唯一地标识,例如每个事件都有一个唯一的ID。此外,需要在事件表中添加一列来标识事件的顺序,以确保数据是有序的。最终的事件表应该包含以下列:
• ID:唯一的事件ID
• Event:事件名称或类型
• Timestamp:事件发生时间
• User:事件关联的用户ID
• Step:事件在漏斗中的顺序
在Apache Doris中创建漏斗模型的步骤如下:
• 创建一个包含所有必要字段的表。该表应包括以下列的定义:
◦ ID:事件标识符
◦ Event:事件名称或类型
◦ Timestamp:事件发生时间
◦ User:事件关联的用户ID
◦ Step:事件在漏斗中的顺序
◦ Result:标识该步骤是否通过漏斗
• 创建漏斗模型,该模型应该包括所有必要的维度和指标。在创建漏斗模型时,需要确保正确地定义漏斗的步骤和排序。
• 在漏斗模型上创建合适的度量,例如通过漏斗的用户数、漏斗的转化率等。
通过Apache Doris查询漏斗模型来执行漏斗分析。下面是一个漏斗分析的示例查询:
SELECT
step,
COUNT(DISTINCT CASE WHEN result=0 THEN user END) AS drop_off,
COUNT(DISTINCT CASE WHEN result=1 AND step=1 THEN user END) AS step1,
COUNT(DISTINCT CASE WHEN result=1 AND step=2 THEN user END) AS step2,
COUNT(DISTINCT CASE WHEN result=1 AND step=3 THEN user END) AS step3
FROM
funnel_table
GROUP BY
step;
在此查询中,我们使用了不同的聚合函数来统计漏斗的不同步骤的用户数,例如COUNT(DISTINCT CASE WHEN result=0 THEN user END),它将统计在第一步停留的用户数量。通过类似的方式,我们可以计算漏斗的每个步骤的用户数量和转化率。
漏斗分析是一种难以避免的业务分析方法,可以帮助企业轻松地发现业务流程中的瓶颈和问题,并对其进行优化。Apache Doris是一个强大的分布式SQL查询引擎,可以支持各种复杂的数据分析场景,包括漏斗分析。通过利用Apache Doris实现漏斗分析,企业可以轻松地收集和分析事件数据,并优化业务流程,从而提高业务效率和准确性。
随着智能手机的普及,移动阅读也变得越来越受欢迎。QQ阅读作为其中的一款阅读软件,在用户中也有着广泛的用户群体。但是,由于QQ阅读的限制,有些用户可能会想要刷机或者强制安装第三方APP。这个问题涉及到许多方面,下面将进行详细探讨。
首先,我们需要明确一点,刷机和强制安装第三方APP都是违反软件使用条款和智能手机操作系统的第一个原则的。因此,我们不建议用户进行这样的行为。刷机和强制安装第三方APP都可能会破坏设备的稳定性、安全性和功能性。如果用户执意要进行这样的操作,那么需要在足够了解相关知识并做好备份的情况下进行操作。
接下来,我们来分析刷机和强制安装第三方APP的两种情况。
一、刷机
刷机是通过更改智能手机的操作系统来实现自己的需求。这意味着你需要将设备的原有操作系统改为其他系统,如更改Android系统为iOS系统、更改iOS系统为安卓系统等。刷机需要具备相关的技术和经验,需要用户了解设备的硬件、操作系统、刷机工具等信息,对于新手来说,这是一项十分复杂的操作。此外,刷机在技术层面上是违反智能手机的使用规定的,因此,刷机后可能会出现诸如设备变砖、系统无法启动、丢失数据等问题。
二、强制安装第三方APP
有些用户在使用QQ阅读时,感觉不够方便,想要通过安装其他APP来进行阅读,但是QQ阅读并不支持这样的操作,因此他们尝试通过强制安装第三方APP来实现。强制安装第三方APP需要用户找到相应的APP,并将其下载到设备上,然后打开设备的设置页面,进入应用管理,找到“安装未知来源的应用程序”并打开该选项,然后选择安装包,进行安装。这种方法比较简单,但是需要注意的是,对于一些不明来源的APP,可能会带来安全方面的风险,因此在安装之前需要仔细确认。
总结来说,刷机和强制安装第三方APP都是涉及到安全与稳定性的问题,对设备有潜在的危害,因此我们不建议用户进行这样的操作。如果用户需要阅读其他书籍,可以尝试下载其他阅读软件,而不是通过刷机或强制安装第三方APP来实现。