Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

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.

Reply
Anonymous
Not applicable

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.
Mini Model.png

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.


Mini Viz.png

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

1 ACCEPTED 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.

View solution in original post

9 REPLIES 9
amitchandak
Super User
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])))

Anonymous
Not 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

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.

Anonymous
Not applicable

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 :-

Counting_Store_Crossfilter de la casa de los
CALCULATE(COUNTROWS(Store),CROSSFILTER(Transactions[StoreID],Store[StoreID],Both))

El resultado que desea se puede lograr con esto. Puede explorar más sobre crossfilter. También hay muchos videos de tue. Espero que esto ayude
saludos
Hemant
Anonymous
Not applicable

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:

Counting_Store_UseRelationship de la casa de los 20o (en
CALCULATE(COUNTROWS(Store),USERELATIONSHIP(ProgramID[Program ID], Store[ProgramID]))

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.

Anonymous
Not applicable

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

filter direction.pngfilter.pngfilter2.png

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.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.