Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
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
// 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
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
// 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
Gracias Hector, muy útil y bueno
Saludos!!