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

Don't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

Promedio por grupo

Hola

Tengo una tabla de datos que contiene horas en línea por día, tienda y plataforma de socios.

Las tablas de hechos tienen una relación 1:* procedente de los números Dims Storekey, PartnerKey y DateKey

¿Cómo puedo calcular el total de horas en línea por tienda y socio, en todo el rango de fechas seleccionado (a través de una segmentación, sin influencia visual)?

He probado con varias variaciones de TODOS los filtros, claramente mi conocimiento es limitado y no logro producir el resultado deseado.

glearner_0-1736994284725.png

Una vez que obtenga el total de horas en línea, me gustaría usarlo para caclular las ventas totales por hora (replicaré el enfoque para las ventas totales por hora), lo que en última instancia me dará el promedio de ventas por hora por grupo; en última instancia, multiplicando esto por otra medida, las horas fuera de línea y produciendo las ventas perdidas debido al tiempo de inactividad.

¿Alguien puede ayudarme a producir las ventas por socio y tienda en todo el rango de fechas seleccionado>?

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

Hola @glearner

La medida a continuación eliminará cualquier filtro proveniente de la tabla Fechas/Calendario, pero respetará el filtro de otras tablas.

// Calculates the total online hours across all dates, ignoring any filters on the Dates table.
CALCULATE([Online Hours Measure], ALL(Dates))

Para que esta medida funcione, debe utilizar una tabla de dimensiones Fechas independiente con una relación de una sola dirección de uno a varios con la tabla de hechos.

Hola @danextian , me siento tonto

El uso de All Date proporciona la salida prevista, sin embargo, estaba usando All('Date'[DateKey]) que no lo hizo.

¿Tienes alguna idea de por qué? La confirmación de la relación con la tabla de fechas es de 1 a *, en función de la clave de fecha.

Vea a continuación una captura de pantalla

glearner_1-1737000511453.png

¡Gracias!

Con ALL('Date'[DateKey]), el modificador de filtro se aplica exclusivamente a la columna DateKey de la tabla Date. Esto significa que se quitan los filtros destinados específicamente a la columna DateKey, mientras que los filtros de otras columnas de la tabla Date o de cualquier tabla relacionada seguirán activos e influirán en el cálculo. Por lo tanto, si usa la columna Date real en lugar de la columna DateKey, se seguirán aplicando los filtros.

@danextian Entonces, ¿está sugiriendo que en algún lugar, de alguna manera, el modelo semántico está filtrando la tabla de hechos en función de un campo dentro de la tabla de calendario que no es datekey? Dios mío, odio este modelo...

Esperaba calcular estos promedios por tienda y socio de entrega.

¿Sería un todo excepto DeliveryMetrics.StoreKey y DeliveryMetrics.PartnerKey sean adecuados para su propósito?

¿Hay alguna manera de limitar todo en función de la fecha seleccionada en las segmentaciones? AllSelected(Date) quizás?

¡Gracias por su continuo apoyo

Hay una diferencia clave entre modificar el contexto de filtro en una columna y en una tabla. El uso de ALL('Table'[Column]) quita el filtro específicamente de esa columna. Siempre que se haga referencia a esa columna, se omite el filtro. Por ejemplo, si incluye DateKey en un objeto visual junto con una medida que le aplica ALL, aparecerá el mismo valor en todas las filas de la columna, incluso si se aplica una segmentación de datos a DateKey . En este caso, solo las filas visibles cambiarán en función de la selección de la segmentación, pero los valores de la medida permanecerán coherentes en toda la columna debido a la función ALL.

Por otro lado, si filtra por fechas reales con una segmentación, los valores se ajustarán para reflejar el rango filtrado. Sin embargo, la medida seguirá mostrando el mismo valor en toda la columna DateKey porque la función ALL se aplicó específicamente a esa columna.

Esto pone de manifiesto por qué se considera una buena práctica utilizar una tabla de fechas independiente. En tablas desnormalizadas en las que todos los datos residen en una sola tabla, la aplicación de ALL a toda la tabla evitará que los valores cambien, independientemente de los filtros que se le apliquen.

Es una práctica para algunos usar DateKey en una relación en lugar de las fechas reales porque eso es lo que está en la base de datos de origen.

¿Hay alguna manera de limitar todo en función de la fecha seleccionada en las segmentaciones? AllSelected(Date) quizás?

