在数学中,表达式是符号的集合,它们一起表示一个值。如果你以前使用过电子表格软件,表达式就是公式,比如=SUM
(A1,B1)
.
自定义表达式在Metabase中查询编辑器是强大的工具,可以覆盖绝大多数分析用例,而无需采取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年,每售出一件羊毛和棉花产品,我们平均每个月赚多少钱(或亏多少钱)?
为了得到这些有趣的数字,我们需要使用表达式:
我们走吧:
price
。来计算price
,我们将使用表达式将小计除以售出的单元数(数量
):=[
小计]/[数量]
羊毛
和棉花
产品(即产品中含有“羊毛”或“棉花”的产品产品名称
).=contains
([Products→ title],“羊毛”)或含有([Products→ title],“棉花”)
2019
年1月1日
和2019
年12月31日
.price
是2美元,我们假设每个单位的产品成本是1美元。考虑到这个假设,我们可以简单地定义每单位售出的净流入量price
减去一半price
。然后我们将通过计算每个订单的这些数字的平均值来总结这些数据。=Average
([price]-[Products→ price]/2)
订单创建时间
按月计算。这是我们的查询:
图8我们的羊毛和棉质查询。
我们将选择将我们的数据可视化为折线图,我们可以单击它来钻取我们的数据:
图9。钻取织物以查看单个订单。