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
Syndicate_Admin
Administrator
Administrator

Cómo calcular el CO2

hola

Soy bastante nuevo en el uso de PowerBI, pero me parece realmente útil en mi papel en una autoridad local con respecto a la realización de encuestas de viajes.

Me pregunto si hay alguna manera en PowerBI de calcular las emisiones de CO2 para un viaje en el que algunos de los elementos en el cálculo estarían determinados por el modo de transporte utilizado.

Tengo una tabla con los detalles de los viajes desglosados en etapas para permitir que las personas que hacen uso de diferentes modos de transporte en el transcurso de su viaje de la siguiente manera:

thomsona_1-1623229069190.png

También tengo un cuadro que contiene la información sobre las velocidades medias y las emisiones medias de CO2 por kilómetro de la siguiente manera:

thomsona_3-1623230314796.png

El CO2 se calcula mediante:

1. Multiplicar el tiempo necesario por la velocidad media para el modo utilizado (por ejemplo, 25*26,5) y dividir por 60 (para permitir la conversión de minutos a horas) para dar la distancia recorrida (expresada en kilómetros).

2) multiplicar la distancia recorrida por el correspondiente "Factor CO2". Esto dará kilogramos de CO2 por cada modo recorrido.

Lo que me gustaría poder hacer es calcular automáticamente la cantidad de CO2 relevante para cada fila donde la velocidad media y el factor CO2 cambiarán dependiendo del modo de transporte utilizado.

¿Alguien sabe si es posible ejecutar un cálculo como este en PowerBI y si es así cómo tendría que ser escrito para tener en cuenta los diferentes multiplicadores a utilizar?

Muchas gracias de antemano,

Andy

3 ACCEPTED SOLUTIONS
Syndicate_Admin
Administrator
Administrator

No @thomsona ,

Honestamente, no dejaría los datos como están. Se ve muy desordenado y tendrás algún tipo de cálculo monstous como este para obtener el CO2 total:

Column =
VAR avgSpeed1 = MAXX ( FILTER ( Factors, Factors[Mode ] = Data[Mode 1] ), Factors[Factor] )
VAR CO2_1 =
    MAXX (
        FILTER ( Factors, Factors[CO2 Factors. ] = Data[Mode 1] ),
        Factors[Factor 2]
    )
VAR res1 = Data[Time 1] * ( avgSpeed1 / 60 ) * CO2_1
VAR avgSpeed2 = MAXX ( FILTER ( Factors, Factors[Mode ] = Data[Mode 2] ), Factors[Factor] )
VAR CO2_2 =
    MAXX (
        FILTER ( Factors, Factors[CO2 Factors. ] = Data[Mode 2] ),
        Factors[Factor 2]
    )
VAR res2 = Data[Time 2] * ( avgSpeed2 / 60 ) * CO2_2
VAR avgSpeed3 = MAXX ( FILTER ( Factors, Factors[Mode ] = Data[Mode 3] ), Factors[Factor] )
VAR CO2_3 =
    MAXX (
        FILTER ( Factors, Factors[CO2 Factors. ] = Data[Mode 3] ),
        Factors[Factor 2]
    )
VAR res3 = Data[Time 3] * ( avgSpeed3 / 60 ) * CO2_3
VAR avgSpeed4 = MAXX ( FILTER ( Factors, Factors[Mode ] = Data[Mode 4] ), Factors[Factor] )
VAR CO2_4 =
    MAXX (
        FILTER ( Factors, Factors[CO2 Factors. ] = Data[Mode 4] ),
        Factors[Factor 2]
    )
VAR res4 = Data[Time 4] * ( avgSpeed3 / 60 ) * CO2_3
RETURN
    COALESCE ( res1 + res2 + res3 + res4, 0 )

Cambiaría los datos de Power Query para que tuvieran un aspecto similar al siguiente:

ERD_0-1623435200971.png

Después puede tener fácilmente la misma matriz si es necesario

ERD_1-1623435520200.png

La medida tendría este aspecto:

CO2 =
VAR currTime = MAX ( '_Data'[Time] )
VAR currMode = MAX ( _Data[Mode] )
VAR currAvgSpeed = MAXX ( FILTER ( ModeFactor, ModeFactor[Mode] = currMode ), ModeFactor[AvgSpeed])
VAR currCO2 = MAXX ( FILTER ( CO2Factor, CO2Factor[Mode] = currMode ), CO2Factor[CO2] )
RETURN
    currTime * ( currAvgSpeed / 60 ) * currCO2

Si esta publicación 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

hola

¿Puede compartir la consulta de energía conmigo?

Si puede, será realmente útil para comprender los pasos que utilizó para transformar los datos.

Muchas gracias

Andy

View solution in original post

