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

The FabCon + SQLCon recap series starts April 14th at 8am Pacific. If you’re tracking where AI is going inside Fabric, this first session is a can't miss. Register now

Reply
grggmrtn
Post Patron
Post Patron

Nuestros datos tienen 1 tabla de hechos, muchas dimensiones, y estoy perdido

Nuestros datos fueron creados para ser fáciles en el servidor y nuestros escritorios.

Tenemos una sola tabla de hechos sin hechos, que contiene ONLY columnas de clave - una clave para cada dimensión, con el prefijo CK (clave común).

A continuación, tenemos, por ejemplo, Dim_Customer, que solo tiene dos columnas: CK_Customer y CustomerID.

Dim_Service ha CK_Service y ServiceName

Dim_ServiceDetails ha CK_ServiceDetals y ServiceID

Dim_Supplier ha CK_Supplier, SupplierName, SupplierType, SupplierCategory

Dim_Date tiene CK_Date y un montón de columnas de fecha (Fecha, año, añoMeses, etc...)

Hay (hasta ahora) 8 dimensiones en total.

Esto es genial. Crea un maravilloso esquema de estrella con cada dimensión relacionada con la tabla de hechos (uno a muchos) a través de su CK respectiva. Todas las flechas apuntan hacia adentro hacia la tabla de hechos.

Simplemente no puedo hacer nada con los datos (en lo que mis escasas habilidades lo permitan). Puesto que no hay conexión de las dimensiones entre sí - quiero decir, es dimensión a hecho, no al revés, así que no hay puente entre dimensiones, a pesar de que la clave está allí.

Extraño los hechos, a lo grande.

No puedo averiguar cómo escribir una medida que me diga cuántos clientes recibieron el Servicio A en marzo de 2017.

No puedo averiguar cómo calcular la primera fecha en que un cliente recibió un servicio (basado en ServiceID). O la última cita.

¿Cuántos clientes reciben un servicio hoy?

Si alguien me señala en la dirección correcta, estaría muy agradecido. Hasta hornearé galletas.

1 ACCEPTED SOLUTION

@grggmrtn

¡Definitivamente llegar allí!.

La única razón por la que cotecé de forma rígida las medidas de ejemplo fue para ilustrar cómo se construyen (y también suponiendo que estas medidas no se iban a segmentar.

De hecho, si vas a usar segmentaciones, la vida se vuelve MUCHO más fácil, y no tienes que codificar de forma rígida nada (que va a ser cortado, por supuesto)

Antes de los ejemplos, permítanme disculparme ya que sólo les mostré la tabla Date dim (como ejemplo). Sólo para mostrarle la imagen completa con respecto al modelo, aquí está la captura de pantalla de Excel de las tablas tenues de muestra y la tabla de hechos:

excel data.JPG

y el modelo está configurado de la siguiente manera:

model.JPG

Ok, así que ahora vamos a cortar algunos datos:

En primer lugar, las medidas básicas necesarias:

Count of Cutomers = DISTINCTCOUNT('Fact'[Customer Key])

Count of Services = DISTINCTCOUNT('Fact'[Service Key])

Ahora podemos jugar con segmentaciones de fecha y servicio de sus respectivas mesas Dim:

Slicers all.JPG

o incluso filtrar seleccionando un punto en uno de los objetos visuales (en este caso la fecha 6 enero de 2019 en el gráfico de barras)

graph filter.JPG

La única advertencia, aunque muy importante, es que debe utilizar una tabla de fechas (con fechas coninuosas y cubriendo todo el período de sus datos). La forma de resolver esto es crear una tabla de calendario (puede probar la función CALENDARAUTO), rellenarla con las columnas que necesita (nombre del mes, número de mes, semana del año, año, etc.). A continuación, vincule esta nueva tabla Calendar a la tabla Date Dim (mediante los campos de fecha para establecer la relación) y, a continuación, use esta tabla de calendario para los objetos visuales y las expresiones de filtrado, especialmente si desea usar funciones de inteligencia de tiempo. Puede obtener mediante el uso de DAX sin una tabla de calendario, pero es engorroso y laborioso. Por otro lado, el uso de una tabla de calendario tiene sus deficiencias -muy pocas y menores- por ejemplo, si la utiliza en una segmentación de datos y selecciona una fecha para la que no hay "hechos"). A pesar de todo, el uso de una tabla De calendario es una "Práctica recomendada" aceptada.

