Puede el COLLECT agrupar promediando?

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • andresf02
    Senior Member
    • nov
    • 190

    #1

    Puede el COLLECT agrupar promediando?

    Buenas Tardes

    Tengo una tabla interna como la siguiente:

    IT_VALORES
    -----------------------------------------------
    |....ORDEN....|....KILOGRAMOS....|....TIEMPO....|
    -----------------------------------------------
    |....500001...|.........400,0..........|........4, 5.....|
    |....500001...|.........200,0..........|........5, 5.....|
    |....500001...|.........300,0..........|........2, 0.....|
    |....500002...|.........100,0..........|........2, 5.....|
    |....500002...|.........500,0..........|........3, 5.....|

    y necesito agruparla por ORDEN pero con las condiciones siguientes:

    *-La columna KILOGRAMOS debe sumarse
    *-La columna TIEMPO debe promediarse


    De tal manera que debe quedar:

    IT_VALORES
    -----------------------------------------------
    |....ORDEN....|....KILOGRAMOS....|....TIEMPO....|
    -----------------------------------------------
    |....500001...|.........900,0..........|........4, 0.....|
    |....500002...|.........600,0..........|........3, 0.....|


    Se que con el Collect podria agruparla facilmente si ambas columnas se debieran SUMAR, pero como necesito que la columna TIEMPO se PROMEDIE, entonces solicito ayuda porque desconozco como realizar este proceso.


    No se si con el mismo COLLECT se pueda realizar esto, o si exista alguna otra funciones que permita agrupar datos sumando y promediando a la vez.


    Si me pueden ayudar con algun codigo se los agradeceria ya que no soy experto en ABAP.


    Gracias!
  • belen6183
    Junior Member
    • feb
    • 12

    #2
    Originalmente publicado por andresf02
    Buenas Tardes

    Tengo una tabla interna como la siguiente:

    IT_VALORES
    -----------------------------------------------
    |....ORDEN....|....KILOGRAMOS....|....TIEMPO....|
    -----------------------------------------------
    |....500001...|.........400,0..........|........4, 5.....|
    |....500001...|.........200,0..........|........5, 5.....|
    |....500001...|.........300,0..........|........2, 0.....|
    |....500002...|.........100,0..........|........2, 5.....|
    |....500002...|.........500,0..........|........3, 5.....|

    y necesito agruparla por ORDEN pero con las condiciones siguientes:

    *-La columna KILOGRAMOS debe sumarse
    *-La columna TIEMPO debe promediarse


    De tal manera que debe quedar:

    IT_VALORES
    -----------------------------------------------
    |....ORDEN....|....KILOGRAMOS....|....TIEMPO....|
    -----------------------------------------------
    |....500001...|.........900,0..........|........4, 0.....|
    |....500002...|.........600,0..........|........3, 0.....|


    Se que con el Collect podria agruparla facilmente si ambas columnas se debieran SUMAR, pero como necesito que la columna TIEMPO se PROMEDIE, entonces solicito ayuda porque desconozco como realizar este proceso.


    No se si con el mismo COLLECT se pueda realizar esto, o si exista alguna otra funciones que permita agrupar datos sumando y promediando a la vez.


    Si me pueden ayudar con algun codigo se los agradeceria ya que no soy experto en ABAP.


    Gracias!
    Podrias hacer un corte de control por el campo ORDEN, pero tene en cuenta 2 cosas, primero pasar la wa a una auxiliar y que el campo ORDEN sea el primero en tu tabla interna.

    Suerte.

    Comentario

    • ballan
      Senior Member
      • oct
      • 671

      #3
      Efectivamente el collect solo suma, no promedia pero con un sencillo truco puedes simularlo

      1.- Añade a tu tabla un campo al final que sea de tipo I, la idea es que ese campo valga 1 siempre, te quedaria algo asi

      IT_VALORES
      --------------------------------------------------------------
      |....ORDEN....|....KILOGRAMOS....|....TIEMPO....|. .....LINEAS....|
      ---------------------------------------------------------------
      |....500001...|.........400,0..........|........4, 5.....|.......1..........|
      |....500001...|.........200,0..........|........5, 5.....|.......1..........|
      |....500001...|.........300,0..........|........2, 0.....|.......1..........|
      |....500002...|.........100,0..........|........2, 5.....|.......1..........|
      |....500002...|.........500,0..........|........3, 5.....|.......1..........|

      2.- Harias un collect normal con los kilos y el tiempo y en el campo lineas tendrias el numero de lineas que habia de cada orden por lo tanto si divides el valor del campo tiempo (suma de los tiempos) entre el valor del campo lineas (numero de registros) obtendras el promedio

      IT_VALORES
      --------------------------------------------------------------
      |....ORDEN....|....KILOGRAMOS....|....TIEMPO....|. .....LINEAS....|
      ---------------------------------------------------------------
      |....500001...|.........900,0..........|........12 .......|.......3..........|
      |....500002...|.........600,0..........|........6. ........|.......2..........|


      3.- Al final podrias hacer algo asi

      loop at tabla assigning <linea>.

      <linea>-tiempo = <linea>-tiempo / <linea>-lineas.

      endloop.

      Comentario

      • Jewel_1982
        Junior Member
        • nov
        • 20

        #4
        Un ole por BALLAN, me ha gustado!

        Comentario

        • ballan
          Senior Member
          • oct
          • 671

          #5
          jaja, gracias

          Comentario

          Trabajando...