Cómo hacer un unpivot en Google Sheets con Apps Script

En este tutorial quiero mostrarte, paso a paso y sin enredos, cómo hacer un unpivot en Google Sheets usando Google Apps Script. ¿Por qué te puede interesar esto? Bueno, el unpivot es la forma más sencilla de convertir esas tablas anchas y difíciles de analizar en una base de datos mucho más manejable, perfecta para tus reportes, dashboards y análisis en profundidad. Te sirve si tienes, por ejemplo, una tabla de ventas por mes y por país, y quieres convertirla en una lista donde cada fila sea una venta única. Así todo queda más fácil de filtrar, resumir y graficar. Si prefieres ver el tutorial en video, te lo dejo aquí abajo:

Antes de meterle mano al código, déjame aclarar qué es exactamente un unpivot. Básicamente, es tomar una tabla como esta:

PaísProductoEneroFebreroMarzo
ColombiaCafé100120130
PerúCacao8090110

Y convertirla en una lista así:

PaísProductoMesVentas
ColombiaCaféEnero100
ColombiaCaféFebrero120
ColombiaCaféMarzo130
PerúCacaoEnero80
PerúCacaoFebrero90
PerúCacaoMarzo110

¿Ves la diferencia? Ahora cada fila representa una venta única y es mucho más sencillo hacer análisis, gráficos dinámicos o cargarlo a Data Studio, por ejemplo.

Pasos para hacer un unpivot con Google Apps Script

Vamos a hacerlo juntos, paso a paso, y te voy contando los detalles y trucos que yo uso para evitar errores comunes. Aquí están los pasos que vamos a seguir:

  • Paso 1: Traer la tabla de origen.
  • Paso 2: Identificar el inicio y el fin de la parte variable.
  • Paso 3: Guardar los encabezados de la parte variable.
  • Paso 4: Recorrer la tabla y construir el nuevo arreglo.
  • Paso 5: Pegar el arreglo resultado en la hoja de destino.

Paso 1: Traer la tabla de origen

Abre tu Google Sheets, ve a Extensiones > Apps Script y crea un nuevo proyecto. Este es el bloque básico para traer los datos:

function unpivot() {
  var hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var rango = hoja.getDataRange();
  var datos = rango.getValues();
  // Aquí comenzamos a procesar los datos
}

Con esto, ya tienes toda la tabla en la variable datos. Mucho ojo: si tienes encabezados en la primera fila, siempre empieza tu procesamiento desde la segunda fila para no mezclar los títulos con los datos.

Paso 2: Identificar la parte variable

Normalmente, los primeros campos (como país y producto) son fijos, y los siguientes (meses, categorías, etc.) son los que queremos “desdoblar”. Yo suelo hacerlo así:

var inicio = 1; // Primera fila con datos (después de los encabezados)
var fin = datos.length;
var columnasFijas = 2; // Por ejemplo, país y producto

Esto te permite ajustar fácil si tu tabla tiene más o menos columnas fijas.

Paso 3: Guardar los encabezados de la parte variable

En mi caso, los encabezados de la parte variable (meses) están a partir de la columna 3. Así los guardo:

var encabezados = datos[0].slice(columnasFijas);

Esto te da un arreglo con los nombres de los meses, que luego vamos a usar para cada fila nueva.

Paso 4: Recorrer la tabla y construir el nuevo arreglo

Aquí viene la magia: por cada fila, vamos a crear tantas filas nuevas como columnas variables haya. Así lo hago yo:

var resultado = [];
for (var i = inicio; i < fin; i++) {
  var fila = datos[i];
  var fijos = fila.slice(0, columnasFijas);
  for (var j = columnasFijas; j < fila.length; j++) {
    resultado.push(fijos.concat(encabezados[j - columnasFijas], fila[j]));
  }
}

¿Qué pasa aquí? Por cada fila original, el script crea una fila nueva por cada columna variable, combinando los datos fijos, el nombre del mes y el valor de la venta.

Paso 5: Pegar el resultado en la hoja de destino

Para no sobreescribir tus datos originales, recomiendo crear una hoja aparte llamada “Destino”. Así pegas el resultado:

var hojaDestino = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Destino");
if (!hojaDestino) {
  hojaDestino = SpreadsheetApp.getActiveSpreadsheet().insertSheet("Destino");
}
hojaDestino.clearContents();
hojaDestino.getRange(1, 1, resultado.length, resultado[0].length).setValues(resultado);

Este bloque no solo pega el resultado, sino que también borra el contenido anterior de la hoja “Destino” para evitar mezclas raras. Si la hoja no existe, la crea automáticamente.

Código completo solo para miembros

Aquí te dejo el código completo, listo para copiar y pegar, solo para miembros de la academia:

Consejos y errores comunes

No olvides: si tienes más o menos columnas fijas, solo cambia el valor de columnasFijas. Si tu hoja de destino no existe, el script la crea por ti. Y si tienes fórmulas en la hoja original, recomiendo copiar solo valores antes de correr el script para evitar errores raros.

¿Te interesa profundizar más en automatizaciones con Apps Script? Te recomiendo mi curso completo de Google Apps Script en la academia, donde aprendemos desde cero hasta crear sistemas completos.

Conclusión

Hacer un unpivot en Google Sheets usando Apps Script te ahorra horas de trabajo manual y te abre la puerta a análisis mucho más poderosos. Siguiendo estos pasos, puedes transformar cualquier tabla ancha en una base de datos lista para analizar, graficar o conectar con otras herramientas de Google. Si ya tienes tu script funcionando, ¡cuéntame en los comentarios cómo te fue o qué dudas te quedaron!

Si quieres aprender a usar Google Forms y Google Sheets desde cero, te invito a tomar un curso gratis de 2 horas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

JuanSGuzman
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.