Metabase学习教程:提问-2 自定义表达式
-
查询编辑器中的自定义表达式
何时应该使用自定义表达式,以及为什么要在Metabase的查询编辑器中利用它们。
在数学中,表达式是符号的集合,它们一起表示一个值。如果你以前使用过电子表格软件,表达式就是公式,比如=SUM(A1,B1).
自定义表达式在Metabase中查询编辑器是强大的工具,可以覆盖绝大多数分析用例,而无需采取SQL语言从工具箱里出来。事实上,使用查询生成器当您使用SQL时无法得到:
• 钻取允许人们过滤器,在单击时显示、放大或透视数据。钻取可用于在查询生成器中编写的问题和模型基于GUI和SQL查询—只要您设置了适当的列类型元数据。
• 可扩展性:使用查询编辑器构建查询允许与您共享问题在不需要了解任何SQL的情况下,从您的问题中学习和构建。
在开发过程中的任何时候都可以通过将现有的简单或自定义问题转换为SQL查询.
有三个地方查询编辑器我们可以使用自定义表达式:
• 自定义列使用函数计算值(如+添加数字)或操作文本(如lower将文本改为小写)。
• 自定义筛选器使用类似的函数contains结果要么是真是假。
• 自定义汇总使用类似的函数count或sum聚合记录.
自定义列
我们可以添加自定义列使用表达式计算新列。让我们看看一个表达式的作用。这是订单来自包含在Metabase中示例数据库。
图1. Metabase包含的示例数据库中的订单表。
假设我们想知道基于税前小计应用于订单的折扣百分比。例如,如果我们给一个10美元的订单打了1美元的折扣,我们希望看到一个列显示我们已经将该订单折扣了10%。
不幸的是,快速扫描预览中的列会告诉我们数据库没有存储该计算(即没有“折扣百分比”列)。我们只有订单的小计和折扣总额。
不过,多亏了数学,我们可以使用折扣总额和订单小计来计算百分比。下面是表达式的作用:我们可以使用表达式计算每行的折扣百分比,并将计算的值存储在新列中。
让我们详细介绍如何创建自定义列。
什么时候在查询编辑器,我们选择自定义列在数据部分.
要计算折扣百分比,我们需要原始合计(即小计+折扣),然后我们需要将折扣除以原始合计,得到折扣百分比。
在表达式中,我们使用方括号引用列。例如,我们可以参考订单数据表组件[折扣]。如果需要引用另一个表中的列,则外键,我们可以使用.在表和列之间,如[表.列](或者您可以选择[表格→ 列]从键入左括号时出现的下拉菜单中([). 例如,我们可以进入[Products.类别]这将决定:[Products→ 类别].
现在,我们只对Orders表中的列感兴趣,因此不需要引用另一个表。下面是表达式(或公式),我们将使用它来计算自定义折扣百分比列:
=[折扣]/[小计]
在中输入该表达式现场公式,然后为新列命名:折扣百分比.
图2。输入字段公式以创建自定义列。
单击“完成”,然后单击可视化按钮看你的新专栏。
因为我们新的折扣百分比列与折扣有关,让我们将列移到优惠列。通过单击列标题并将列拖到目标位置,可以在表上移动列,如下所示:
图3。拖动列以更改其在表可视化中的位置。
因为我们计算的是百分比,所以我们来修改格式,这样更容易阅读。单击折扣百分比去把操作菜单对于列,然后单击齿轮图标设置列格式。
Metabase将滑出设置提要栏格式有选择。我们把款式改成百分比,并将小数位数增加到2。从标题开始折扣百分比占用了大量空间,我们将列重命名为折扣%.
有一个选项可以添加迷你条形图也。这个条形图不会显示100%的百分比;相反,小条形图将显示相对于其他订单折扣百分比的折扣百分比。让我们暂时不讨论迷你条形图。
这是最后一个问题折扣%列:
图4我们完成了折扣%列。
自定义筛选器
Metabase提供了很多现成的筛选选项,但是您可以使用自定义筛选表达式设计更复杂的过滤器。对于创建使用或者声明,这就是我们将在这里讨论的。
通常在查询编辑器,当我们在问题中添加多个筛选器时,Metabase隐式地将这些筛选器与以及操作员。例如,如果我们为巨大的以及过滤空气动力学,我们的问题只会返回两者都是的产品巨大的以及空气动力学它(巨大的空气动力学产物)在代谢酶中不存在示例数据库.
过滤巨大的或者空气动力学,我们将选择自定义表达式从过滤器下拉列表,然后使用contains函数检查产品是否具有巨大的或空气动力学标题里的某个地方。
contains(string1,string2)
contains检查string1是否包含string2。所以字符串1是要检查的绳子(干草堆),以及字符串2是要查找的文本(针)。既然我们想找一个巨大的或空气动力学产品,我们可以写两个contains中间带有OR运算符的表达式:
=contains([title],“巨大”)或contains([title],“空气动力学”)
结果数据集将包含巨大的或空气动力学:
图5.巨大或空气动力学产品。
请注意,自定义筛选器表达式必须始终解析为true或false。如果contains函数,则如果标题具有巨大的或空气动力学否则表达式的计算结果为false。
但是,可以在语句中嵌套不解析为true或false的表达式,例如:
=contains(concat([名字],[姓氏],“向导”)
因为最外层的功能(contains)决定为真或假。但是你不能用concat([名字],[姓氏])作为一个过滤器,因为它将解析为一个文本字符串(尽管您可以使用concat创建一个自定义列,例如全名).
自定义摘要
自定义表达式解锁了许多聚合数据的不同方法。让我们考虑一下分享函数,它以十进制形式返回数据中与条件匹配的行的百分比。例如,假设我们想知道纸制品在我们的产品线中的总百分比,即纸制品在我们的产品线中占多大比例?
首先,我们将选择产品来自示例数据库的表。接下来,我们将单击汇总按钮在查询编辑器然后选择自定义表达式。然后,我们将选择分享从下拉菜单,这将提示我们输入条件。在本例中,我们想知道哪些产品的标题中有“Paper”,因此我们将使用contains要搜索的函数title.
=Share(contains([title],“纸张”))
图6计算纸制品的份额。
然后我们命名我们的表达式(例如。,纸制品百分比)然后点击多恩。单击可视化按钮Metabase将计算纸制品的份额。
要更改格式,请选择设置按钮在左下角设置侧边栏和改变数字选项→ 风格到百分比.
图7。纸张产品的份额,格式为百分比。
把它们放在一起
让我们用表达式来创建一个相当复杂(做作)的问题。假设我们的任务是找出2019年羊毛和棉花产品的月平均净流入量,净流入量是销售价格减去我们为产品支付的成本。换言之:2019年,每售出一件羊毛和棉花产品,我们平均每个月赚多少钱(或亏多少钱)?
为了得到这些有趣的数字,我们需要使用表达式:
• 计算每单位的售价(自定义列)。
• 过滤结果仅包括羊毛或棉制品(定制过滤器),并将这些结果限制在2019年。
• 计算平均净流入量(自定义摘要),并按月份分组。
我们走吧:- 我们创建一个名为price。来计算price,我们将使用表达式将小计除以售出的单元数(数量):
=[小计]/[数量] - 接下来,我们将使用一个定制的过滤器表达式来过滤羊毛和棉花产品(即产品中含有“羊毛”或“棉花”的产品产品名称).
=contains([Products→ title],“羊毛”)或含有([Products→ title],“棉花”) - 我们还将筛选2019年1月1日和2019年12月31日.
- 我们将使用自定义表达式来创建自定义摘要。假设标准零售价为50%(keystone markup)。所以如果price是2美元,我们假设每个单位的产品成本是1美元。考虑到这个假设,我们可以简单地定义每单位售出的净流入量price减去一半price。然后我们将通过计算每个订单的这些数字的平均值来总结这些数据。
=Average([price]-[Products→ price]/2) - 最后,我们将这些订单按订单创建时间按月计算。
这是我们的查询:
图8我们的羊毛和棉质查询。
我们将选择将我们的数据可视化为折线图,我们可以单击它来钻取我们的数据:
图9。钻取织物以查看单个订单。
- 我们创建一个名为price。来计算price,我们将使用表达式将小计除以售出的单元数(数量):