Metabase学习教程:视图-8

news2025/7/5 3:37:32

漏斗图

使用漏斗图显示步骤的进度。

图1。我们将用示例数据库构建一个漏斗图。

漏斗图用一系列台阶显示了指标。通常,它们用于显示有多少人通过特定的序列(如网站上的结帐流程)完成。第一步是多少人访问你的网站。然后有多少人浏览了一个产品页面(步骤2),有多少人将该商品添加到购物车(步骤3),等等。

我们将介绍如何使用安装中附带的示例数据库在Metabase中构建漏斗图,以便您可以继续进行。我们将在查询生成器和sql编辑器中显示示例:

  • 查询生成器
  • SQl编辑器

示例数据库不包含事件;它只有四个表,包含订单、产品和客户信息。所以我们得有点创意来给漏斗图举些例子。

使用查询生成器的漏斗图示例

这是一个人为的例子。我们将假设漏斗中的步骤是产品类别(因为我们的示例数据库中没有类似于状态、页面或其他进展的内容)。这是查询编辑器,我们的疑问是:

图2。漏斗图查询的查询编辑器。

我们所做的就是加入OrdersProducts表格(请参见在元数据库中联接),汇总订单计数,并按产品类别对这些计数进行分组。然后我们按计数、降序对结果进行排序。为了得到漏斗图,我们点击可视化在左下角,选中漏斗。在漏斗图的设置中,在数据选项卡,可以设置台阶(在本例中,我们使用的是产品类别)和指标(订单数量)。

图3.(相当胖的)漏斗图,在漏斗中使用类别作为步骤。

注意在设置->显示选项卡,您可以更改漏斗式条形图,这是另一种有效的数据表示方式。漏斗图的优势(除了视觉隐喻之外)是Metabase还将显示通过每个步骤的度量的百分比。

使用自定义列对步骤进行排序

如果每个步骤中的计数没有自然减少,则可能需要手动对步骤进行排序,以保持步骤的实际进度。例如,如果在连续的步骤中使用相同的计数,那么这些步骤可能会在漏斗图中进行交换,就像Metabase默认按字母顺序对步骤进行排序以打破这种情况。同样地,如果你有漏斗,它可以在特定的步数上扩展(例如,新的人在中途进入漏斗),漏斗将默认为递减计数,这会扰乱你的步序。

在这些情况下,您可以创建一个额外的列来对步骤进行编号,并按步骤进行排序以实施正确的漏斗序列。以上面的查询为例,我们可以通过添加另一列来修改它以保留序列,然后按下一步.

图4。使用自定义表达式创建自定义列,以指定漏斗中的步骤顺序。

下面是图4中使用的自定义表达式:

case([Products - Product Name → Category] = "Widget", 1, [Products - Product Name → Category] = "Gadget", 2, [Products - Product Name → Category] = "Gizmo", 3, [Products - Product Name → Category] = "Doohickey", 4)

基本上,我们说小部件是漏斗的第一步,小工具是第二步,依此类推。

使用SQL的漏斗图示例

另一个使用示例数据库的人为示例:假设我们了解到,拥有最高生命周期价值的客户是那些从我们所有四个产品类别下订单的客户:dooickeysGadgetsgizmoWidgets所以在这个例子中,我们想看看我们的客户是如何根据他们订购的不同种类的产品来划分的。

这里要做的一个关键区别是,我们不想看到客户的分布情况,也就是说,我们不想查看是否有多少客户从一个产品类别订购,有多少订单来自两个类别,等等。我们将把所有为任何类别下订单的客户作为第一步。下一步,我们将筛选出至少有两个产品类别、三个类别和四个类别的订单的客户。

假设我们有一个客户池,有100个客户下订单。桌子看起来像这样:

| Step: number of categories    | Count of customers |

|:------------------------------|:-------------------|

| Ordered from one category     | 100                |

| Ordered from two categories   | 70                 |

| Ordered from three categories | 40                 |

| Ordered from four categories  | 20                 |

我们的计划是:使用通用表表达式,每次查询都会进一步细化我们的结果。那我们就UNION将所有结果放入单个结果表中。

