I have but one .condition(). Timeseries if-then-else with Timelion
oh,Timelion条件,我们几乎不认识你。用时间来解决问题。前段时间,Timelion安静的介绍了.condition()函数,是一个超强的能力。此外,这篇文章的标题是一个完整的谎言,我有多种方式可以调用.condition()。另外一个是.if()。它的作用和.condition()完全相同,但是它更短,所以从这里开始我们使用.if()。
.if()允许我们基于点对比来改变点。它支持小于(lt),小于等于(lte),等于(eq),大于(gt)和大于等于(gte)和点与其它数值进行比较,或其它序列相同点进行比较。
注意:为了本文的目的,我将假设您已经在某一时刻使用了Timelion。如果没有,应用程序本身就内置了一个方便的教程。点击Kibana 5中的友好的狮子图标,他将帮助您学习Timelion针对时间序列的简单语法。好吧,让我们开始讲解。
Easy does it(轻而易举)
让我们简单的开始。.if()有四个参数,现在我们开始使用其中的三个参数。
- operator 从lt,lte,eq,gt,gte中选择一个。您可能会注意到这些与elasticsearch用于范围查询的缩写相同。
- if 您将使用您指定的运算符将原始系列中的每个点与该值进行比较。
- then 如果条件匹配,则将该点设置为此值
在以下屏幕截图中,绿线将始终是我们的原值,我们将为我们的修改系列使用其他颜色。让我们将每个小于500的点都设置0。
.es().if(lt,500,null)
那很简单。我们如何设置每一个超过或大于500的为1000,有效使用二进制序列,1000表示点大于等于500和0表示小于500。我们可以这样串联两个.if()调用
.es().if(lt, 500, null).if(gte, 500, 1000)
但是等等,我们可以使用第四个参数将其缩短到.if()。第四个参数是else,如果条件不匹配,它将该点设置为一个值。所以试试这个
.es().if(lt, 500, 0, 1000)
Cool!这些是基础知识,但是.if()可以超过静态数值比较。阅读on brave soul(在勇敢的灵魂)。
Dynamic? Dynamite!(动态?极好的)
到目前为止,我们已将点数与静态数字进行了比较。如果我们想比较我们的系列与另一个系列怎么办?例如,当系列超过其10点移动平均线时,绘制点为0,否则不显示。下面你会看到我们将.es().mvavg(10)作为if参数传递。这将对移动平均线和原始的.es()系列进行点对点比较。我们前提的另一部分,没有显示,可以通过将null传递给else来实现。
.es().if(gt, .es().mvavg(10), 0, null).points()
是的,没关系,但是我们也可以通过一个系列的then做得更好。我们可以传回原来的系列,并绘制一些竖条,通过使用.bars()而不是.points()来指出系列超过移动平均线的地点。
.es().if(gt, .es().mvavg(10), .es(), null).bars(3)
Altogether now
现在我们采用我们新发现知识,并使用它来获得喜好,就像绘制一个阴影线,绿色的地方,我们超过平均值,红色,小于平均值。
.es().if(gt, .es().mvavg(10), .es(), null).bars(3).color(#BEDB39).label(over), .es().if(lte, .es().mvavg(10), .es(), null).bars(3).color(#c66).label(under)
好,非常好。还在想这个Timelion的所有业务是什么?阅读教程,还需要更多?看看这个视频从Elastic paris聚会并且我会带你一丝不苟的阅读。此外,您可以在尝试用另一方面时,用麦克风看着我。
原文地址:https://www.elastic.co/blog/timeseries-if-then-else-with-timelion