Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
waynewoodhead
Helper I
Helper I

Creación de un acumulador de energía a partir de lecturas de medidores

Hola

Tengo un medidor de potencia conectado a la red con 2 entradas. A intervalos regulares carga sus lecturas en la base de datos, que incluye una lectura de "energía consumida desde encendido" (Energía en la tabla). Hay 2 sockets de lectura, por lo que cada día me cargan 2 lecturas. El problema es que si hay un corte de energía el medidor comienza a partir de 0 de nuevo, pero actualiza un "SessionId" para decir que ha tenido un restablecimiento.

Lo que quiero hacer por cada entrada es acumular energía con el tiempo, manejar los cortes de energía y saber cuánta energía se consume por día. Tenga en cuenta, en la tabla de abajo hay una lectura por día, en la práctica obtengo 1000, 1 cada pocos segundos.

DatetimeSocketIDSessionIDEnergía Accuml Energy
01-Enero-20111 1
01-Enero-202110 10
02-Enero-20112 2
02-Enero-202111 11
03-Enero-20113 3
03-Enero-202112 12
04-Enero-20114 4
04-Enero-202113 13
05-Enero-20121 5
05-Enero-20221 14
06-Enero-20122 6
06-Enero-20222 15
07-Enero-20123 7
07-Enero-20223 16
08-Enero-20131 8
08-Enero-20231 17
09-Enero-20132 9
09-Enero-20232 18
10-Enero-20133 10
10-Enero-20233 19

En términos psuedo, el algoritmo es

Para cada SocketID

si el SessionId no ha cambiado desde las últimas lecturas, entonces 'Accuml Energy' (Energía-Energía de lectura anterior) + último valor de 'Accuml Energy'

Más

Accuml Energy - Energía + último valor de 'Accuml Energy'

Puede haber otros algoritmos que funcionen...

Creo que puedo ser capaz de utilizar EARLIER de alguna manera, pero aún no lo resolví

Gracias por tu ayuda

1 ACCEPTED SOLUTION
Icey
Community Support
Community Support

Hola @waynewoodhead ,

Prueba esto:

Accuml Energy column = 
VAR t =
    FILTER (
        'Table',
        'Table'[SocketID] = EARLIER ( 'Table'[SocketID] )
            && 'Table'[DateTime] <= EARLIER ( 'Table'[DateTime] )
    )
RETURN
    CALCULATE (
        SUM ( 'Table'[Energy] ),
        t
    )
        - CALCULATE (
            SUM ( 'Table'[Energy] ),
            FILTER (
                t,
                VAR nextdt =
                    CALCULATE (
                        Min ( 'Table'[DateTime] ),
                        FILTER ( t, 'Table'[DateTime] > EARLIER ( 'Table'[DateTime] ) )
                    )
                RETURN
                    'Table'[SessionID]
                    = CALCULATE (
                        MAX ( 'Table'[SessionID] ),
                        FILTER ( t, 'Table'[DateTime] = nextdt )
                    )
            )
        )

acc.PNG

Saludos

Icey

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.

View solution in original post

4 REPLIES 4
Icey
Community Support
Community Support

Hola @waynewoodhead ,

Prueba esto:

Accuml Energy column = 
VAR t =
    FILTER (
        'Table',
        'Table'[SocketID] = EARLIER ( 'Table'[SocketID] )
            && 'Table'[DateTime] <= EARLIER ( 'Table'[DateTime] )
    )
RETURN
    CALCULATE (
        SUM ( 'Table'[Energy] ),
        t
    )
        - CALCULATE (
            SUM ( 'Table'[Energy] ),
            FILTER (
                t,
                VAR nextdt =
                    CALCULATE (
                        Min ( 'Table'[DateTime] ),
                        FILTER ( t, 'Table'[DateTime] > EARLIER ( 'Table'[DateTime] ) )
                    )
                RETURN
                    'Table'[SessionID]
                    = CALCULATE (
                        MAX ( 'Table'[SessionID] ),
                        FILTER ( t, 'Table'[DateTime] = nextdt )
                    )
            )
        )

acc.PNG

Saludos

Icey

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.

Hola

Gracias por la ayuda. El código parece funcionar, pero a medida que el conjunto de datos se hace más grande me quedo rápidamente sin memoria - demasiadas iteraciones para completar creo.

Estoy trabajando en otra ruta para corregir en la entrada de la base de datos, en lugar de leer, que debería ser más rápido.

¡Gracias por llegar hasta aquí!

Icey
Community Support
Community Support

Hola @waynewoodhead ,

Esto implica bucles, que estoy investigando. Llevará mucho tiempo. Le responderé en cuanto lo investigue.

Saludos

Icey

Icey

Gracias. Si ypu necesita más información sobre el problema hágamelo saber

Wayne

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.