Microsoft Fabric Community Conference 2025, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount.
Register nowThe Power BI DataViz World Championships are on! With four chances to enter, you could win a spot in the LIVE Grand Finale in Las Vegas. Show off your skills.
Hola
Estoy a punto de volverme loco. Necesito ayuda para regarind ABC Clustering mis Clientes. Tengo un esquema estrella clásico en el que mis transacciones están conectadas a la dimensión del cliente a través de Customer_KEY. Nota importante al margen: No puedo crear columnas calculadas, ya que PowerBI no puede administrar tantos datos. Me da errores que mi RAM es insuficiente.
Quiero analizar cuánto en porcentaje de mi volumen en comparación con el volumen total lo obtienen mis primeros 10 clientes y agruparlos en A, B y C.
Realmente no puedo encontrar el error en mis fórmulas DAX. Trabajé con diferentes LLM, pero todavía no obtengo ninguna buena solución para eso.
Puedo decirte lo que he hecho hasta ahora. Te daré los Nombres a continuación:
Dim_Cust - Dimensión del cliente
DIM_Cust[Key] - Clave principal
Fact_TRX - Tabla de hechos para transacciones
TRX_Vol - Volumen de transacciones
Paso 1: Calcular el volumen total
Hola @Theo_Alex ,
Su enfoque actual es sólido, pero hay un problema engañoso en la forma en que calcula el volumen acumulado de transacciones. En concreto, el problema es que la función FILTER que está utilizando para acumular valores está atrayendo a más clientes de los que debería, lo que estropea la cuota acumulada. ¿El resultado? Obtienes acciones acumuladas que superan el 100%, lo cual es muy frustrante cuando intentas agrupar a tus clientes de manera lógica.
Vamos a arreglarlo paso a paso. En primer lugar, la medida Total_Volume se ve bien:
Total_Volume = SUM(Fact_TRX[TRX_Vol])
Está sumando el volumen de transacciones en todos los registros, que es exactamente lo que necesita para comparar la cuota acumulada.
Su medida Volume_Per_Customer también es sólida. Calcula el volumen total de transacciones por cliente eliminando todos los demás filtros, excepto el Dim_Cust[Key], lo que garantiza que está viendo el volumen agregado de cada cliente:
Volume_Per_Customer =
CALCULATE(
SUM(Fact_TRX[TRX_Vol]),
ALLEXCEPT(Dim_Cust, Dim_Cust[Key])
)
Donde las cosas empiezan a salir mal es en el cálculo del volumen acumulado. El problema proviene de cómo se aplica la función FILTRO. Estabas usando MAXX(ALL(Dim_Cust, Dim_Cust[Key])...) para comparar rangos, pero eso introduce un contexto de filtro incorrecto. En su lugar, debe asegurarse de que el cálculo acumulativo solo tenga en cuenta a los clientes con un rango superior al cliente actual. Esta es la medida corregida:
Cumulative_Volume =
CALCULATE(
SUM(Fact_TRX[TRX_Vol]),
FILTER(
ALL(Dim_Cust),
[Customer_Rank] <= MAX(Dim_Cust[Customer_Rank])
)
)
Observe cómo estoy usando ALL(Dim_Cust) dentro de la función FILTER. Esto garantiza que tengo en cuenta a todos los clientes a la hora de clasificarlos, pero aplico la suma acumulada solo a aquellos con un rango menor o igual al rango del cliente actual.
A continuación, la cuota acumulada debe dividir simplemente este volumen acumulado por el volumen total:
Cumulative_Share =
DIVIDE(
[Cumulative_Volume],
[Total_Volume],
0
)
Por último, vamos a clasificar a los clientes en clústeres A, B y C en función de su cuota acumulada. Tienes razón al usar una función SWITCH aquí:
ABC_Category =
SWITCH(
TRUE(),
[Cumulative_Share] <= 0.10, "A",
[Cumulative_Share] <= 0.20, "B",
"C"
)
Lo que sucedía antes es que la cuota acumulada se calculaba incorrectamente, por lo que los clústeres estaban desactivados. Ahora, la cuota acumulada se mantendrá dentro del rango de 0 a 100% y la clasificación ABC funcionará como se espera. Esta configuración se actualizará dinámicamente a medida que ingresen nuevos datos de transacción.
Saludos
Hola de nuevo,
Agregué una columna calculada con rangos en mi dimensión de cliente y cambié todas las medidas, pero no puedo visualizar mis datos en una tabla. "La consulta supera los recursos disponibles"
Hola a todos
En primer lugar, DataNinja777, ¡gracias por su solución!
Y @Theo_Alex , parece que su problema es que ha excedido la capacidad de memoria al agregar una columna de cálculo adicional, por lo que en este caso, puede usar el dax clasificado de measure para asegurarse de que su capacidad pueda mantenerlo en funcionamiento, esto es lo que he hecho para su referencia.
Customer_Rank =
RANKX(
ALL(Dim_Cust),
[Customer_Transaction_Volume],
,
DESC,
DENSE
)
Cumulative_Transaction_Volume =
VAR CurrentRank = [Customer_Rank]
RETURN
CALCULATE(
SUM(Fact_TRX[TRX_Vol]),
FILTER(
ALL(Dim_Cust),
[Customer_Rank] <= CurrentRank
)
)
Si tiene alguna otra pregunta, puede consultar el archivo pbix que subí, espero que ayude, ¡y me sentiría honrado si pudiera resolver su problema!
¡Espero que te ayude!
Saludos
Apoyo de la comunidad Team_ Tom Shen
Si esta publicación ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
¡HOLA!
Gracias por tu esfuerzo. Lo que pasa es con el cálculo de la Comulativ_volume:
Cumulative_Volume = CALCULATE( SUM(Fact_TRX[TRX_Vol]), FILTER( ALL(Dim_Cust), [Customer_Rank] <= MAX(Dim_Cust[Customer_Rank]) ) )
Como tengo muchos clientes, PowerBi no puede calcular el rango a través de una columna calculada. Es por eso que no puedo usar la fórmula Max() para calcular el cumulative_Volume. Siempre recibo el error de que no tengo suficiente memoria 😞