6 de julio de 2017

Transponer tabla sin Generic Load

En la nota publicada AQUI hay un ejemplo de transponer una tabla usando generic load, pero si hay muchos campos a generar, quizas no sea la mejor tecnica.

El siguiente script transforma filas a columnas usando iteraciones y condiciones, que seria mas conveniente con gran volumen de filas a transformar en columnas

Conceptualmente queda así:

















el script queda así:
ventas: 
LOAD * INLINE [
    Sucursal, anio_mes, monto
    Oeste,     201602,   594
    Oeste,     201601,   756
    Norte,     201610,   377
    Oeste,     201603,   602
    Este,      201604,   179
    Este,      201605,   404
    Sur,       201611,   601
    Norte,     201606,   811
    Este,      201602,   807
    Sur,       201603,   500
    Norte,     201601,   647
    Norte,     201604,   794
    Oeste,     201605,   941
    Oeste,     201612,   1088
    Norte,     201607,   1235
    Oeste,     201608,   1382
    Este,      201609,   1529
    Este,      2016010,   1676];

 
 
TRACE INICIO DE GENERIC LOAD;

  generic_key: 
  NoConcatenate 
  LOAD DISTINCT Sucursal Resident ventas;

  generic_field: 
  NoConcatenate 
  LOAD DISTINCT anio_mes AS campo_generico Resident ventas;


  FOR i=1 TO NoOfRows('generic_field')
 
      LET v_generic_field=FieldValue('campo_generico', $(i));

      TRACE PROCESO TABLA $(i) $(v_generic_field);

      LEFT JOIN (generic_key) 
      LOAD Sucursal,
      monto AS $(v_generic_field) 
      Resident ventas
      WHERE anio_mes = '$(v_generic_field)';

  NEXT;
  
TRACE FIN DE GENERIC LOAD;

DROP TABLE ventas;

DROP TABLE generic_field;