Cómo crear un gráfico de dispersión con regresión lineal en Power BI: paso a paso
Aprende a crear un gráfico de dispersión con regresión lineal en Power BI para visualizar correlaciones e identificar outliers. Esta técnica es útil para mostrar la relación entre dos variables y añadir una línea de tendencia calculada con DAX cuando el visual nativo no es suficiente.
Requisitos previos
- Power BI Desktop instalado.
- Un conjunto de datos sencillo con al menos dos medidas numéricas (p. ej.: Sales y Quantity) y una clave temporal o categórica.
- Noções básicas de DAX y del Editor de consultas.
Paso 1: Preparar los datos
Importa los datos a Power BI y asegúrate de que tienes columnas numéricas para X e Y (por ejemplo, Quantity como X y Sales como Y). Si es necesario, crea una tabla de muestra en el Editor de consultas o usa Excel/CSV.
// Exemplo de tabela simples (CSV) com Product, Quantity, Sales
Product,Quantity,Sales,Date
A,10,200,2024-01-01
B,5,75,2024-01-02
C,20,420,2024-01-03
Paso 2: Crear medidas base
Crea medidas que representen los ejes X e Y. Normalmente son sumas o medias. Ejemplos con suma de Sales y Quantity:
QuantitySum = SUM(Table[Quantity])
SalesSum = SUM(Table[Sales])
Si estás analizando por fila (punto por producto), puedes usar columnas en lugar de medidas. Pero, para agregaciones por categoría, las medidas son más flexibles.
Paso 3: Calcular la regresión lineal en DAX
Vamos a calcular la línea de regresión (y = a + b*x) usando fórmulas DAX para b (pendiente) y a (intersección). Usamos medidas que consideren el contexto actual del visual.
// Soma das X e Y no contexto
X_Sum = SUM(Table[Quantity])
Y_Sum = SUM(Table[Sales])
// Contagem de pontos (dependendo do detalhe, pode ser DISTINCTCOUNT de Product)
N = COUNTROWS(VALUES(Table[Product]))
// Média X e Y
X_Mean = DIVIDE([X_Sum], [N])
Y_Mean = DIVIDE([Y_Sum], [N])
// Covariância e variância para o declive b
Cov_XY = SUMX(VALUES(Table[Product]), (SUM(Table[Quantity]) - [X_Mean]) * (SUM(Table[Sales]) - [Y_Mean]))
Var_X = SUMX(VALUES(Table[Product]), (SUM(Table[Quantity]) - [X_Mean]) ^ 2)
Slope_b = DIVIDE([Cov_XY], [Var_X])
Intercept_a = [Y_Mean] - [Slope_b] * [X_Mean]
// Valor da linha de tendência para um ponto (usado para plotar a linha)
TrendY = [Intercept_a] + [Slope_b] * SUM(Table[Quantity])
Notas: usa VALUES(Table[Product]) u otra granularidad adecuada a tu modelo. Si los puntos son por fila, ajusta para iterar por ID de fila.
Paso 4: Crear el gráfico de dispersión con puntos
Inserta un Scatter chart en el informe. Define:
- X Axis: QuantitySum (o columna Quantity para cada punto)
- Y Axis: SalesSum (o columna Sales)
- Details: Product (o identificador del punto)
- Size: (opcional) otra medida, p. ej.: SalesSum
Esto dibuja los puntos. Si usas agregaciones, asegúrate de que el nivel de detalle en el visual corresponde a lo que usaste en las medidas DAX (por ejemplo, Product o Date).
Paso 5: Añadir la línea de regresión al gráfico
El Scatter chart nativo no permite líneas calculadas directamente. Hay dos enfoques sencillos:
- Crear una tabla auxiliar con valores X ordenados y calcular TrendY en DAX; luego trazarla como línea usando un Line and clustered column chart con X en el eje y TrendY como serie de línea.
- Usar un visual personalizado que acepte serie de línea sobre puntos (p. ej.: Line and scatter visual do AppSource).
Ejemplo para la tabla auxiliar:
TrendTable =
VAR MinX = MINX(ALL(Table), Table[Quantity])
VAR MaxX = MAXX(ALL(Table), Table[Quantity])
VAR Step = 1
RETURN
ADDCOLUMNS(
GENERATESERIES(MinX, MaxX, Step),
"Quantity", [Value],
"TrendY", [Intercept_a] + [Slope_b] * [Value]
)
Después crea un visual de líneas: Eje = Quantity (de la TrendTable), Valores = TrendY; para presentar en conjunto, puedes alinear escalas o usar un visual combinado que acepte ambas tablas.
Paso 6: Formatear y manejar errores comunes
Formatea los ejes para una buena lectura y verifica estos errores comunes:
- División por cero en Slope_b: evita usando DIVIDE y comprobaciones en [Var_X].
- Granularidad inconsistente: medidas que usan VALUES diferentes producen resultados incorrectos; uniformiza el detalle (Product, Date).
- Puntos solapados: usa Size y Tooltip para distinguir o aplica jitter en la tabla auxiliar (ligero desplazamiento en X).
Verificar el resultado
Confirma que los puntos reflejan los registros y que la línea de tendencia sigue la nube de puntos. Verifica extremos y calcula manualmente un par de puntos para confirmar la ecuación y = a + b*x. Usa Tooltips y una tabla visual con Quantity, Sales, TrendY para comparar valores punto a punto.
Conclusión
Ahora tienes un gráfico de dispersión con una línea de regresión calculada en DAX, útil para análisis de correlación y detección de outliers. Próximos pasos: experimentar regresión ponderada, R² en DAX o usar un visual personalizado para sobreponer línea y puntos. Consejo: comienza con pocos puntos y aumenta la granularidad solo después de validar las medidas.