5 Replies Latest reply on Sep 21, 2018 4:59 AM by Terence Zhang

    持续时长计算

    monitorreport 陈

      每5分钟取次数(百分比),每次出现90%以上的数据都会持续一段时间,且一天中可能出现多次,如12点左右持续了45分钟(肉眼计算持续时长)18点左右再次出现,现在要统计这两次90%的持续时长分别是多少?怎么计算…

      希望得到一个结果:

        

      时间段持续时间/分
      9/19/2018 12:20:23 AM-9/19/2018 1:15:24 AM55
      XXXXX

      512029703.jpg

        • 1. Re: 持续时长计算
          Michael Gao

          这是一个非常非常好的问题。欢迎大家一起研讨。我给个提示吧:

          1)x1:  running_sum(if(sum(rate)>=0.9 then 1 else 0 end ),这样那些连续超过0.9的行会出现1,2,3,4这样的连续累加。在图中可以标识出来这些特殊的点。降到0.9之下就是0.

          2)x2:  ff x1=window_max(x1, -1, 1) then x1 else 0. 这样就能得到x1变成0之前的那个最大值。

          3) x2*5 就等于你要的分钟数。

           

          原理如此,你可以自己尝试一下。

           

          如果问题解决请讲结果发到论坛,并将问题置为“Answered”。

          • 2. Re: 持续时长计算
            monitorreport 陈

            高老师,

            非常非常感谢您的解答

            按照您提供的计算公式,结果如下图一(图一隐藏了小于90%的数据),会得到当前数据里面变成0之前的最大值,比如下图中最大值24,那持续时间是24*5=120分钟(可以计算出超过90%的累计持续时间)

            但是,如果要分段计算,再得出哪个时间段持续时间最长?如下图,数据大于90%是分了两个时间段的,第一个时间段是9/18/2018 2:00:25 AM到9/18/2018 2:40:25 AM,持续时间是 40分钟,第二个时间段是9/18/2018 11:50:09 AM 到 9/18/2018 12:50:10 PM 持续时间是60分钟,也就是第一次变成0之前的都是running sum,但是第二个时间段数据开始达到90的数据又要重新计算为1,然后再running sum,这样在从中取最大值,就可以知道一天内超过90%的数据持续时间最长是多少。

            这样的话,计算公式该如何修改呢?

            1326392800.jpg

            929648585.jpg

            • 3. Re: 持续时长计算
              Terence Zhang

              可以考虑用previous来取代running_sum,修改你的 [>90%] 定义为:

               

              if 计算1=1 then previous(0)+1 else 0 end

               

              这样只要计算1出现0,[>90%]又会被置0啦。

              • 4. Re: 持续时长计算
                Michael Gao

                金牌特仑苏老师威武!这个计算题可以当考试题不? 

                • 5. Re: 持续时长计算
                  Terence Zhang

                  高老师定夺就好