Estoy tratando de encontrar una manera de sacar los datos normalizados que están en una base de datos MSSQL, girarlos y colocarlos en un archivo de Excel. El problema principal es que tengo muchas de esas bases de datos, cada una con el mismo esquema pero con datos diferentes, lo que también conduce a un conjunto diferente de columnas pivote para cada base de datos.
Actualmente uso SQL Server Reporting Services para esta tarea, pero solo se divide más allá de las 3000 filas (lo cual no es del todo inesperado ya que no está diseñado para esta tarea).
Escenario
Para explicar mis requisitos, permítanme establecer el escenario. Siempre estoy exportando entidades de -digamos- tipo " Person
". Cada persona debe convertirse en una fila en la exportación final. Tengo alrededor de esos 250.000 registros. Este registro de persona tiene alrededor de 25 propiedades "planas" y hasta otras 20 propiedades dinámicas. En su forma final después de girar, espero entre 25 y 300 columnas.
Ejemplo básico de requisito principal
Para visualizar esto con un pequeño ejemplo básico, supongamos que tengo estos datos:
Necesito una herramienta o biblioteca para convertir eso en esto:
Este es un pequeño ejemplo, pero probablemente entiendas el punto.
No es un requisito (ni es bueno tenerlo, como mucho) tener las dos primeras filas separadas, está simplemente en el ejemplo para mayor claridad. Se pueden combinar en una fila (fusionando cosas textualmente, por ejemplo, "Rasgo - Negrita", etc.).
Requisitos principales
Las siguientes cosas son mis requisitos principales:
Person
s como máximo, con aproximadamente 20 s normalizados como máximo PropName
con cada uno de 5 a 10 ValName
s (contando "Otro ..." como uno) y exporte a Excel .No me importa si es una herramienta lista para usar o un software, o alguna biblioteca de software que tengo que conectar yo mismo en mi propia aplicación.
Requisitos adicionales
Los siguientes no son esenciales, pero serían un gran pre:
PropName
s como ValName
s tienen ordenación, lo que debería dar como resultado la ordenación de las columnas.Cosas que he considerado
Aquí hay una breve lista de cosas que he considerado o probado:
Mi pregunta principal y la línea de fondo es: ¿qué recomendaría?
Si bien no he hecho exactamente este tipo de cosas, recomendaría instalar Python y Pandas .
Esta combinación puede:
Mejor aún, todo es gratis, gratis y de código abierto.
Yo lo probaría en Microsoft Access. También podría probarlo en una de las alternativas de Access para Linux, hay algunas, aunque no estoy seguro de cuáles son lo suficientemente estables. Es posible que deba configurarlo para que funcione en fragmentos. Y no me gustaría usar solo un archivo de Excel para contener 250000 registros, haría que el código compilara varios en serie, que es un enfoque de fragmentación natural.
adjuntando lo solicitado:
He hecho pivoting en Access, uno o dos casos vagamente similares, 50-100K registros, no del todo su orden de magnitud pero no demasiado lejos. Funciona, pero está agregando la salida de Excel, que es otra capa. He hecho la capa pero no a mayor magnitud. Uno tiene que tener cuidado con el tamaño del conjunto de datos que arroja en Excel, recomiendo agregar código para "fragmentar" la salida para crear varias hojas de cálculo de Excel. VBA y SQL se integran muy bien en Access, aunque no sé si uno puede llegar a la salida de Excel de esa manera. He hecho ese tipo de trabajo en VBA.
La relación jerárquica en sus columnas con tabulación cruzada (PropName/ValName) no es realmente compatible con el comando PIVOT en SQL Server. Un enfoque alternativo es escribir los datos normalizados en CSV y luego usar una herramienta de terceros que admita grupos de columnas de tabulación cruzada como PropName y ValName.
Una de esas herramientas es xtab.py ( https://pypi.org/project/xtab/ ). Descargo de responsabilidad: lo escribí (al encontrarme en la misma situación en la que te encuentras). Si el uso de Python y el proceso de dos pasos de exportación y luego tabulación cruzada encajan en su flujo de trabajo, puede intentarlo.
cibernético
Jeroën