首先,使用标准SQL,给出您的假设:

有一个简单布局的表EVENTS:

EVENTS

-----------------------------

SESION_ID , EVENT_NAME , TMST

要在某个时间获得执行步骤#1的会话:

-- QUERY 1

SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event1' GROUP BY SESSION_ID;

在这里,我假设event1可以在每个会话中发生一次以上.结果是一个在某个时间演示了event1的唯一会话列表.

为了获得step2和step3,我可以这样做:

-- QUERY 2

SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event2' GROUP BY SESSION_ID;

-- QUERY 3

SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event3' GROUP BY SESSION_ID;

现在,您要按顺序选择执行step1,step2和step3的会话.

更准确地说,您需要计算执行步骤1的会话,然后计算执行步骤2的会话,然后计算执行步骤3的会话.

基本上我们只需要将上面的3个查询与左连接组合在一起,列出进入漏斗的会话以及它们执行的步骤:

-- FUNNEL FOR S1/S2/S3

SELECT

SESSION_ID,

Q1.TMST IS NOT NULL AS PERFORMED_STEP1,

Q2.TMST IS NOT NULL AS PERFORMED_STEP2,

Q3.TMST IS NOT NULL AS PERFORMED_STEP3

FROM

-- QUERY 1

(SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event1' GROUP BY SESSION_ID) AS Q1,

LEFT JOIN

-- QUERY 2

(SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event2' GROUP BY SESSION_ID) AS Q2,

LEFT JOIN

-- QUERY 3

(SELECT SESSION_ID,MIN(TMST) FROM EVENTS WHERE EVENT_NAME='event2' GROUP BY SESSION_ID) AS Q3

-- Q2 & Q3

ON Q2.SESSION_ID=Q3.SESSION_ID AND Q2.TMST

-- Q1 & Q2

ON Q1.SESSION_ID=Q2.SESSION_ID AND Q1.TMST

结果是在步骤1进入漏斗的唯一会话列表,并且可能继续到step2和step3 ……例如:

SESSION_ID_1,TRUE,TRUE,TRUE

SESSION_ID_2,TRUE,TRUE,FALSE

SESSION_ID_3,TRUE,FALSE,FALSE

...

现在我们只需要计算一些统计数据,例如:

SELECT

STEP1_COUNT,

STEP1_COUNT-STEP2_COUNT AS EXIT_AFTER_STEP1,

STEP2_COUNT*100.0/STEP1_COUNT AS PERCENTAGE_TO_STEP2,

STEP2_COUNT-STEP3_COUNT AS EXIT_AFTER_STEP2,

STEP3_COUNT*100.0/STEP2_COUNT AS PERCENTAGE_TO_STEP3,

STEP3_COUNT*100.0/STEP1_COUNT AS COMPLETION_RATE

FROM

(-- QUERY TO COUNT session at each step

SELECT

SUM(CASE WHEN PERFORMED_STEP1 THEN 1 ELSE 0 END) AS STEP1_COUNT,

SUM(CASE WHEN PERFORMED_STEP2 THEN 1 ELSE 0 END) AS STEP2_COUNT,

SUM(CASE WHEN PERFORMED_STEP3 THEN 1 ELSE 0 END) AS STEP3_COUNT

FROM

[... insert the funnel query here ...]

) AS COMPUTE_STEPS

Etvoilà!

现在进行讨论.

第一点,考虑到你采用“集合”(或功能)思维方式而不是“程序化”方法,结果非常简单.不要将数据库可视化为具有列和行的固定表的集合……这是它的实现方式,但它不是您与它交互的方式.这是所有套装,您可以按照您需要的方式安排套装!

第二点,如果您使用MPP数据库,查询将自动优化为并行运行.您甚至不需要以不同方式编写查询,使用map-reduce或其他…我在我的测试数据集上运行了相同的查询,其中包含超过1亿个事件,并在几秒钟内获得结果.

最后但并非最不重要的是,查询打开了无限可能.只需按引用,关键字,登录页面,用户信息和分析的结果进行分组,例如提供最佳转换率!

java编一个漏斗_java – 漏斗分析计算,你如何计算漏斗?相关推荐

  1. java中double身高_用JAVA编一个程序 输入10名同学的身高,找出最高升高,要求使用对象数组类型的带参方法来实现...

    用JAVA编一个程序 输入10名同学的身高,找出最高升高,要求使用对象数组类型的带参方法来实现 关注:285  答案:5  mip版 解决时间 2021-02-05 07:44 提问者女人不需要倾国倾 ...

  2. java 员工类算工资_用java设计一个员工类,可以计算工资个人所得税

    用java设计一个员工类,可以计算工资个人所得税 1. 背景 老师在课上布置了几道java编程题,此为其中之一 2. 题目内容 设计一个员工类.该员工具有下列私有属性:编号,姓名,基本工资,奖金  提 ...

  3. java 十六进制转十进制_JAVA知识-分析JAVA中的重点和难点

    Java中有很多内容在开发项目的过程中并不常用,但是却是很重要的部分,为了避免忘记,今天重新温习了一遍Java中的重点和难点,借此机会记录一下方便以后查找. 本文主要分为以下几个部分: 1.进制的相互 ...

  4. java输入一个数字输出_java 输入一个数字,反转输出这个数字的值(实现方法)

    如下所示: package 第四天; import java.util.Scanner; public class 数字反转 { public static void main(String[] ar ...

  5. java线程内存溢出_Java常见问题分析(内存溢出、内存泄露、线程阻塞等)

    Java垃圾回收机制(GC) 1.1 GC机制作用 1.2 堆内存3代分布(年轻代.老年代.持久代) 1.3 GC分类 1.4 GC过程 Java应用内存问题分析 2.1 Java内存划分 2.2 J ...

  6. java定义一个点_JAVA 定义一个Point类 它的对象是指一个平面上的点(x,y),在定义Point类中要定义它的三个构造函数...

    JAVA 定义一个Point类 它的对象是指一个平面上的点(x,y),在定义Point类中要定义它的三个构造函数 JAVA 定义一个Point类 它的对象是指一个平面上的点(x,y),在定义Point ...

  7. java新建一个女朋友_java创建一个女朋友类(对象啥的new一个就是)==建造者模式,一键重写...

    创建一个女朋友,她有很多的属性,比如:性别,年龄,身高,体重,类型等等,虽然每个女朋友都有这些属性,但是每个人找女朋友的要求都是不一样的,有的人喜欢男的,有的人喜欢女的,有的喜欢胖的,不同的人可以根据 ...

  8. java编一个求圆柱表面积_Java:输入圆柱体的半径和高,计算并输出圆柱体的体积和表面积...

    展开全部 程序如下: package test; import java.util.Scanner; public class TestCircle { public static void main ...

  9. java编一个漏斗_在java中编一个可以输出星号金字形状的程序,挂上详解!重谢...

    展开全部 用星号来打印金字塔,有一62616964757a686964616fe4b893e5b19e31333332643331定的规律: 1.中心对齐: 2.从上往下,每一层的星星个数都是奇数,而 ...

最新文章

  1. Hibernate框架第二天
  2. 踏踏实实做事,老老实实做人
  3. HDU 2612 Find a way
  4. 点击按钮修改背景颜色及节点操作隔行变色案例
  5. JS实时监听DOM元素变化 - MutationObserver
  6. 【公告】社区周刊即日起停刊
  7. 关于DataSet与Strongly typed DataSet几点思考(原创)
  8. enum 在c中的使用
  9. js原生简单生成卡密例子
  10. 老化测试相关知识点介绍
  11. 常见的meta标签用法
  12. 历史大数据证“低薪薄俸”易诱发腐败
  13. 局域网即时通讯软件应该怎么选择
  14. python 画彩虹_python – 在matplotlib中,我如何绘制多色线,如彩虹
  15. 制造企业生产排产现状和APS系统的解决方案
  16. Python3 根据时区获取时间,并计算时间差
  17. 康考迪亚大学应用计算机科学,康考迪亚大学计算机
  18. 数学之美-读书笔记6-10章
  19. 问题:SQL Server数据库不允许更改
  20. 电容屏分类及优缺点介绍

热门文章

  1. 记者:你为什么还不退休? | 任正非:我上午可以喝茶,下午再喝茶就睡不着了...
  2. 一款QQ盗号木马分析
  3. 桂林游记, 终于完成了,
  4. linux查询网卡是百兆还是千兆,查看网卡是百兆还是千兆
  5. 区块链共享经济:为什么可以挑战Uber和Airbnb?
  6. 谷哥学术2022年资源分享下载列表 3/20
  7. 科普文章:公众电磁辐射与防护的研究
  8. 自建ES通过OSS快照迁移至阿里云ES
  9. 传奇服务器需要什么配置?传奇服务器租用价格表
  10. 深度学习图像分类:植物幼苗图像分类入门(Plant Seedlings Classification)