Hola Andy (@thomsona),

Claro, pero hay cosas que mencionar:

1) Utilice tablas separadas para ModeFactor y CO2Factor:

ERD_0-1623754780459.png

2) He limpiado su tabla de datos (columnas vacías eliminadas, no hay ningún valor en ellas) para tener una tabla de demostración adecuada:

ERD_1-1623754853968.png

Estos son los pasos que he usado (puede copiarlos en su archivo y ver cómo cambia la tabla paso a paso haciendo clic en Elementos de la sección Pasos aplicados):

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("pVJBDoIwEPzKhpMmHBTEB6hXbiQeCIelViESSlpQ+b2txoRgQReSpmm7mdmZ2caxc5D5jQMCQwlYiJI7ruMFegtbqApkHMQZ7kJe9VN/Ja4dvyHg9y0rpmK2q/8xET5yfV5T2mhLKkOp7Snt8GScynkcFSrFy8ubhq6eMpgh9T6hbShqIZlJGxaYCj3otRcwtjRSCDQjIVBoRtRQRnLEwpQMIso4pI0CVYtKX3eN+oTcq3QwX106nBNkvAKw6vjxP/ptrRz+sBe71pkB2TUnyRM=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Mode 1" = _t, #"Time 1" = _t, #"Destination 1" = _t, #"Mode 2" = _t, #"Time 2" = _t, #"Destination 2" = _t, #"Mode 3" = _t, #"Time 3" = _t, #"Destination 3" = _t]),

    #"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1, Int64.Type),
    #"Reordered Columns1" = Table.ReorderColumns(#"Added Index",{"Index", "Mode 1", "Time 1", "Destination 1", "Mode 2", "Time 2", "Destination 2", "Mode 3", "Time 3", "Destination 3"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Reordered Columns1",{{"Time 1", Int64.Type}, {"Time 2", Int64.Type}, {"Time 3", Int64.Type}}),
    #"Replaced Value" = Table.ReplaceValue(#"Changed Type",null,0,Replacer.ReplaceValue,{"Time 2"}),
    #"Replaced Value1" = Table.ReplaceValue(#"Replaced Value",null,0,Replacer.ReplaceValue,{"Time 3"}),
    #"Unpivoted Only Selected Columns" = Table.Unpivot(#"Replaced Value1", {"Mode 1", "Time 1", "Destination 1", "Mode 2", "Time 2", "Destination 2", "Mode 3", "Time 3", "Destination 3"}, "Attribute", "Value"),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Unpivoted Only Selected Columns", "Attribute", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {"Attribute.1", "Attribute.2"}),
    #"Added Custom" = Table.AddColumn(#"Split Column by Delimiter", "Custom", each "Step " & [Attribute.2]),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Attribute.2"}),
    #"Reordered Columns" = Table.ReorderColumns(#"Removed Columns",{"Index", "Custom", "Attribute.1", "Value"}),
    #"Renamed Columns" = Table.RenameColumns(#"Reordered Columns",{{"Custom", "Step"}, {"Index", "Transaction"}}),
    #"Split Table" = Table.Split(#"Renamed Columns",3),
    #"Transform tables" = List.Transform(#"Split Table", each Table.Pivot(_, List.Distinct(_[Attribute.1]), "Attribute.1", "Value")),
    #"Combine tables" = Table.Combine(#"Transform tables"),
    #"Changed Type1" = Table.TransformColumnTypes(#"Combine tables",{{"Time", Int64.Type}})
in
    #"Changed Type1"

Si esta publicación 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

11 REPLIES 11
Syndicate_Admin
Administrator
Administrator

No @thomsona ,

Honestamente, no dejaría los datos como están. Se ve muy desordenado y tendrás algún tipo de cálculo monstous como este para obtener el CO2 total:

Column =
VAR avgSpeed1 = MAXX ( FILTER ( Factors, Factors[Mode ] = Data[Mode 1] ), Factors[Factor] )
VAR CO2_1 =
    MAXX (
        FILTER ( Factors, Factors[CO2 Factors. ] = Data[Mode 1] ),
        Factors[Factor 2]
    )
VAR res1 = Data[Time 1] * ( avgSpeed1 / 60 ) * CO2_1
VAR avgSpeed2 = MAXX ( FILTER ( Factors, Factors[Mode ] = Data[Mode 2] ), Factors[Factor] )
VAR CO2_2 =
    MAXX (
        FILTER ( Factors, Factors[CO2 Factors. ] = Data[Mode 2] ),
        Factors[Factor 2]
    )
VAR res2 = Data[Time 2] * ( avgSpeed2 / 60 ) * CO2_2
VAR avgSpeed3 = MAXX ( FILTER ( Factors, Factors[Mode ] = Data[Mode 3] ), Factors[Factor] )
VAR CO2_3 =
    MAXX (
        FILTER ( Factors, Factors[CO2 Factors. ] = Data[Mode 3] ),
        Factors[Factor 2]
    )
VAR res3 = Data[Time 3] * ( avgSpeed3 / 60 ) * CO2_3
VAR avgSpeed4 = MAXX ( FILTER ( Factors, Factors[Mode ] = Data[Mode 4] ), Factors[Factor] )
VAR CO2_4 =
    MAXX (
        FILTER ( Factors, Factors[CO2 Factors. ] = Data[Mode 4] ),
        Factors[Factor 2]
    )
VAR res4 = Data[Time 4] * ( avgSpeed3 / 60 ) * CO2_3
RETURN
    COALESCE ( res1 + res2 + res3 + res4, 0 )

Cambiaría los datos de Power Query para que tuvieran un aspecto similar al siguiente:

ERD_0-1623435200971.png

Después puede tener fácilmente la misma matriz si es necesario

ERD_1-1623435520200.png

La medida tendría este aspecto:

CO2 =
VAR currTime = MAX ( '_Data'[Time] )
VAR currMode = MAX ( _Data[Mode] )
VAR currAvgSpeed = MAXX ( FILTER ( ModeFactor, ModeFactor[Mode] = currMode ), ModeFactor[AvgSpeed])
VAR currCO2 = MAXX ( FILTER ( CO2Factor, CO2Factor[Mode] = currMode ), CO2Factor[CO2] )
RETURN
    currTime * ( currAvgSpeed / 60 ) * currCO2

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

hola

¿Puede compartir la consulta de energía conmigo?

Si puede, será realmente útil para comprender los pasos que utilizó para transformar los datos.

Muchas gracias

Andy

Hola Andy (@thomsona),

Claro, pero hay cosas que mencionar:

1) Utilice tablas separadas para ModeFactor y CO2Factor:

