Skip to main content
Announcements
See why Qlik is a Leader in the 2024 Gartner® Magic Quadrant™ for Analytics & BI Platforms. Download Now
cancel
Showing results for 
Search instead for 
Did you mean: 
Import
Creator
Creator

Eliminar columnas vacías en script

Buen día.

Si es posible quisiera su colaboración para el siguiente inconveniente que no he podido resolver de manera óptima.

Tengo una tabla en excel que cambia de tamaño, de forma vertical, de acuerdo a la información mensual, por ejemplo para enero llegó con 130 columnas pero para febrero llegó con 145 columnas. Este archivo tiene varias filas. El lío está en que hay columnas que llegan vacías para algunos meses y para otros no, y necesito suprimir las columnas que llegan vacías.

Habrá alguna función o código que me permita identificar cuales, de todas las columnas, vienen vacías y así mismo poder marcarlas para que se puedan eliminar?

Gracias.

Quedo atento a sus comentarios.

Saludos.

1 Solution

Accepted Solutions
hector_munoz
Specialist
Specialist

Hola Juan,

Con la premisa de un fichero de datos con una columna para el año, otra para el mes y 7 columnas con datos aleatorios, este es el script que te podría ayudar a eliminar las columnas del fichero anterior que no estuviesen informadas:

// Tabla de hechos con algunas columnas nulas

HECHOS:

LOAD AÑO, MES, C1, C3, C4, C5, C6, C7

FROM (ooxml, embedded labels, table is Hoja1);

// Se recorren los campos de la tabla 'HECHOS'

FOR vsCampos = 1 TO NoOfFields('HECHOS')

     // Se obtiene el nombre del campo de la iteración

     LET vsNombreCampoIteracion = FieldName($(vsCampos), 'HECHOS');

     // Se obtiene el conteo (nº de registros no nulos) del campo de la iteración

     LET vsConteoCampoIteracion = FieldValueCount('$(vsNombreCampoIteracion)');

     // Se almacena la información anterior en la tabla 'CAMPOS'

     CAMPOS:

     LOAD         FieldName($(vsCampos), 'HECHOS')                  AS [_Nombre Campo],

                  FieldValueCount(FieldName($(vsCampos), 'HECHOS')) AS [_Conteo Campo]

     AUTOGENERATE 1;

NEXT

// Se almacenan los campos a eliminar

CAMPOS_ELIMINAR:

LOAD     [_Nombre Campo] AS [CAMPOS_ELIMINAR Nombre Campo]

RESIDENT CAMPOS

WHERE    [_Conteo Campo] = 0;

// Se recoren los campos a eliminar de la tabla anterior y se eliminan

FOR vsCampos = 0 TO NoOfRows('CAMPOS_ELIMINAR')

     // Se obtiene el nombre del campo a eliminar

     LET vsCammpoAEliminar = Peek('CAMPOS_ELIMINAR Nombre Campo', $(vsCampos), 'CAMPOS_ELIMINAR');

     // Se elimina el campo

     DROP FIELD $(vsCammpoAEliminar);

NEXT

Te adjunto el QVW y el fichero excel con los datos. Espero que te sirva!

Saludos,

H

View solution in original post

2 Replies
hector_munoz
Specialist
Specialist

Hola Juan,

Con la premisa de un fichero de datos con una columna para el año, otra para el mes y 7 columnas con datos aleatorios, este es el script que te podría ayudar a eliminar las columnas del fichero anterior que no estuviesen informadas:

// Tabla de hechos con algunas columnas nulas

HECHOS:

LOAD AÑO, MES, C1, C3, C4, C5, C6, C7

FROM (ooxml, embedded labels, table is Hoja1);

// Se recorren los campos de la tabla 'HECHOS'

FOR vsCampos = 1 TO NoOfFields('HECHOS')

     // Se obtiene el nombre del campo de la iteración

     LET vsNombreCampoIteracion = FieldName($(vsCampos), 'HECHOS');

     // Se obtiene el conteo (nº de registros no nulos) del campo de la iteración

     LET vsConteoCampoIteracion = FieldValueCount('$(vsNombreCampoIteracion)');

     // Se almacena la información anterior en la tabla 'CAMPOS'

     CAMPOS:

     LOAD         FieldName($(vsCampos), 'HECHOS')                  AS [_Nombre Campo],

                  FieldValueCount(FieldName($(vsCampos), 'HECHOS')) AS [_Conteo Campo]

     AUTOGENERATE 1;

NEXT

// Se almacenan los campos a eliminar

CAMPOS_ELIMINAR:

LOAD     [_Nombre Campo] AS [CAMPOS_ELIMINAR Nombre Campo]

RESIDENT CAMPOS

WHERE    [_Conteo Campo] = 0;

// Se recoren los campos a eliminar de la tabla anterior y se eliminan

FOR vsCampos = 0 TO NoOfRows('CAMPOS_ELIMINAR')

     // Se obtiene el nombre del campo a eliminar

     LET vsCammpoAEliminar = Peek('CAMPOS_ELIMINAR Nombre Campo', $(vsCampos), 'CAMPOS_ELIMINAR');

     // Se elimina el campo

     DROP FIELD $(vsCammpoAEliminar);

NEXT

Te adjunto el QVW y el fichero excel con los datos. Espero que te sirva!

Saludos,

H

Import
Creator
Creator
Author

Gracias Hector, muy útil y bueno

Saludos!!