Forum Discussion
Problema de esquema de estrella
¡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
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 LiSi este post ayuda, por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
9 Replies
- amitchandak
Super User
@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])))
- AnonymousNot applicable
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
- v-yingjl
Community Support
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/38490Best Looks,
Yingjie LiSi este post ayuda, por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.