Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
hey usuarios de power bi,
Tengo el siguiente problema con mi informe power bi:
¿Qué voy a hacer?
Quiero comparar un solo proveedor con un grupo de referencia que consta de 1...n proveedores diferentes con las mismas propiedades.
Por ejemplo:
Proveedor 1:
column_customers '50 - 100 clientes'
column_region Alemania
column_employees '<100 empleados'
Así que el grupo de referencia consta de todos los proveedores, que tienen las mismas propiedades (excepto el proveedor 1) también:
column_customers '50 - 100 clientes'
column_region Alemania
column_employees '<100 empleados'
Digamos que hay 200000 proveedores y 5 de ellos (No 7, 100, 450, 1230, 1999) cumplen con los requisitos/propiedades del proveedor 1.
Aquí está mi fórmula dax:
número de proveedores en el grupo de referencia ?
Clientes de VAR max(proveedor[column_customers])
Región de VAR: max(proveedor[column_region])
Empleados de VAR: max(proveedor[column_employees])
Proveedor de VAR: max(proveedor[column_supplier_id])
CALCULATE DE DEVOLUCION(
distinctcount(proveedor[column_supplier_id]); ALL(supplier[column_supplier_id]);supplier[column_customers]-customers;supplier[column_region]-region;supplier[column_employees] á employees; proveedor[column_supplier_id] <> proveedor)
Así que el resultado en una tabla recta se ve así:
|
supplier_id | número de proveedores en el grupo de referencia |
1 | 5 |
2 | 13 |
3 | 25 |
... | ... |
200000 | 133 |
Este ya está funcionando, pero bastante lento. ¿Hay alguna manera de optimizar la fórmula? Hay millones de filas en mi modelo de datos, así que tengo que aumentar el rendimiento.
Espero que alguien de ustedes pueda ayudarme a 😄
Hola @addicted87
Aquí hay una medida que podrías probar. Usando algunos datos de prueba en mi extremo, se desempeñó significativamente mejor que la medida original:
number of suppliers in reference group =
VAR FilteredSupplierKey =
VALUES ( supplier[column_supplier_id] )
VAR SimilarSupplierKey =
CALCULATETABLE (
VALUES ( supplier[column_supplier_id] );
ALL ( supplier[column_supplier_id] );
SUMMARIZE (
supplier;
supplier[column_customers];
supplier[column_region];
supplier[column_employees]
)
)
RETURN
COUNTROWS ( EXCEPT ( SimilarSupplierKey; FilteredSupplierKey ) )
Esto debe seguir la misma lógica que la medida original cuando se filtra en un único identificador de proveedor.
Esta medida también controla los casos en los que se ha filtrado en varios identificadores de proveedor, contando la unión de proveedores "similares".
¿Funciona mejor con sus datos y sigue produciendo resultados correctos?
saludos
Owen
@OwenAuger Muchas gracias por su solución. Este es increíble rápido en comparación con mi solución. Mi tiempo de carga ha disminuido de 30 segundos a 1 segundo... increíble 😉
saludos
Robert
@addicted87
Crear variables en una medida puede dar lugar a cálculos adicionales, intente colocarlas en la expresión de retorno para ver si va más rápido:
number of suppliers in reference group =
CALCULATE(
distinctcount(supplier[column_supplier_id]); Filter(ALL(supplier[column_supplier_id]);
supplier[column_customers]=max(supplier[column_customers]);
supplier[column_region]=max(supplier[column_region]);
supplier[column_employees] = max(supplier[column_employees]);
supplier[column_supplier_id] <> max(supplier[column_supplier_id]))
Sin embargo, no hay manera de aumentar drásticamente la velocidad de rendimiento, ya que la medida se calcula en el momento de interactuar. La otra opción es cambiar la medida a una columna calculada, que aumentaría el tamaño pbix, precalda la fórmula en el momento de abrir el pbix, por lo que sería más rápido cuando se interactúa en los objetos visuales.
Paul Zheng _ Equipo de apoyo de la comunidad
Si este post ayuda, entonces considera Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.