ERD_0-1623754780459.png

2) He limpiado su tabla de datos (columnas vacías eliminadas, no hay ningún valor en ellas) para tener una tabla de demostración adecuada:

ERD_1-1623754853968.png

Estos son los pasos que he usado (puede copiarlos en su archivo y ver cómo cambia la tabla paso a paso haciendo clic en Elementos de la sección Pasos aplicados):

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("pVJBDoIwEPzKhpMmHBTEB6hXbiQeCIelViESSlpQ+b2txoRgQReSpmm7mdmZ2caxc5D5jQMCQwlYiJI7ruMFegtbqApkHMQZ7kJe9VN/Ja4dvyHg9y0rpmK2q/8xET5yfV5T2mhLKkOp7Snt8GScynkcFSrFy8ubhq6eMpgh9T6hbShqIZlJGxaYCj3otRcwtjRSCDQjIVBoRtRQRnLEwpQMIso4pI0CVYtKX3eN+oTcq3QwX106nBNkvAKw6vjxP/ptrRz+sBe71pkB2TUnyRM=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Mode 1" = _t, #"Time 1" = _t, #"Destination 1" = _t, #"Mode 2" = _t, #"Time 2" = _t, #"Destination 2" = _t, #"Mode 3" = _t, #"Time 3" = _t, #"Destination 3" = _t]),

    #"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1, Int64.Type),
    #"Reordered Columns1" = Table.ReorderColumns(#"Added Index",{"Index", "Mode 1", "Time 1", "Destination 1", "Mode 2", "Time 2", "Destination 2", "Mode 3", "Time 3", "Destination 3"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Reordered Columns1",{{"Time 1", Int64.Type}, {"Time 2", Int64.Type}, {"Time 3", Int64.Type}}),
    #"Replaced Value" = Table.ReplaceValue(#"Changed Type",null,0,Replacer.ReplaceValue,{"Time 2"}),
    #"Replaced Value1" = Table.ReplaceValue(#"Replaced Value",null,0,Replacer.ReplaceValue,{"Time 3"}),
    #"Unpivoted Only Selected Columns" = Table.Unpivot(#"Replaced Value1", {"Mode 1", "Time 1", "Destination 1", "Mode 2", "Time 2", "Destination 2", "Mode 3", "Time 3", "Destination 3"}, "Attribute", "Value"),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Unpivoted Only Selected Columns", "Attribute", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {"Attribute.1", "Attribute.2"}),
    #"Added Custom" = Table.AddColumn(#"Split Column by Delimiter", "Custom", each "Step " & [Attribute.2]),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Attribute.2"}),
    #"Reordered Columns" = Table.ReorderColumns(#"Removed Columns",{"Index", "Custom", "Attribute.1", "Value"}),
    #"Renamed Columns" = Table.RenameColumns(#"Reordered Columns",{{"Custom", "Step"}, {"Index", "Transaction"}}),
    #"Split Table" = Table.Split(#"Renamed Columns",3),
    #"Transform tables" = List.Transform(#"Split Table", each Table.Pivot(_, List.Distinct(_[Attribute.1]), "Attribute.1", "Value")),
    #"Combine tables" = Table.Combine(#"Transform tables"),
    #"Changed Type1" = Table.TransformColumnTypes(#"Combine tables",{{"Time", Int64.Type}})
in
    #"Changed Type1"

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

HAY @ERD

Muchas gracias por enviar que más de tan rápidamente y por la ayuda con este.

Si tengo alguna pregunta, me pongo en contacto.

Andy

hola

Muchos thamks para sugerir el uso de Power Query, ya que esto es algo que no había considerado usar.

Este parece el camino a seguir en este sentido.

salud

Andy

Syndicate_Admin
Administrator
Administrator

Ahí, @thomsona

De acuerdo con su descripción, creo que puede crear algunas columnas para co1, co2, co3, co4.

Como este(Sólo cambiar 1234):columna co1

v-janeyg-msft_0-1623408430793.png

co1 =
VAR a =
    MAXX ( FILTER ( Factors, [Mode ] = EARLIER ( Data[Mode 1] ) ), [Factor] )
VAR b =
    MAXX (
        FILTER ( 'data (2)', [CO2 Factors. ] = EARLIER ( Data[Mode 1] ) ),
        [Factor 2]
    )
RETURN
    [Time 1] * ( a / 60 ) * b

v-janeyg-msft_1-1623408655641.png

Saludos

Janey Guo

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.

Hay @v-janeyg-msft

Muchas gracias por echar un vistazo a esto para mí y por proporcionar una solución a cómo resolver esto.

Voy a echar un vistazo a lo que usted ha sugerido y probarlo.

Espero que esta sea una oportunidad de aprendizaje muy útil para mí.

Saludos cordiales

Andy

Syndicate_Admin
Administrator
Administrator

Tengo un archivo a.pbix, pero no estoy seguro de cómo compartir esto.

Syndicate_Admin
Administrator
Administrator

hola

Los datos de ejemplo son los siguientes:

Modo 1Tiempo 1Destino 1Otros 1Modo 2Tiempo 2Destino 2Modo 3Tiempo 3Modo 4Tiempo 4Destino 4
Conducir un coche solo25Mi lugar de trabajo
Conducir un coche solo45Mi lugar de trabajo
ciclo45Mi lugar de trabajo
ciclo60Mi lugar de trabajo
taxi15Mi lugar de trabajo
Coche compartido como conductor15Mi lugar de trabajo
Compartir coche como pasajero10Mi lugar de trabajo
taxi25Mi lugar de trabajo
Coche compartido como conductor30Mi lugar de trabajo
Motocicleta (por encima de 125cc)20Mi lugar de trabajo
Compartir coche como pasajero20Mi lugar de trabajo
Motocicleta (por encima de 125cc)15Mi lugar de trabajo
caminar5La parada de autobús autobús25La parada de autobús caminar5Mi lugar de trabajo
caminar15Mi lugar de trabajo
caminar20La parada de autobús autobús10Mi lugar de trabajo
caminar15La parada de autobús autobús35La parada de autobús caminar15Mi lugar de trabajo
caminar5La parada de autobús autobús25La parada de autobús 0caminar10Mi lugar de trabajo

Los factores que se utilizan para calcular las emisiones son los siguientes:

Modo Velocidades medias, expresadas en kilómetros por hora: Factores de CO2. Estos se expresan como kilogramos de CO2 por pasajero y kilómetro:
caminar4.80 subterráneo0.065
ciclo20.0 Dlr0.075
subterráneo33.0 tranvía0.042
Dlr25.0 Tren de cercanías0.062
tranvía22.7 autobús0.081
Tren de cercanías40.0 Conducir un coche solo0.206
autobús15.5 taxi0.168
Conducir un coche solo26.5 patinete0.073
taxi26.5 Motocicleta (por encima de 125cc)0.112
patinete26.5 Barco desconocido
Motocicleta (por encima de 125cc)26.5 Coche compartido como conductor0.129
Barco19.0 Compartir coche como pasajero0.129
Coche compartido como conductor26.5 Motocicleta (por debajo de 125cc)0.112
Compartir coche como pasajero26.5
Motocicleta (por debajo de 125cc)26.5
Parque y paseo15.5

Esperemos que ambos sean útiles.

Andy

Syndicate_Admin
Administrator
Administrator

@thomsona ,Puede compartir datos de muestra y salida de muestra en formato de tabla? O un pbix de ejemplo después de eliminar datos confidenciales.

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.