Sí, puede usar ALLSELECTED para limitar el ámbito de ALL en función de la selección actual en segmentaciones de datos o objetos visuales. Sin embargo, es importante entender cómo se comporta ALLSELECTED. Respeta los filtros aplicados en el contexto actual, pero elimina los filtros de nivel inferior dentro de la jerarquía.

Por ejemplo, si agrega columnas como Fecha, Mes, Trimestre y Año de una tabla de fechas a un objeto visual y la medida usa ALLSELECTED, los valores permanecerán coherentes en todas las filas dentro del contexto seleccionado actualmente. Si selecciona Q1 en la segmentación, la medida mostrará el valor total de Q1 en todas las celdas, independientemente de las fechas, meses u otros filtros de nivel inferior individuales.

Esto sucede porque ALLSELECTED conserva los filtros aplicados en niveles superiores (como Q1) mientras ignora los filtros más detallados (como fechas individuales). Es útil cuando se necesita que la medida respete la selección de la segmentación de datos, pero que se agregue a un nivel más amplio dentro de esa selección. Por ejemplo, en los casos en los que desee comparar los días individuales con el total de todos los días visibles.

Excelente @danextian, muchas gracias.
Estamos haciendo grandes progresos, pero es evidente que hay un conocimiento que transfiere el contexto y que se me escapa, ya que el uso de todos los seleccionados no produce el resultado final previsto.

Logré obtener el $ / hora gracias a usted, pero ahora el sumx está produciendo un resultado impredecible, esperaba ver 1.3 x 2 = 2.6 para la primera tienda

glearner_0-1737100021733.png

Además, la tarjeta con la misma medida también produce los resultados incorrectos, ya que esperaba que sumara dicha multiplicación para cada combinación de tienda y socio de entrega.

Medidas definidas a continuación:

1. Desplazamiento = Suma(DeliveryMetrics[Shift])

2. $/hora:

Var D_TotalOnlineHours = CALCULAR([D_OnlineHours],TODOS SELECCIONADOS('Fecha')) Total de horas en línea para la tienda, el socio y en el período de tiempo seleccionado
Var D_TotalRevenue = CALCULAR([D_DeliverySales],TODOS SELECCIONADOS('Fecha')) Ventas totales para Tienda, Socio y en el período de tiempo seleccionado
Var D_SalesPerHour = DIVIDIR(D_TotalRevenue,D_TotalOnlineHours,"")
devolución D_SalesPerHour
multiplicación:
SUMX(DeliveryMetrics,[Shift]*[$/h])

Gracias por su continuo apoyo; Espero sinceramente que, con su ayuda, pueda entender cómo funciona esto y poner fin al informe

Hola @glearner

SUMX(DeliveryMetrics, [Shift] * [$/h]) evalúa cada fila de la tabla DeliveryMetrics individualmente, no en función de combinaciones de tienda y socio de entrega. La expresión [Shift] * [$/h] se calcula para cada fila de la tabla, lo que puede producir resultados diferentes para cada fila y, a continuación, estos valores se suman en todas las filas visibles de DeliveryMetrics.

Si desea que el cálculo tenga en cuenta combinaciones de columnas específicas, evite usar toda la tabla a menos que esas columnas sean las únicas presentes y sus combinaciones sean únicas. El uso de toda la tabla puede dar lugar a resultados no deseados si existen combinaciones duplicadas y puede causar un problema de rendimiento en tablas grandes debido al número de hoja o filas que se están iterando.

Probar:

SUMX(
    // The SUMMARIZECOLUMNS function creates a table grouped by 'table'[column1] and 'table'[column2].
    // It also adds a virtual column named "@value" that contains the result of [the measure].
    SUMMARIZECOLUMNS(
        'table'[column1], 
        'table'[column2], 
        "@value", [the measure]
    ),
    // The SUMX function iterates through each row of the summarized table,
    // accessing the calculated column "@value" and summing its values.
    [@value]
)

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Prices go up Feb. 11th.

Jan25PBI_Carousel

Power BI Monthly Update - January 2025

Check out the January 2025 Power BI update to learn about new features in Reporting, Modeling, and Data Connectivity.

Jan NL Carousel

Fabric Community Update - January 2025

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

Top Solution Authors