Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
5 years ago

Sumar filas

Hola, voy comenzando con Powr BI y estoy conociendo las funciones DAX.

 

Me gustaría saber si hay manera de hacer lo siguiente con DAX.

 

Tengo una tabla con los siguientes datos:

EquipoOrigenDestinoFecha SalidaFecha LlegadaDistancia kmsTotal Distancia
T1Planta1Almacen101/03/2021 02:0101/03/2021 10:01150292
T1Almacen1Planta101/03/2021 11:1001/03/2021 19:01142 
T1Planta1Almacen202/03/2021 03:0102/03/2021 12:01210420
T1Almacen2Planta102/03/2021 13:1002/03/2021 22:01210 
T1Planta1Bodega103/03/2021 02:0103/03/2021 02:317299
T1Bodega1Almacen103/03/2021 03:0103/03/2021 10:01150 
T1Almacen1Planta103/03/2021 11:1003/03/2021 19:01142 

 

Cada fila representa un tramo del recorrido y su distancia, necesito poder sumar la distancia de los diferentes tramos y ponerlo en un total, esto en excel lo hago con fórmulas, pero con DAX no encuentro la manera.

 

Gracias por su atención, saludos...

12 Replies

  • Hay @Syndicate_Admin @Alberto_O

    No está muy claro, el total se basa actualmente en la fecha de equipo y fecha de salida, puede hacer M o DAX. ¿Qué sucede si desea calcular diferentes condiciones? ¿Y quieres una medida o una columna calculada?

    M

    let
      Source = Table.FromRows(
        Json.Document(
          Binary.Decompress(
            Binary.FromText(
              "nZCxCoNAEER/JVwtuLsTCbFLvsAinVgcKmmMNv4/4XBhT9fKbnkwj9lp2/DhUIRmivMa0/WafrEf53QSl4RSSPhGUtMBMW2IKwpdoZ4sbco8xDXTAT3VcxfzuD6SQmJ9oH0MsVYU9n1k3ycLQfsYkjOPhd/LMH43Dfw8O4SEHiaxaD4y/FO4MjL8yDgfufsD",
              BinaryEncoding.Base64
            ),
            Compression.Deflate
          )
        ),
        let
          _t = ((type nullable text) meta [Serialized.Text = true])
        in
          type table [
            Team = _t,
            Origin = _t,
            Destination = _t,
            #"Departure Date" = _t,
            #"Arrival Date" = _t,
            #"Distance kms" = _t
          ]
      ),
      #"Changed Type" = Table.TransformColumnTypes(
        Source,
        {
          {"Team", type text},
          {"Origin", type text},
          {"Destination", type text},
          {"Departure Date", type datetime},
          {"Arrival Date", type datetime},
          {"Distance kms", Int64.Type}
        }
      ),
      #"Inserted Date" = Table.AddColumn(
        #"Changed Type",
        "Date",
        each DateTime.Date([Departure Date]),
        type date
      ),
      #"Grouped Rows" = Table.Group(
        #"Inserted Date",
        {"Team", "Date"},
        {{"Total", each List.Sum([Distance kms]), type nullable number}}
      ),
      #"Merged Queries" = Table.NestedJoin(
        #"Grouped Rows",
        {"Team", "Date"},
        #"Inserted Date",
        {"Team", "Date"},
        "Grouped Rows",
        JoinKind.LeftOuter
      ),
      #"Expanded Grouped Rows" = Table.ExpandTableColumn(
        #"Merged Queries",
        "Grouped Rows",
        {"Origin", "Destination", "Departure Date", "Arrival Date", "Distance kms"},
        {"Origin", "Destination", "Departure Date", "Arrival Date", "Distance kms"}
      )
    in
      #"Expanded Grouped Rows"

    Medida DAX con una columna [Fecha] agregada

    Total2 = 
    SUMX(FILTER(ALL('Table'),'Table'[Team]=SELECTEDVALUE('Table'[Team])&&'Table'[Date]=SELECTEDVALUE('Table'[Date])),'Table'[Distance kms])

    Vera_33_1-1614827798020.png

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      Hola, el total se basa en equipo y origen y destino, la fecha puede ser diferente entre las secciones del viaje. La distancia total es la suma de Plant1 a todos los destinos se visitan y regresan a Plant1. Necesito sumar la distancia de las secciones de trought Origin-Plant1 a Destination-Plant1.

      Muchas gracias por ayuda.

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        Hay @Syndicate_Admin @Alberto_O

        Ahora tiene más sentido. Así que necesito identificar el viaje primero, y luego resumir. ¿Tienes más de 1 equipo? Hay otras maneras. Esta es una columna calculada, teniendo en cuenta más de 1 equipo

        Vera_33_0-1614910707159.png

        Column = 
        VAR CurTeam = 'Table'[Team]
        VAR CurDepTime = 'Table'[Departure Date]
        VAR CurArrTime = 'Table'[Arrival Date]
        VAR StarTime = MAXX(FILTER(ALL('Table'),'Table'[Origin]="Planta1"&&'Table'[Departure Date]<=CurDepTime),'Table'[Departure Date])
        VAR EndTime = MINX(FILTER(ALL('Table'),'Table'[Destination]="Planta1"&&'Table'[Arrival Date]>=CurDepTime),'Table'[Arrival Date])
        RETURN
        SUMX(FILTER(ALL('Table'),'Table'[Departure Date]>=StarTime&&'Table'[Arrival Date]<=EndTime&&'Table'[Team]=CurTeam),'Table'[Distance kms])
    • Anonymous's avatar
      Anonymous
      Not applicable

      Hola, creo que explique muy poco sobre mi problema con esta tabla.

       

      La tabla representa los viajes que hace una flotilla de unidades, el problema con la estructura de la tabla es que si quiero mostrar la distancia total recorrida a un destino, solo muestra la distancia del origen a ese destino, y la otra parte del recorrido la pone en una fila aparte.

       

      En Excel, esto lo podía resolver usando formulas para acumular la distancia de un recorrido Origen-Destino-Origen, y mostrar la distancia total (ida y regreso) al destino seleccionado.

       

      La solución de la fecha es buena, solo que hay viajes que inician un día y llegan al destino dos o tres días después del inicio del viaje, igual para el regreso.

       

      Otro problema es que como todos los destinos regresan a Planta1, se mezclan en una sola fila.

       

      Necesito sumar la distancia que recorrió T1 desde que sale de Origen-Planta 1 hasta que llega a Destino-Planta1.

       

      Sobre si debe ser una medida o una columna, no estoy seguro, ya que este valor debo almacenarlo para cada viaje y poder hacer cálculos sobre él en el tiempo.

       

      Gracias por el apoyo.

  • No@Syndicate_Admin,

    ¡Buen día! ¿Se ha resuelto su problema? si es así, por favor considere Aceptar una respuesta correcta como la solución para ayudar a otros a encontrarlo.
    Saludos
    Caitlyn Yan