Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
¡Hola a todos!
Estoy luchando un poco con un modelo de datos que estamos usando en el trabajo. Estoy tratando de implementar un buen esquema de estrella, pero me estoy enojendo con algunas restricciones.
Es importante saber que todos nuestros datos están separados por algo que llamamos un "identificador de programa". Todos nuestros hechos y dimensiones contienen este programID, es lo que nuestra base de datos está particionada por.
Así que el problema es el siguiente:
Supongamos que tengo una tabla de transacciones, una dimensión de tienda y una dimensión de programa. Las reglas de esquema star dicen que conecto tanto la tienda como el programa a la tabla de transacciones.
En mi visualización, utilizo una segmentación programID procedente de la dimensión del programa, que en mi modelo real contiene información sobre el programa, como la hora de inicio y la hora de finalización. A continuación, mueso las ventas totales y el número de tiendas en total, independientemente de las ventas, aquí es donde comienza el problema.
Debido al esquema de estrella, la tabla Store no se filtra por la tabla de programa y la respuesta, 10, es incorrecta (10 es el número total de tiendas de todos los programas). Por lo tanto, cualquier métrica que derive de Transaction funcionará bien, pero nunca filtraré otras dimensiones por esta "dimensión maestra" ProgramID, que es lo que necesito que haga.
Para resolver esto, puedo pensar en 2 maneras:
1: Cree una relación inactiva entre la tabla de programas y la tabla de tienda y utilice USERELATIONSHIP. Esto hace que todas mis métricas sean bastante feas y más difíciles de trabajar.
2: Utilice una variable para determinar el MAX de Program[Program ID] y, a continuación, aplíquelo como filtro CALCULATE para cada métrica que utilice datos de Store como base. Una vez más, Ugly 😞
¿Hay otra solución en la que no esté pensando?
Gracias de antemano!
Jaap
Solved! Go to Solution.
Hola @Jaap_Olsthoorn ,
Tienes razón. Actualmente userelationship es la mejor manera de resolver este problema porque sus relaciones entre la tabla de tienda y la tabla de transacciones son [id de tienda] en lugar de [identificador de programa]. En este caso, el resultado de VN06 debe ser 3 en lugar de 5 a menos que elija userelationship para pasar el parámetro [programm].
Best Looks,
Yingjie Li
Si este post ayuda, por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
@Jaap_Olsthoorn , si el identificador de programa para almacenar es uno a muchos unirse a ellos para crear un programa de unión, tienda, hecho.
o Fusionar programa y almacenar
o tratar de
calculate(countx(Transactions,related(store[store_id])))
Hola Amitchandak,
Su primera sugerencia parece sugerir la creación de una combinación entre 2 dimensiones, pero mi modelo de datos real tiene alrededor de 10 dimensiones, de las cuales algunas son 1,5M filas. No creas que es una buena solución, ¿verdad? ¿O lo malinterpreta?
Lo mismo para la fusión, que funciona bien en mi caso de prueba, pero no en un modelo de datos adecuado con muchas dimensiones.
La última opción parece menos eficaz que mis soluciones, porque utiliza un iterador, ¿no? Además, esto todavía se basa en transacciones, por lo que las tiendas que no tenían ninguna transacción no se contarían, que no es lo que quiero. Sólo quiero un recuento del número de tiendas en la tabla de la tienda para este programa en particular.
Gracias por pensar a lo largo de la historia!
Jaap
Hola @Jaap_Olsthoorn ,
Puede considerar compartir un archivo de muestra ficticio simple con el esquema de estrella como se muestra en la imagen para una discusión más detallada.
El archivo de muestra y la salida esperada ayudarían enormemente.
Por favor, consulte esta publicación sobre cómo obtener respuesta a su pregunta rápidamente:
https://community.powerbi.com/t5/Community-Blog/How-to-Get-Your-Question-Answered-Quickly/ba-p/38490
Best Looks,
Yingjie Li
Si este post ayuda, por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Bastante justo, aquí está el ejemplo de barebones con el resultado esperado:
https://drive.google.com/file/d/183cMwc8M3xgpXxYaGK_qGA31u_MaZEwa/view?usp=sharing
Sólo tenga en cuenta que mi modelo real tiene más de 10 dimensiones con unos pocos que tienen millones de filas.
¡Gracias!
Hola @Jaap_Olsthoorn ,
Para este escenario Crossfilter es tu amigo.
Prueba una medida como esta :-
Hey ambos:
"Por cierto, en su tabla, sólo hay tres filas sobre VN06 por lo que el valor de VN06 debe ser 3, ¿cómo podría ser 6..." Arg tienes razón, eso fue un error tipográfico. ¡Lo siento!
Muchas gracias por sus sugerencias! Sin embargo, ambas soluciones sugeridas van a través de la tabla de transacciones y ambas confían en que tengamos transacciones en la tabla de transacciones para cada storeID que queremos contar. Quiero contar todas las tiendas independientemente de si existen transacciones para esas tiendas.
He creado un nuevo archivo de prueba que muestra este problema un poco mejor. Hay 2 tiendas en VN06 que tienen 0 transacciones. El número total de tiendas debe ser 5.
https://drive.google.com/file/d/183cMwc8M3xgpXxYaGK_qGA31u_MaZEwa/view?usp=sharing
La mejor solución que he llegado hasta ahora es una relación inactiva entre la tienda y el programa, y luego esta medida:
Hola @Jaap_Olsthoorn ,
Tienes razón. Actualmente userelationship es la mejor manera de resolver este problema porque sus relaciones entre la tabla de tienda y la tabla de transacciones son [id de tienda] en lugar de [identificador de programa]. En este caso, el resultado de VN06 debe ser 3 en lugar de 5 a menos que elija userelationship para pasar el parámetro [programm].
Best Looks,
Yingjie Li
Si este post ayuda, por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Gracias
Temía que hubiera una mejor manera de hacer esto. Debe ser bastante raro tener varios clientes con sus propias transacciones, etc. en una base de datos juntos 🙂
Hola @Jaap_Olsthoorn ,
Trate de cambiar a la dirección del filtro cruzado de uno a ambos
Por cierto, en su tabla, sólo hay tres filas sobre VN06 por lo que el valor de VN06 debe ser 3, ¿cómo podría ser 6...
Best Looks,
Yingjie Li
Si este post ayuda, por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
2 | |
1 | |
1 | |
1 | |
1 |
User | Count |
---|---|
2 | |
2 | |
2 | |
2 | |
1 |