Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
6 years ago
Solved

problemas de datediff

Buenos días

Deseo devolver un tiempo (duración) en segundos desde un determinado elemento.

Tan pronto como me sale la etiqueta "Ordre fermeture vanne de garde" que es una orden de cierre para una válvula,quiero obtener la duración hasta llegar a "Vanne de garde fermée" que indica, gracias a un sensor, que la válvula está cerrada. Y tengo que prestar atención a qué órdenes de válvula es, para esto tengo un nombre de columna "EGF".

data1.PNGdata2.PNG

Así es como se ven algunos datos de maniquíes. Empiezo una duración desde una orden de cierre de la declaración "Présente" (presente), y termino hasta la primera válvula cerrada de la declaración "Présente". Como dije antes, sólo regreso un tiempo de la misma EGF.

Aquí puede descargar algunos datos : enlace de descarga

(la contraseña es : datediff)

He probado algún método, el más cerca es este :

Durée(secondes) = IF('test_vdg'[Description de l'évenement] = "Vanne de garde fermée";
        DATEDIFF(
            CALCULATE(
                MAX('test_vdg'[Date et heure]); 
                FILTER(
                    ALLEXCEPT(
                        'test_vdg'; 
                        'test_vdg'[EGF]); 
                        'test_vdg'[Description de l'évenement] < EARLIER('test_vdg'[Description de l'évenement]))); 
            'test_vdg'[Description de l'évenement]; SECOND); 0)

Pero sólo devuelve la duración de la etiqueta anterior y no es lo que estoy buscando.

Si necesitas más explicaciones, estoy aquí.

  • Anonymous's avatar
    Anonymous
    6 years ago

    Lo descubrí,
    gracias @v-xicai por la referencia mediante el uso de variables.

    Para aquellos de ustedes que podrían estar interesados, aquí está la fórmula final:

    Durée fermeture(secondes) = 
    
    Var _DebutDate = 
        CALCULATE(
            MAX('GU_BasseMaulde_CDEVDG'[Date et heure]),
            FILTER(
                ALLEXCEPT('GU_BasseMaulde_CDEVDG', GU_BasseMaulde_CDEVDG[EGF], GU_BasseMaulde_CDEVDG[Site]), 
                GU_BasseMaulde_CDEVDG[Date et heure]
                < EARLIER('GU_BasseMaulde_CDEVDG'[Date et heure]) && 'GU_BasseMaulde_CDEVDG'[Description de l'évenement] = "Ordre fermeture vanne de garde" && GU_BasseMaulde_CDEVDG[Etat de l'évenement] = "Présente"))
    
    Var _FinDate = 
        CALCULATE(
            MAX('GU_BasseMaulde_CDEVDG'[Date et heure]),
            FILTER(
                ALLEXCEPT('GU_BasseMaulde_CDEVDG', GU_BasseMaulde_CDEVDG[EGF], GU_BasseMaulde_CDEVDG[Site]), 
                GU_BasseMaulde_CDEVDG[Date et heure]
                <= EARLIER('GU_BasseMaulde_CDEVDG'[Date et heure]) && 'GU_BasseMaulde_CDEVDG'[Description de l'évenement] = "Vanne de garde fermée" && GU_BasseMaulde_CDEVDG[Etat de l'évenement] = "Présente"))
    
    RETURN
        IF('GU_BasseMaulde_CDEVDG'[Description de l'évenement] = "Vanne de garde fermée" && 'GU_BasseMaulde_CDEVDG'[Etat de l'évenement] = "Présente", DATEDIFF(_DebutDate , _FinDate, SECOND), 0)

5 Replies

  • tex628's avatar
    tex628
    Community Champion

    Estoy correcto al pensar que para "G01" estás buscando la diferencia de tiempo para estas dos filas:
    image.png
    ¿Cuál debe ser algo a lo largo de la línea de 2 horas y 34 min ?

    /j

    • Anonymous's avatar
      Anonymous
      Not applicable

      No tu no,

      como me puse en la 2a imagen, necesito obtener el tiempo entre el "punto de inicio" al "punto de fin"

  • v-xicai's avatar
    v-xicai
    Community Support

    Hola @BCalloud ,

    Puede crear una medida como DAX a continuación.

    Durée(secondes) =
    
    Var _FirstDate= CALCULATE(MIN('test_vdg'[Date et heure]),FILTER(ALLSELECTED('test_vdg'), 'test_vdg'[EGF] =MAX('test_vdg'[EGF])&& 'test_vdg'[Date et heure]< MAX('test_vdg'[Date et heure])))
    
    Var _LastDate= CALCULATE(MAX('test_vdg'[Date et heure]),FILTER(ALLSELECTED('test_vdg'), 'test_vdg'[EGF] =MAX('test_vdg'[EGF])&& 'test_vdg'[Date et heure]<= MAX('test_vdg'[Date et heure])&&'test_vdg'[Description de l'évenement] = "Vanne de garde fermée"))
    
    Return
    
    IF('test_vdg'[Description de l'évenement] = "Vanne de garde fermée", DATEDIFF( _FirstDate ,_LastDate, SECOND), 0)

    Saludos

    Amy

    Equipo de Apoyo Comunitario _ Amy

    Si este post ayuda,entonces por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

    • Anonymous's avatar
      Anonymous
      Not applicable

      @v-xicai

      la fórmula dax sólo devuelve un resultado por cada "Válvula de protección cerrada", que es 31915350.

      • Anonymous's avatar
        Anonymous
        Not applicable

        Lo descubrí,
        gracias @v-xicai por la referencia mediante el uso de variables.

        Para aquellos de ustedes que podrían estar interesados, aquí está la fórmula final:

        Durée fermeture(secondes) = 
        
        Var _DebutDate = 
            CALCULATE(
                MAX('GU_BasseMaulde_CDEVDG'[Date et heure]),
                FILTER(
                    ALLEXCEPT('GU_BasseMaulde_CDEVDG', GU_BasseMaulde_CDEVDG[EGF], GU_BasseMaulde_CDEVDG[Site]), 
                    GU_BasseMaulde_CDEVDG[Date et heure]
                    < EARLIER('GU_BasseMaulde_CDEVDG'[Date et heure]) && 'GU_BasseMaulde_CDEVDG'[Description de l'évenement] = "Ordre fermeture vanne de garde" && GU_BasseMaulde_CDEVDG[Etat de l'évenement] = "Présente"))
        
        Var _FinDate = 
            CALCULATE(
                MAX('GU_BasseMaulde_CDEVDG'[Date et heure]),
                FILTER(
                    ALLEXCEPT('GU_BasseMaulde_CDEVDG', GU_BasseMaulde_CDEVDG[EGF], GU_BasseMaulde_CDEVDG[Site]), 
                    GU_BasseMaulde_CDEVDG[Date et heure]
                    <= EARLIER('GU_BasseMaulde_CDEVDG'[Date et heure]) && 'GU_BasseMaulde_CDEVDG'[Description de l'évenement] = "Vanne de garde fermée" && GU_BasseMaulde_CDEVDG[Etat de l'évenement] = "Présente"))
        
        RETURN
            IF('GU_BasseMaulde_CDEVDG'[Description de l'évenement] = "Vanne de garde fermée" && 'GU_BasseMaulde_CDEVDG'[Etat de l'évenement] = "Présente", DATEDIFF(_DebutDate , _FinDate, SECOND), 0)