Forum Discussion

Ana_Cardoso's avatar
Ana_Cardoso
Frequent Visitor
6 years ago
Solved

Idenfity peak

Hello all, 
I have a dataset with Timestamp, TagName and KPIValue of multiple tags. And I need to count "alarms" that is when I had a peak on a curve by TagName. My alarm trigger is KPIValue >= 50. So, when I have a timestamp that the KPIValue >=50 I count one alarm and after that I only cont +1 alarm when I had another peak on graphic. 
On the image we can see an example with just one alarm... 
Could you help me with a DAX logic to calculate it?
I figured out something like: 
Alarm = IF (Data[Value] >= 50;1;0)
SUM (Data[Alarm]) but it returns the total of Values above or equals 50, instead of 1 (number of peaks).

 

  • v-alq-msft's avatar
    v-alq-msft
    6 years ago

    Hi, Ana_Cardoso 

     

    Based on your description, you may create two measures as below.

     

     

    Alarm =
    var _currentvalue = SELECTEDVALUE('Table'[Value])
    var _currentdatetime = SELECTEDVALUE('Table'[Data Hora])
    var _currenttag = SELECTEDVALUE('Table'[Tag])
    var _lastvalue =
    CALCULATE(
    MAX('Table'[Value]),
    FILTER(
    ALLSELECTED('Table'),
    'Table'[Tag] = _currenttag&&
    'Table'[Data Hora] =
    CALCULATE(
    MAX('Table'[Data Hora]),
    FILTER(
    ALLSELECTED('Table'),
    'Table'[Tag] = _currenttag&&
    'Table'[Data Hora]<_currentdatetime
    )
    )
    )
    )

    return
    SUMX(
    'Table',
    IF(
    ISFILTERED('Table'[Data Hora]),
    IF(
    _lastvalue<50&&
    _currentvalue>50,
    1,
    0
    )
    )
    )

     

    Count =
    SUMX(
    'Table',
    [Alarm]
    )

     

    Result:

     

    Best Regards

    Allan

     

    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

7 Replies

  • Hi,

    If you wish to count the number of instances when the figures available in the Value column exceed 50, then write this measure

    =CALCULATE(COUNTROWS(Data),Data[Value]>50)

    Hope this helps.

  • v-alq-msft's avatar
    v-alq-msft
    Community Support

    Hi, Ana_Cardoso 

     

    Based on your description, I created data to reproduce your scenario.

    Data:

     

    You may create a measure as below.

    Count =
    var _datetime = SELECTEDVALUE(Data[Date])
    return
    COUNTROWS(
    FILTER(
    ALLSELECTED(Data),
    Data[Date]<_datetime&&
    Data[Value]>=50
    )
    )

     

     

     

     

    Result:

     

    Best Regards

    Allan

     

    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

    • Ana_Cardoso's avatar
      Ana_Cardoso
      Frequent Visitor

      Hi, I've tried all the suggestions but none is what i need. 
      I bring more informantion in order to try explain better what I want to count. First a table with samples of my data with a column "Alarm" wich is what I'm looking foward.

      Data HoraTagValueAlarm
      03/04/2020 03:40Tag 1100
      03/04/2020 03:41Tag 1120
      03/04/2020 03:42Tag 1601
      03/04/2020 03:43Tag 1650
      03/04/2020 03:44Tag 1300
      03/04/2020 03:45Tag 1250
      03/04/2020 03:46Tag 1591
      03/04/2020 03:47Tag 1400
      03/04/2020 03:48Tag 120
      03/04/2020 03:49Tag 110
      03/04/2020 03:43Tag 2490
      03/04/2020 03:44Tag 2551
      03/04/2020 03:45Tag 2590
      03/04/2020 03:46Tag 2100

      And an image where I put circles on the alarms. 

       It is continuos data. So, I have to count when I had a peak above 50 not the number of samples wich [Value] >=50.

      • v-alq-msft's avatar
        v-alq-msft
        Community Support

        Hi, Ana_Cardoso 

         

        Based on your description, you may create two measures as below.

         

         

        Alarm =
        var _currentvalue = SELECTEDVALUE('Table'[Value])
        var _currentdatetime = SELECTEDVALUE('Table'[Data Hora])
        var _currenttag = SELECTEDVALUE('Table'[Tag])
        var _lastvalue =
        CALCULATE(
        MAX('Table'[Value]),
        FILTER(
        ALLSELECTED('Table'),
        'Table'[Tag] = _currenttag&&
        'Table'[Data Hora] =
        CALCULATE(
        MAX('Table'[Data Hora]),
        FILTER(
        ALLSELECTED('Table'),
        'Table'[Tag] = _currenttag&&
        'Table'[Data Hora]<_currentdatetime
        )
        )
        )
        )

        return
        SUMX(
        'Table',
        IF(
        ISFILTERED('Table'[Data Hora]),
        IF(
        _lastvalue<50&&
        _currentvalue>50,
        1,
        0
        )
        )
        )

         

        Count =
        SUMX(
        'Table',
        [Alarm]
        )

         

        Result:

         

        Best Regards

        Allan

         

        If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.