Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
2 years ago

Suma

Quiero calcular el tiempo total de viaje en función del filtro de línea y estación

Ejemplo: Estación de salida (A1) Llegada, estación (A3) y línea roja para tiempo de viaje = 24 min

Cómo hacer esto en Power BI

LíneaEstación de salidaEstación de llegadaTiempo de viaje (min)
RojoA1A212
RojoA2A312
RojoA3A412
RojoA4A512
RojoA5A612
RojoA6A712
RojoA7A812
RojoA8A912
RojoA9A1012
RojoA10S112
RojoS1S212
VerdeA1A28
VerdeA2A38
VerdeA3A48
VerdeA4A58
VerdeA5A68
VerdeA6A78
VerdeA7A88
VerdeA8A98
VerdeA9A108
VerdeA10F18
VerdeF1F28
AzulA1A27
AzulA2A37
AzulA3A47
AzulA4A57
AzulA5A67
AzulA6A77
AzulA7A87
AzulA8A97
AzulA9A107
MoradoA1A27
MoradoA2A37
MoradoA3A47
MoradoA4A57
MoradoA5A67
MoradoA6A77
MoradoA7A87
MoradoA8A97
MoradoA9A107

11 Replies

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      Pero quiero hacer un filtro con la estación de salida y un filtro con la estación de llegada y luego calcular la hora de llegada

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        @MSAYED26 A ver qué piensas de esto. PBIX se adjunta debajo de la firma. En primer lugar, agregué un índice en Power Query. Entonces creo que después de eso solo necesitas la columna calculada "Tiempo de viaje" que puedes convertir fácilmente en una medida como esta:

        Travel Time = 
            VAR __Departure = MAX([Departure station])
            VAR __Arrival = MAX([Arrival station])
            VAR __Line = MAX([Line])
            VAR __DepartIndex = MAXX( FILTER( 'Table', [Line] = __Line && [Departure station] = __Departure ), [Index] )
            VAR __ArrivalIndex = MAXX( FILTER( 'Table', [Line] = __Line && [Arrival station] = __Arrival ), [Index] )
            VAR __Result = SUMX( FILTER( 'Table', [Index] >= __DepartIndex && [Index] <= __ArrivalIndex ), [Travel Time (min)] )
        RETURN
            __Result

        En mi caso, creé una tabla calculada como esta:

        Pairs = 
            VAR __Red = FILTER( 'Table', [Line] = "Red" )
            VAR __RedPairs = 
                ADDCOLUMNS(
                    GENERATE(
                        SELECTCOLUMNS( __Red, "Line", [Line], "Departure station", [Departure station], "Index", [Index]),
                        SELECTCOLUMNS( __Red, "Arrival station", [Departure station], "Index1", [Index] )
                    ),
                    "__Keep", IF( [Index] > [Index1] || ( [Departure station] = [Arrival station] && [Departure station] <> "A1"), 0, 1 )
                )
            VAR __Blue = FILTER( 'Table', [Line] = "Blue" )
            VAR __BluePairs = 
                ADDCOLUMNS(
                    GENERATE(
                        SELECTCOLUMNS( __Blue, "Line", [Line], "Departure station", [Departure station], "Index", [Index]),
                        SELECTCOLUMNS( __Blue, "Arrival station", [Departure station], "Index1", [Index] )
                    ),
                    "__Keep", IF( [Index] > [Index1] || ( [Departure station] = [Arrival station] && [Departure station] <> "A1"), 0, 1 )
                )
            VAR __Green = FILTER( 'Table', [Line] = "Blue" )
            VAR __GreenPairs = 
                ADDCOLUMNS(
                    GENERATE(
                        SELECTCOLUMNS( __Green, "Line", [Line], "Departure station", [Departure station], "Index", [Index]),
                        SELECTCOLUMNS( __Green, "Arrival station", [Departure station], "Index1", [Index] )
                    ),
                    "__Keep", IF( [Index] > [Index1] || ( [Departure station] = [Arrival station] && [Departure station] <> "A1"), 0, 1 )
                )
            VAR __Purple = FILTER( 'Table', [Line] = "Blue" )
            VAR __PurplePairs = 
                ADDCOLUMNS(
                    GENERATE(
                        SELECTCOLUMNS( __Purple, "Line", [Line], "Departure station", [Departure station], "Index", [Index]),
                        SELECTCOLUMNS( __Purple, "Arrival station", [Departure station], "Index1", [Index] )
                    ),
                    "__Keep", IF( [Index] > [Index1] || ( [Departure station] = [Arrival station] && [Departure station] <> "A1"), 0, 1 )
                )
            VAR __Table = UNION( __RedPairs, __BluePairs, __GreenPairs, __PurplePairs ) 
            VAR __Result = SELECTCOLUMNS( FILTER( __Table, [__Keep] = 1 ), "Line", [Line], "Departure station", [Departure station], "Arrival station", [Arrival station] )
        RETURN
            __Result

        Y luego una columna calculada en esa tabla como esta:

        Travel Time = 
            VAR __Departure = [Departure station]
            VAR __Arrival = [Arrival station]
            VAR __Line = [Line]
            VAR __DepartIndex = MAXX( FILTER( 'Table', [Line] = __Line && [Departure station] = __Departure ), [Index] )
            VAR __ArrivalIndex = MAXX( FILTER( 'Table', [Line] = __Line && [Arrival station] = __Arrival ), [Index] )
            VAR __Result = SUMX( FILTER( 'Table', [Index] >= __DepartIndex && [Index] <= __ArrivalIndex ), [Travel Time (min)] )
        RETURN
            __Result
  • Hola

    No puede tener ningún sentido de las condiciones del filtro en sí. Para la estación de salida A1, no hay ninguna estación de llegada A3. Por favor, aclare/revise cuidadosamente.