Don't miss your chance to take the Fabric Data Engineer (DP-700) exam on us!
Learn moreThe 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
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.
Solved! Go to Solution.
¡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:
y el modelo está configurado de la siguiente manera:
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:
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)
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:
Creo que así es como PBI se supone que funciona y es más eficiente (usando Tablas Dim, etc.)
Espero que esto ayude
Proud to be a Super User!
Paul on Linkedin.
¿Cómo es tu tabla de hechos "sin hechos"? (me encanta la expresión btw!)
¿Sigue una estructura similar a esta?
y sólo por un ejemplo, la tabla de atenuación de fecha correspondiente que tengo es la siguiente:
En este ejemplo, el número de clientes hoy en día es:
y otro ejemplo:
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.
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.).
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...
¡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:
y el modelo está configurado de la siguiente manera:
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:
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)
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:
Creo que así es como PBI se supone que funciona y es más eficiente (usando Tablas Dim, etc.)
Espero que esto ayude
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 🙂
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.
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?
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
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
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 tableSi 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...
If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.
A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.
Share feedback directly with Fabric product managers, participate in targeted research studies and influence the Fabric roadmap.