El modelo con una tabla de calendario:

model new.JPG

Creo que así es como PBI se supone que funciona y es más eficiente (usando Tablas Dim, etc.)

Espero que esto ayude





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






View solution in original post

10 REPLIES 10
PaulDBrown
Community Champion
Community Champion

@grggmrtn

¿Cómo es tu tabla de hechos "sin hechos"? (me encanta la expresión btw!)

¿Sigue una estructura similar a esta?

Factless Fact.JPG

y sólo por un ejemplo, la tabla de atenuación de fecha correspondiente que tengo es la siguiente:

factless dim date.JPG

En este ejemplo, el número de clientes hoy en día es:

customers today.JPG

y otro ejemplo:week 1.JPG





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






Hey @PaulDBrown gracias por su respuesta!

Eso es más o menos exactamente cómo se ve nuestra tabla de hechos - también conocido como nada más que llaves.

Todas las dimensiones se parecen a la tabla de fechas, pero algunas de ellas tienen varias columnas, aparte de la clave.

Creo que tengo la medida de "número de clientes". Pero sabes que nunca es tan simple. Es el número de clientes que comenzaron con nosotros antes de 2009, agrupados por qué proveedor entre estas fechas que viven dentro de un radio de 500 millas, etc.

Y eso es sólo las medidas y columnas personalizadas. ¿Qué hay de las visualizaciones? Hasta ahora estoy poniendo todas las teclas en todas mis visualizaciones sólo para conseguir algún tipo de vínculo entre las dimensiones (las relaciones en el esquema de estrella no son suficientes...).

Y Google no ayuda.

@grggmrtn

Nunca es tan simple, lo sé... 😊

Sin embargo, la forma de implementar las medidas en general es usar tantas expresiones basadas en las tablas de atenuación que sean necesarias en las instrucciones de filtro y realizar los cálculos correspondientes en las columnas de la tabla de hechos. No debería haber un problema (estoy siendo simple, lo sé...!)

Según los objetos visuales, se aplica lo mismo: utilice las tablas tenues como ejes, filas ect (la parte Fiter del objeto visual) y medidas como valores.

Ahora que lo pienso, los únicos (evidentes) "Hechos" que faltan en su Tabla de Hechos Sin Hechos son valores numéricos. Así que supongo que estás limitado a contar, básicamente (y medidas derivadas de los mismos, variaciones por período, etc.).





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






@PaulDBrown-nos estamos acercando, como muy cerca 🙂

Entiendo lo que estás diciendo, y lo entiendo en teoría.

El problema con el uso de las tablas Dim en mis instrucciones de filtro es que se vuelven codificadas de forma rígida. Así que tengo que usar una medida para cada valor posible que pueda necesitar para filtrar? Prefiero hacer eso usando rebanadoras...

También mis medidas deben ser (usando sus ejemplos como base)

Number of customers =
CALCULATE(DISTINCTCOUNT('Fact'CK_Customer);
FILTER('Date';
'Date'[Date] = SLICED_DATE))

y el segundo ejemplo que muestra no funciona realmente para mí, porque solo se refiere a la clave de la dimensión Customer, pero eso significaría que no hay ninguna conexión con la dimensión de servicio, ya que no hay ninguna clave de servicio con el nombre?

Mismo problema para todas las medidas que necesitan datos de dos o más dimensiones

Realmente espero tener sentido...

@grggmrtn

¡Definitivamente llegar allí!.