我们将从获取从我们这里订购的所有客户开始,并将该查询放入CTE中以构建另一个子查询。在下面的代码块中,我们调用第一个子查询starting_data。若要获取客户的第一步,我们将创建一个新的子查询cat_one,它将基于starting_data.

WITH starting_data

     AS (SELECT people.id,

                products.category

         FROM   people

                JOIN orders

                  ON people.id = orders.user_id

                JOIN products

                  ON orders.product_id = products.id

         GROUP  BY people.id,

                   products.category

         ORDER  BY people.id),

     cat_one

     AS (SELECT id,

                Count(id) AS cats

         FROM   starting_data

         GROUP  BY id

         HAVING cats > 0

         ORDER  BY id)

在接下来的两个步骤中,我们将采用相同的方法(即,在前面的结果基础上逐步构建):

WITH starting_data

     AS (SELECT people.id,

                products.category

         FROM   people

                JOIN orders

                  ON people.id = orders.user_id

                JOIN products

                  ON orders.product_id = products.id

         GROUP  BY people.id,

                   products.category

         ORDER  BY people.id),

     cat_one

     AS (SELECT id,

                Count(id) AS cats

         FROM   starting_data

         GROUP  BY id

         HAVING cats >= 0

         ORDER  BY id),

     -- People who ordered from at least two categories

     cat_two

     AS (SELECT id,

                Count(id) AS cats

         FROM   cat_one

         GROUP  BY id

         HAVING cats > 1

         ORDER  BY id),

     -- People who ordered from at least three categories

     cat_three

     AS (SELECT id,

                Count(id) AS cats

         FROM   cat_one

         GROUP  BY id

         HAVING cats > 2

         ORDER  BY id),

     -- People who ordered from at least four categories

     cat_four

     AS (SELECT id,

                Count(id) AS cats

         FROM   cat_one

         GROUP  BY id

         HAVING cats > 3

         ORDER  BY id)

现在我们有了四个结果:cat_onecat_twocat_threecat_four,我们需要将这些结果合并到一个结果表中。我们将使用UNION合并结果。

-- Now we union these four results to produce a single table

-- that we'll use to build our funnel chart. The table will have two columns:

-- the Step: number of categories (our step),

-- and the count of customers (our measure).

SELECT 'Ordered from one category' AS "Step: number of categories",

       Count(*)                    AS Customers

FROM   cat_one

UNION

SELECT 'Ordered from two categories' AS "Step: number of categories",

       Count(*)                      AS Customers

FROM   cat_two

UNION

SELECT 'Ordered from three categories' AS "Step: number of categories",

       Count(*)                        AS Customers

FROM   cat_three

UNION

SELECT 'Ordered from four categories' AS "Step: number of categories",

       Count(*)                       AS Customers

FROM   cat_four

ORDER  BY customers DESC

漏斗图查询

以下是完整的查询:

WITH starting_data

     AS (SELECT people.id,

                products.category

         FROM   people

                JOIN orders

                  ON people.id = orders.user_id

                JOIN products

                  ON orders.product_id = products.id

         GROUP  BY people.id,

                   products.category

         ORDER  BY people.id),

     cat_one

     AS (SELECT id,

                Count(id) AS cats

         FROM   starting_data

         GROUP  BY id

         HAVING cats >= 0

         ORDER  BY id),

     -- People who ordered from at least two categories

     cat_two

     AS (SELECT id,

                Count(id) AS cats

         FROM   cat_one

         GROUP  BY id

         HAVING cats > 1

         ORDER  BY id),

     -- People who ordered from at least three categories

     cat_three

     AS (SELECT id,

                Count(id) AS cats

         FROM   cat_one

         GROUP  BY id

         HAVING cats > 2

         ORDER  BY id),

     -- People who ordered from at least four categories

     cat_four

     AS (SELECT id,

                Count(id) AS cats

         FROM   cat_one

         GROUP  BY id

         HAVING cats > 3

         ORDER  BY id)

-- Now we union these four results to produce a single table

-- that we'll use to build our funnel chart. The table will have two columns:

-- the Step: number of categories (our step),

-- and the count of customers (our measure).

SELECT 'Ordered from one category' AS "Step: number of categories",

       Count(*)                    AS Customers

