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
zudar
Post Patron
Post Patron

Análisis de los ciclos de carga

¡Hola amigos PowerBI!

Estoy teniendo un gran reto haciendo un análisis y, una vez más, ¡me vendría bien tu ayuda! 🙃

Permítanme comenzar eso compartiendo mi ejemplo de archivo PBI, que se puede encontrar aquí.

Este proyecto trata de analizar los ciclos de carga y uso de las baterías. En este ejemplo hay dos baterías; 532 y 614. Estas dos baterías se cargan con una cierta "cantidad" de energía en ciertas "Fechas de carga" que se supone que tienen lugar en un momento específico en el tiempo. Estos datos se encuentran en una tabla denominada "Cargos". Al mismo tiempo, los usos (en horas) de estas baterías se registran en una tabla llamada "Usos". Estas tres mesas son todo lo que hay. La tabla 'Baterías' conecta ambas tablas a través de la columna única 'BatteryID'. A continuación, puede ver estas tablas de origen con sus datos de ejemplo:

SourceTables.JPG

Ahora, se supone que debo determinar cuánto uso (en horas) ha ocurrido entre las fechas de carga para una batería determinada y calcular la tasa de uso en cantidad/hora para cada uno de esos "ciclos" de carga. En última instancia, voy a utilizar estas tasas de uso (en cantidad /hora) en una media móvil para calcular cuánto probablemente necesitaría ser cargado (en cantidad) en el momento de abrir el informe.

He esbozado estos ciclos de carga y usos para ambas baterías a continuación, porque es importante tener en cuenta que es posible que una batería se carga mientras se utiliza al mismo tiempo. En esos casos, quiero cortar el uso y sólo tener en cuenta las partes que están literalmente entre los "momentos de carga" verdes.

Analysis.JPG

Por ejemplo: para la batería 532, que se utilizó desde las 5:27 hasta las 9:12 mientras se carga a las 7:47, solo quiero tener en cuenta el tiempo de uso desde las 7:47 hasta las 9:12 para incluir en el tiempo de uso total para el ciclo de carga de 11-7 a las 7:47 hasta 12-7 a las 15:33.

Otro ejemplo más extremo: para la batería 614, que se utilizó todo el tiempo mientras se carga dos veces, el tiempo utilizado entre los momentos de carga es simplemente el tiempo entre 12:27 y 22:55 en 12-7, que es igual a 10,46 horas. Luego se cargó con una cantidad de energía de 48(y se supone que cuando se carga, la batería siempre se carga el 100%),por lo que la tasa de uso para ese ciclo sería de 48/10,46 a 4,59 de la cantidad/hora.

Así que sólo para ser claros, cualquier uso que se produce antes del primer momento de carga (por batería) no son importantes en este análisis!

Y de nuevo, en última instancia, tendré que calcular estas tasas de uso para cada batería y usar una media móvil de esas tasas de uso para determinar la cantidad que probablemente necesita ser cargada en el momento de abrir el informe. Pero antes de llegar allí, ya estaría muy feliz de tener esa columna 'Tiempo de uso' en la tabla 'Cargos' calculada correctamente.

Lo único que he podido hacer hasta ahora es crear una columna (inexacta) de 'bandera' como se muestra a continuación. Si se hace clic en un ciclo de carga en la tabla izquierda, los usos que se producen entre los momentos de carga se suponía que se marcan, pero no está funcionando de la manera que me gustó. Es básicamente inútil, pero así es como llegué, tristemente.

Flag.JPG

Flag = CALCULATE(COUNT(Usage[Usage]),
FILTER(Charges,
Charges[Charge Date]<=MAX(Usage[To])
&& (Charges[Next Charge Date]>=MIN(Usage[From]) || Charges[Next Charge Date] = BLANK())
))

Si todavía estás leyendo en este punto, gracias!

¡Y si eres capaz y estás dispuesto a ayudarme, eso sería legendario!

5 REPLIES 5
AllisonKennedy
Super User
Super User

Puede probar esto, tanto como COLUMNAS en la tabla de cargos:

Tiempo de uso ?
VAR _extremeusage á SUMX(FILTER(Usage,Usage[Usage] ? Charges[Charges] && Usage[From]<Charges[Charge Date] && Usage[To]>Charges[Next Charge Date]), DATEDIFF(Charges[Charge Date], Charges[Next Charge Date], SECOND )/3600)

VAR _normalusage - SUMX(FILTER(Usage,

Uso[Uso]-Cargos[Cargos] && (((Uso[De]>Cargos[Fecha de carga] && Uso[De]< Cargos[Fecha de cargo siguiente]) ? (Uso[Para]>Cargos[Fecha de carga] && Uso[A] < Cargos[Fecha de cargo siguiente])) )),
DATEDIFF(MAX(Charges[Charge Date], Usage[From]), MIN(Charges[Next Charge Date], Usage[To]),SECOND )/3600 )

devolución
IF(_extremeusage>0, _extremeusage, _normalusage)

Tasa de uso: DIVIDE(Charges[Next Amount], Charges[Usage Time])

Please @mention me in your reply if you want a response.

Copying DAX from this post? Click here for a hack to quickly replace it with your own table names

Has this post solved your problem? Please Accept as Solution so that others can find it quickly and to let the community know your problem has been solved.
If you found this post helpful, please give Kudos C

I work as a Microsoft trainer and consultant, specialising in Power BI and Power Query.
www.excelwithallison.com

@AllisonKennedy

Increíble, gracias! Sólo estoy tratando de entenderlo porque de alguna manera tendré que incluir esos registros de "Cargo" donde no hay "Próxima fecha de cargo" en los cálculos de "Tiempo de uso" (tal vez por separado) porque eso me permitirá calcular una "cantidad próxima" estimada, dada una cierta "Tasa de uso" promedio en la última semana (digamos) de uso de una batería determinada.

¿Ves a lo que estoy llegando? Voy a tratar de pensar en algo yo mismo y posiblemente volver aquí para hacerle una pregunta adicional.. si usted está dispuesto a echar un vistazo, por supuesto..

De todos modos, gracias de nuevo, esto ayuda mucho! 🙏

@AllisonKennedy

Así que terminé usando la siguiente columna calculada para 'Tiempo de uso':

Usage Time = 
VAR _extremeusage = SUMX(FILTER(Usage,Usage[Usage] = Charges[Charges] && Usage[From]<Charges[Charge Date] && Usage[To]>Charges[Next Charge Date]), DATEDIFF(Charges[Charge Date], Charges[Next Charge Date], SECOND )/3600)

VAR _normalusage = SUMX(FILTER(Usage,
Usage[Usage] = Charges[Charges] 
&& 
    (
        (Usage[From]>Charges[Charge Date] && 
            (Usage[From]< Charges[Next Charge Date] || Charges[Next Charge Date] = BLANK())) 
        || (Usage[To]>Charges[Charge Date] &&
            (Usage[To] < Charges[Next Charge Date]  || Charges[Next Charge Date] = BLANK()))
    )
),
DATEDIFF(MAX(Charges[Charge Date], Usage[From]), IF(Charges[Next Charge Date] = BLANK(),Usage[To],MIN(Charges[Next Charge Date], Usage[To])),SECOND )/3600 )

RETURN
IF(_extremeusage>0, _extremeusage, _normalusage)

Lo cual parece estar funcionando muy bien. ¡Gracias!

@zudar Me alegro de que haya funcionado, me pregunté si querría que se incluyera la fecha de entrega, la ha entendido y se le ocurrió una gran solución.

Please @mention me in your reply if you want a response.

Copying DAX from this post? Click here for a hack to quickly replace it with your own table names

Has this post solved your problem? Please Accept as Solution so that others can find it quickly and to let the community know your problem has been solved.
If you found this post helpful, please give Kudos C

I work as a Microsoft trainer and consultant, specialising in Power BI and Power Query.
www.excelwithallison.com

@AllisonKennedy No podría haberlo hecho sin tu ayuda. Gracias de nuevo. ¡Eres el mejor! 🙃

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.