La única razón por la que cotecé de forma rígida las medidas de ejemplo fue para ilustrar cómo se construyen (y también suponiendo que estas medidas no se iban a segmentar.

De hecho, si vas a usar segmentaciones, la vida se vuelve MUCHO más fácil, y no tienes que codificar de forma rígida nada (que va a ser cortado, por supuesto)

Antes de los ejemplos, permítanme disculparme ya que sólo les mostré la tabla Date dim (como ejemplo). Sólo para mostrarle la imagen completa con respecto al modelo, aquí está la captura de pantalla de Excel de las tablas tenues de muestra y la tabla de hechos:

excel data.JPG

y el modelo está configurado de la siguiente manera:

model.JPG

Ok, así que ahora vamos a cortar algunos datos:

En primer lugar, las medidas básicas necesarias:

Count of Cutomers = DISTINCTCOUNT('Fact'[Customer Key])

Count of Services = DISTINCTCOUNT('Fact'[Service Key])

Ahora podemos jugar con segmentaciones de fecha y servicio de sus respectivas mesas Dim:

Slicers all.JPG

o incluso filtrar seleccionando un punto en uno de los objetos visuales (en este caso la fecha 6 enero de 2019 en el gráfico de barras)

graph filter.JPG

La única advertencia, aunque muy importante, es que debe utilizar una tabla de fechas (con fechas coninuosas y cubriendo todo el período de sus datos). La forma de resolver esto es crear una tabla de calendario (puede probar la función CALENDARAUTO), rellenarla con las columnas que necesita (nombre del mes, número de mes, semana del año, año, etc.). A continuación, vincule esta nueva tabla Calendar a la tabla Date Dim (mediante los campos de fecha para establecer la relación) y, a continuación, use esta tabla de calendario para los objetos visuales y las expresiones de filtrado, especialmente si desea usar funciones de inteligencia de tiempo. Puede obtener mediante el uso de DAX sin una tabla de calendario, pero es engorroso y laborioso. Por otro lado, el uso de una tabla de calendario tiene sus deficiencias -muy pocas y menores- por ejemplo, si la utiliza en una segmentación de datos y selecciona una fecha para la que no hay "hechos"). A pesar de todo, el uso de una tabla De calendario es una "Práctica recomendada" aceptada.

El modelo con una tabla de calendario:

model new.JPG

Creo que así es como PBI se supone que funciona y es más eficiente (usando Tablas Dim, etc.)

Espero que esto ayude





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






@PaulDBrown Estamos tan cerca que puedo sentir que es la gravedad 🙂

He hecho algunas imágenes y voy a tener cuidado con el veredicto hasta que haya validado los datos un poco más. Se ve bien y creo que esta es definitivamente la dirección correcta.

Algo no está bien, y no estoy seguro de dónde va mal. Hay algo en los datos que necesito averiguar : cada 'DIM_Citizen'CitizenID tiene más de una CK_Citizen clave.

así que... Seguiré buscando. Mientras tanto, marcaré tu última respuesta como la respuesta correcta y seguiré intentándolo. Es posible que vuelvas a saber de mí pronto si empiezo a arrancarme el pelo de nuevo 🙂

@grggmrtn

Esperando esas galletas!!!

Me alegra oír que las cosas están funcionando. Háganos saber si podemos ser de ayuda adicional.

Mejor.

PS. Dependiendo de lo que necesite contar, tendrá que utilizar la función COUNTROWS.





Did I answer your question? Mark my post as a solution!
In doing so, you are also helping me. Thank you!

Proud to be a Super User!
Paul on Linkedin.






@PaulDBrown- así que... Encontré un gran bleah

¿Recuerdas que dije al principio que la tabla de hechos y las dimensiones contienen una clave común? Sigue siendo cierto. Pero aprendí algo nuevo desde entonces:

Dim_Customer no solo tiene identificadores de cliente, y eso es crear varios valores clave. Un ID de cliente puede tener varios, porque hay una nueva clave creada si el cliente tiene una nueva dirección - algunos de mis clientes tienen hasta 25 claves.

Un ejemplo probablemente sería mejor:

