Data Engineering14 min lectura

ETL automatizado con Power Query y Python

Combina el poder de Power Query con scripts de Python para crear pipelines de datos robustos.

BI Analysts Team

Expertos en Datos e IA

El poder de combinar Power Query y Python

Power Query es excelente para transformaciones visuales, pero tiene limitaciones. Python extiende sus capacidades para escenarios complejos como:

  • Web scraping
  • Llamadas a APIs
  • Transformaciones estadísticas avanzadas
  • Procesamiento de texto con NLP
  • Conexión a bases de datos especializadas

Configuración inicial

Requisitos

  1. Python instalado (3.7+)
  2. pandas y dependencias configuradas
  3. Power BI Desktop actualizado

Configurar la ruta de Python

  1. Archivo → Opciones → Opciones de Python
  2. Selecciona tu instalación de Python
  3. Reinicia Power BI

Caso de uso 1: Web Scraping

Extraer datos de una página web que no tiene API:

import pandas as pd
import requests
from bs4 import BeautifulSoup

url = '[https://ejemplo.com/tabla-datos](https://ejemplo.com/tabla-datos)'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

# Encontrar la tabla
table = soup.find('table', {'class': 'datos'})
df = pd.read_html(str(table))[0]

# Limpieza
df.columns = ['Fecha', 'Valor', 'Variacion']
df['Fecha'] = pd.to_datetime(df['Fecha'])

Caso de uso 2: Llamada a API REST

Obtener datos de una API que requiere autenticación:

import pandas as pd
import requests

api_key = 'tu_api_key'
url = '[https://api.ejemplo.com/datos](https://api.ejemplo.com/datos)'

headers = {'Authorization': f'Bearer {api_key}'}
response = requests.get(url, headers=headers)
data = response.json()

df = pd.json_normalize(data['results'])

Caso de uso 3: Procesamiento de texto

Análisis de sentimiento en comentarios de clientes:

import pandas as pd
from textblob import TextBlob

df = dataset  # Power BI pasa los datos aquí

def get_sentiment(text):
    if pd.isna(text):
        return 0
    analysis = TextBlob(str(text))
    return analysis.sentiment.polarity

df['Sentimiento'] = df['Comentario'].apply(get_sentiment)
df['Categoria'] = df['Sentimiento'].apply(
    lambda x: 'Positivo' if x > 0.1 else ('Negativo' if x < -0.1 else 'Neutral')
)

Arquitectura recomendada

Para producción, recomendamos esta arquitectura:

  1. Extracción: Python scripts ejecutados en Azure Functions
  2. Almacenamiento: Azure Blob Storage o Data Lake
  3. Transformación: Power Query conectando a los archivos
  4. Carga: Dataset de Power BI con refresh programado

Mejores prácticas

Manejo de errores

try:
    # Tu código de extracción
    df = extract_data()
except Exception as e:
    df = pd.DataFrame({'Error': [str(e)]})

Logging

import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

logger.info('Iniciando extracción...')

Parametrización

Usa variables de entorno o archivos de configuración, nunca hardcodees credenciales.

Limitaciones a considerar

  1. Timeout: Power Query tiene límites de tiempo de ejecución
  2. Memoria: Datasets muy grandes pueden causar problemas
  3. Dependencias: Todas las librerías deben estar instaladas localmente
  4. Seguridad: Los scripts se ejecutan localmente, no en el servicio

Conclusión

La combinación de Power Query y Python te da lo mejor de ambos mundos: la facilidad de uso de Power Query y el poder ilimitado de Python. Úsalos juntos para crear pipelines de datos robustos y escalables.

¿Necesitas ayuda implementando ETL automatizado? Contáctanos para una evaluación de tu caso.

#ETL#Python#Power Query

¿Te resultó útil este artículo?

Si necesitas ayuda implementando estas soluciones en tu empresa, estamos aquí para ayudarte.

Agenda una consulta gratuita