0

我有以下脚本:

let StartTime = datetime(2022-02-18 10:10:00 AM);
let EndTime = datetime(2022-02-18 10:15:00 AM);
MachineEvents
| where Timestamp between (StartTime .. EndTime)
| where Id == "00112233" and Name == "Higher"
| top 2 by Timestamp
| project Timestamp, Value

我得到以下结果:

在此处输入图像描述

之后我想要实现的是检查收到的最后一个值(在本例中为 15451.433)是否小于 30,000。如果条件为真,那么我应该再次检查最后两个连续值之间的差异(在这种情况下:15451.433 - 15457.083)。如果差值 < 0,那么我应该将值返回为真,否则它应该返回为假(换句话说,值应该给出一个布尔值而不是如图所示的双精度值)

4

2 回答 2

2
datatable(Timestamp:datetime, Value:double)
[
 datetime(2022-02-18 10:15:00 AM), 15457.083,
 datetime(2022-02-18 10:14:00 AM), 15451.433,
 datetime(2022-02-18 10:13:00 AM), 15433.333,
 datetime(2022-02-18 10:12:00 AM), 15411.111
]
| top 2 by Timestamp
| project Timestamp, Value
| extend nextValue=next(Value)
| extend finalResult = iff(Value < 30000, nextValue - Value < 0, false)
| top 1 by Timestamp
| project finalResult

输出:

最后结果
1
于 2022-02-18T15:38:54.193 回答
1

您可以使用prev()函数(或next())来处理其他行中的值。

...
| extend previous = prev(value)
| extend diff = value - previous
| extend isPositive = diff > 0

如果您还没有类似的东西,您可能需要使用序列化top

于 2022-02-18T15:20:48.010 回答