DIM_Customer								
								
CK_Customer(key)	CustomerID		Date			Address			City
430					1				some_date		Rose Street		Rome
431					1				next_date		Tulip Ave.		Rome
432					1				next_date2		Blue Rd.		Milano
433					1				last_date		Cube Sq.		Milano
434					2				some_date		Mouse St.		Bologna
435					3				some_date		Tomato Ln.		Napoli
436					3				next_date		Almond Ave.		Napoli

Por lo tanto, en esta tabla de dimensiones, tengo 3 CustomerID distintos, pero 7 CK_Customer distintos.

Y en mi tabla de hechos, sólo tengo CK_Customer, haciendo un DISTINCTCOUNT completamente inútil. Sólo puedo imaginar que esto va a ser el caso para la mayoría de las otras columnas clave, así.

¿Tenía algún sentido, y tienes alguna idea?

amitchandak
Super User
Super User

No puedo averiguar cómo escribir una medida que me diga cuántos clientes recibieron el Servicio A en marzo de 2017.

calculate(count(fact[customer_id)),services[name]-"A", date[Month-Year]-"Marzo 2017")

En mi sistema tengo ventas y pocos

Medida 2 - CALCULATE(SUM(Sales[Net Sales]),'Item'[Brand]"Brand 1",'Date'[Month-Year]-"Mar-2018")

No puedo averiguar cómo calcular la primera fecha en que un cliente recibió un servicio (basado en ServiceID). O la última cita.

crear una tabla de matriz con cliente, servicio con fechas mínimas y máximas de la tabla de fechas de hecho ot

¿Cuántos clientes reciben un servicio hoy?

calculate(count(fact[customer_id)),date[date]-today())

Apreciamos tus Felicitaciones. En caso de que esta sea la solución que está buscando, márquela como la solución. En caso de que no ayude, por favor proporcione información adicional y márqueme con @
Gracias. Mi blog reciente -
Ganador-Topper-on-Map-How-to-Color-States-on-a-Map-with-Winners , HR-Analytics-Active-Employee-Hire-and-Termination-trend
Power-BI-Working-with-Non-Standard-Time-Periods Y comparación de datos entre intervalos de fechas

Conectar en LinkedIn

Share with Power BI Enthusiasts: Full Power BI Video (20 Hours) YouTube
Microsoft Fabric Series 60+ Videos YouTube
Microsoft Fabric Hindi End to End YouTube

Gracias por su respuesta rápida @amitchandak

En primer lugar - la lista de "No puedo entender" era retórica, pero tomemos sus ejemplos.

calculate(count(fact[customer_id)),services[name]="A", date[Month-Year]="March 2017")

No tengo idea de lo que esto es couting. El resultado que me está dando es más de 22.000 - y sé que el número debe ser de aproximadamente 1.600. Además, preferiría que la medida tomara los valores de lo que estoy cortando/mostrando en mis objetos visuales, en lugar de que se codificaran de forma rígida en el DAX.

create a matrix table with customer, service with min and max dates from fact ot date table

Si lo creo a través del uso de una matriz, entonces no podré usar las fechas de inicio/parada en otros cálculos. Necesito esta funcionalidad.

Además, hacerlo en la tabla de matriz significaría que esa fecha de inicio cambiaría si filtro el intervalo de fechas de la tabla. Eso significa que no será la fecha de inicio correcta.

Y todavía tengo el problema de cómo visualizar todos estos datos cuando tengo que pasar por la tabla de hechos sin hechos...

Helpful resources

Announcements
New to Fabric survey Carousel

New to Fabric Survey

If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.

Power BI DataViz World Championships carousel

Power BI DataViz World Championships - June 2026

A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.

Join our Fabric User Panel

Join our Fabric User Panel

Share feedback directly with Fabric product managers, participate in targeted research studies and influence the Fabric roadmap.

March Power BI Update Carousel

Power BI Community Update - March 2026

Check out the March 2026 Power BI update to learn about new features.

Top Kudoed Authors