FROM   cat_one

UNION

SELECT 'Ordered from two categories' AS "Step: number of categories",

       Count(*)                      AS Customers

FROM   cat_two

UNION

SELECT 'Ordered from three categories' AS "Step: number of categories",

       Count(*)                        AS Customers

FROM   cat_three

UNION

SELECT 'Ordered from four categories' AS "Step: number of categories",

       Count(*)                       AS Customers

FROM   cat_four

ORDER  BY customers DESC

这将产生:

| Step: number of categories    | CUSTOMERS |

|-------------------------------|-----------|

| Ordered from one category     | 1,746     |

| Ordered from two categories   | 1,632     |

| Ordered from three categories | 1,428     |

| Ordered from four categories  | 1,031     |

现在我们要做的就是点击可视化在左下角选择漏斗.

如果你打开设置选项卡,您可以更改台阶或者测量。在显示选项卡,您可以将图表从漏斗更改为条形图(尽管如前所述,您将丢失视觉隐喻和度量相对于第一步的百分比)。

图5漏斗选项数据选项卡用于设置台阶测量.

SQL中保持步骤的排序

上面的查询生成器,要强制执行步骤顺序,您可以添加一个附加列(我们将其称为“step”

SELECT 'Ordered from one category' AS "Step: number of categories",

       Count(*)                    AS Customers,

       1 as step

FROM   cat_one

UNION

SELECT 'Ordered from two categories' AS "Step: number of categories",

       Count(*)                      AS Customers,

       2 as step

FROM   cat_two

UNION

SELECT 'Ordered from three categories' AS "Step: number of categories",

       Count(*)                        AS Customers,

       3 as step

FROM   cat_three

UNION

SELECT 'Ordered from four categories' AS "Step: number of categories",

       Count(*)                       AS Customers,

       4 as step

FROM   cat_four

ORDER  BY step

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

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

相关文章

【笔记】ABAQUS弹塑性分析

1. 弹塑性分析的主要问题 1.1 elastic-plastic deform behavior abaqus 默认的塑性表现行为是金属材料经典塑性理论,采用mises屈服面定义各向同性屈服。 一般金属材料都是各向同性材料,弹塑性行为: 小应变时,材料表现为线弹性&…

【5G MAC】随机接入流程中的 Msg2 (RAR)

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

FL Studio水果2023版本更新下载汉化教程

Image-Line宣布针对Win和Mac版本的数字音频工作站FL Studio的21版本更新。FL Studio2023是一个完整的软件音乐制作环境或数字音频工作站(DAW)。代表超过 23年的创新发展,它包含了您在一个包装中编排,编排,录制&#xf…

cocos creator实现浏览星球的功能,附源码

预览效果: 技术要点: 主摄像机的视场轴需要设置为水平。在场景下创建一个空节点用于挂载控制器脚本图片已进行各概念的说明 在“collisionNodeArray”属性下,放置需要点击的星球节点,系统会自己绑定碰撞器。 也可自己提前绑定。 布…

基于SSM的学籍证明打印系统设计与实现。

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

QT下TCP协议实现数据网络传输

QT开发框架以其跨平台的优势,在全世界IT界如雷贯耳。其封装了功能齐全的各种类,大大的提高了开发者的效率。本篇内容将介绍如何使用QT 6.4.1框架开发服务器和客户端程序,让两端能够首发消息,服务端往客户端发送文件(客…

Spark在Yarn集群的两种提交模式

目录 一.Yarn Client(yarn的客户端模式) 二.Yarn Cluster(yarn的集群节点模式) 三.两者的差异 一.Yarn Client(yarn的客户端模式) 第一步:Driver端会在提交的本地机上运行 第二步:Driver端启动后会跟ResourceManager(RM)进行通信,申请启动一个Applic…

Linux安装Samba服务,基于Fedora

Linux安装Samba服务,基于Fedora1 安装samba服务2 启动samba服务3 更改配置信息4 使用windows系统进行连接5 其他说明1 安装samba服务 1 关闭防火墙及关闭防火墙开机自启 [whs02fedora ~]$ :sudo systemctl stop firewalld.service [whs02fedora ~]$ &a…

splay树:hdu4453 Looploop

题目链接如下: Problem - 4453 主要是要对区间操作和这种splay树的性质比较清楚。 关于区间我们设立两个额外节点,用来设立最开始的左右区间。 性质方面,其实就是二叉搜索树的性质,这里的体现就是中序遍历就是顺时针访问输入数…

《统计学习方法》 第十四章 聚类方法

聚类方法 1.聚类是针对给定的样本,依据它们属性的相似度或距离,将其归并到若干个“类”或“簇”的数据分析问题。一个类是样本的一个子集。直观上,相似的样本聚集在同类,不相似的样本分散在不同类。 2.距离或相似度度量在聚类中…

压力传感器

压力传感器 压力传感器是最常用的一种传感器,其应用范围有各种工业互通环境,涉及航空,航天,军工,石化,电力等。按照不同的测试,压力类型可分表压传感器,差压传感器,绝压…

现代密码学导论-19-基于伪随机函数的CPA安全

目录 3.5.2 基于伪随机函数的CPA安全 基于伪随机函数的加密示意图 CONSTRUCTION 3.28 构造基于伪随机函数的CPA安全的加密方案 THEOREM 3.29 方案3.28是CPA安全的 THEOREM 3.29 的证明 3.5.2 基于伪随机函数的CPA安全 基于伪随机函数的加密示意图 CONSTRUCTION 3.28 构造…

历史中的密码

角色 发送者、接收者和窃听者 当某个人向另一个人发送信息时,发出信息的人称为发送者,而收到信息的人称为接收者,被发送的信息有时也统称为消息( message )。 窃听者 Eve 并不一定是人类,有可能是安装在通信设备上的某…

【JVM】jvm中的方法区简介

jvm中的方法区简介一、JVM体系结构二、方法区是什么?三、方法区能干什么?四、方法区总结一、JVM体系结构 二、方法区是什么? 本文所讲内容在上图中处于运行时数据区内的左侧部分,即 Method Area(方法区)&a…

REHL7.6静默安装Oracle19C

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA工作经验 一位上进心十足的【大数据领域博主】!😜&#x1f61…

【轨迹跟踪】基于matlab拓展卡尔曼滤波时序四旋翼无人机状态跟踪【含Matlab源码 2246期】

⛄一、拓展卡尔曼滤波时序四旋翼无人机状态跟踪 卡尔曼滤波算法为获得最优估计和最小误差方差,将从目标模型中得到的测量值一步步递推,实时获取新时刻的状态估计值。 假设目标状态方程和观测方程分别为: 其中,k为离散时间&…

投入产出公开数据集:世界投入产出表(1995-2014)、全国投入产出表(1990-2018)、分省市投入产出表(1997-2017)

一、数据介绍 数据名称:世界、全国、各省-投入产出表 数据年份:世界投入产出表(1995-2014)、全国投入产出表(1990-2018)、分省市投入产出表(1997-2017) 数据来源:WIOD、自计算 ① 世界投入产出表(1995-2014) downlo…

用JSX来写Vue3,瞬间找到React 的感觉

Ⅰ. vue3 的 JSX 写法 对于熟悉react 的小伙伴, 可以通过 jsx 来 做 vue3喜欢 jsx 写法做 vue,代码结构更加美观,让我们一起来踩坑 👇 文章目录Ⅰ. vue3 的 JSX 写法Ⅱ. JSX 安装和配置1. 通过 webpack 构建的2. 通过 vite 构建的Ⅳ. JSX 的…

Yocto buildhistory介绍

Yocto buildhistory介绍 在yocto中会频繁的编译修改镜像,当多人多次修改镜像的时候会导致镜像难以维护,我们希望能有一个类似git一样的工具能够显示每次编译的差异性修改,这样当我想要回退到某个日期的某个镜像时能够清晰的知道镜像内部的具…

Dockerfile文件详解

组成部分 说明 基础镜像信息 使用 FROM 关键字指定基础镜像信息,必须是 Dockerfile 文件的第1条指令。 维护者信息 使用 MAINTAINER 关键字指定,可以使用 Dockerfile 文件创建者的姓名或者电子邮件作为维护者信息。 镜像操作指令 每执行一条镜像操…