我正在尝试使用StreamInsight,但我遇到了一个需要查询的问题。
如果在过去30分钟内我的测量值(最多变化20%)发生了一些变化,我试图发出警告。
这是我现在提出的查询,但它不起作用,我认为它甚至不正确。
显然我无法在窗口上过滤......?
var deviationQuery = from s in wcfStream
group s by s.SensorId into grouped
from window in grouped.HoppingWindow(TimeSpan.FromMinutes(30),TimeSpan.FromMinutes(1))
where window.StdDev(e => e.Value) > measurableValue * 1.2
select new OutputEvent
{
Error = "Deviation"
};
提前致谢!
答案 0 :(得分:1)
如果我理解正确,这就是你想要做的事情:
SensorId
。这应该做到,希望如此。
var deviationQuery = from s in wcfStream
group s by s.SensorId into grouped
from window in grouped.HoppingWindow(TimeSpan.FromMinutes(30),TimeSpan.FromMinutes(1))
where window.Count(event => event.Value > maxValue) > maxIncorrectValues
select new OutputEvent
{
Error = "Deviation"
};
答案 1 :(得分:1)
我找到了解决问题的工作查询。起初我认为它不起作用,但我误解了结果。 它可能不是最短和最好的查询,所以如果你有更好的答案,请告诉我!
var deviationQuery = from s in wcfStream
where s.Value > measurableValue * (1 + deviationThreshold) || s.Value < measurableValue * (1 - deviationThreshold)
group s by s.SensorId into grouped
from window in grouped.HoppingWindow(TimeSpan.FromSeconds(180), TimeSpan.FromSeconds(120))
select window.Count();
var deviation = from c in deviationQuery
where c > maxIncorrectValues
select new OutputEvent
{
M = new Measurement() { SensorId = "354354", Value = 53, Time = DateTime.Now },
Deflection = c,
Error = "Deviation"
};