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
JeroenR
Helper V
Helper V

¿Cuál es la medida más rápida?

Hola a todos

Tengo una pregunta sobre dos medidas que he creado, me gustaría saber qué medida es más rápida y por qué? La razón de esto es que tengo un montón de problemas de memoria con la medida 'avergex' así que quería mejorar esto. Pero la medida mejorada parece utilizar aún más memoria a primera vista, principalmente debido a las líneas adicionales de DAX. Así que me gustaría su opinión al respecto.

Esta es mi medida promedio recién creada:

CountDays LY = 
SUMX (
    VALUES ( 'Date'[DWY] ),
    CALCULATE(
        DISTINCTCOUNT( 'count_measurement_feeds_dimensions'[datekey] ),
        FILTER ( ALL ( 'Date' ), 'Date'[DWY] = EARLIER( 'Date'[DWY] ) - 1 )
    )
)

AVG LYY = 
DIVIDE( [Total Footfall PY], [CountDays LY] )

Esta es mi vieja medida promedio que toma mucha memoria:

AVG PY =
AVERAGEX( VALUES('Date'[Date]) , [Total Footfall PY])

Probablemente se pregunte por qué no sólo estoy contando el número de días en el período seleccionado, porque esta medida es para calcular el promedio del año anterior, y puede ser que en un período de 1 año atrás haya menos días que el período seleccionado actualmente.

Me gustaría conocer sus reflexiones sobre esta medida, si tiene una forma aún más rápida de calcular el promedio de un período anterior me gustaría conocer también, si es posible con una explicación de por qué.

1 ACCEPTED SOLUTION
AlB
Super User
Super User

@JeroenR

Pensé que el problema principal era que el sistema se quedaba sin memoria? Estaba tratando de conseguir un equivalente que se ejecuta más rápido, sin problemas de memoria

No entiendo el papel de 'count_measurement_feeds_dimensions'[datekey] en todo esto. Tendrás que explicar mejor, probablemente basado en la lógica detrás de lo que haces en tu versión de [CountDays LY]. Y las relaciones entre las tablas relevantes del modelo.

Pruebe esto (supone una relación entre DateT y 'count_measurement_feeds_dimensions')

AVG LYY V2 =
VAR filterT_ =
    SELECTCOLUMNS (
        ADDCOLUMNS ( DISTINCT ( DateT[DWY] ), "res", DateT[DWY] - 1 ),
        "DWY", [res]
    )
VAR filterDateT_ =
    CALCULATETABLE ( DateT, TREATAS ( filterT_, DateT[DWY] ), ALL ( DateT ) )
VAR TotalFootfallPY_ =
    CALCULATE ( [Total Footfall], filterDateT_ )
VAR CountDaysLY_ =
    COUNTROWS (
        CALCULATETABLE (
            DISTINCT ( 'count_measurement_feeds_dimensions'[datekey] ),
            TREATAS ( filterT_, DateT[DWY] ),
            ALL ( DateT )
        )
    )
RETURN
    DIVIDE ( TotalFootfallPY_, CountDaysLY_ )CountDays LY

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

View solution in original post

7 REPLIES 7
AlB
Super User
Super User

@JeroenR

El quid aquí está determinando el subconjunto de días en el año anterior En el que se aplicará Total Footfall. Esto se hace de una manera bastante enrevesada y las operaciones de filtrado de anidamiento, que muy bien podría ser la causa de los problemas de memoria. En filterT_ estoy intentando crear una tabla de una columna que tenga ese subconjunto de días relevantes en el año anterior para luego aplicarlo como filtro a Total Footfall (y contar el número de días). Y estoy tratando de hacerlo de una manera que creo que es más simple y será menos exigente en términos de consumo de recursos.

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

AlB
Super User
Super User

@JeroenR

Pensé que el problema principal era que el sistema se quedaba sin memoria? Estaba tratando de conseguir un equivalente que se ejecuta más rápido, sin problemas de memoria

No entiendo el papel de 'count_measurement_feeds_dimensions'[datekey] en todo esto. Tendrás que explicar mejor, probablemente basado en la lógica detrás de lo que haces en tu versión de [CountDays LY]. Y las relaciones entre las tablas relevantes del modelo.

Pruebe esto (supone una relación entre DateT y 'count_measurement_feeds_dimensions')

AVG LYY V2 =
VAR filterT_ =
    SELECTCOLUMNS (
        ADDCOLUMNS ( DISTINCT ( DateT[DWY] ), "res", DateT[DWY] - 1 ),
        "DWY", [res]
    )
VAR filterDateT_ =
    CALCULATETABLE ( DateT, TREATAS ( filterT_, DateT[DWY] ), ALL ( DateT ) )
VAR TotalFootfallPY_ =
    CALCULATE ( [Total Footfall], filterDateT_ )
VAR CountDaysLY_ =
    COUNTROWS (
        CALCULATETABLE (
            DISTINCT ( 'count_measurement_feeds_dimensions'[datekey] ),
            TREATAS ( filterT_, DateT[DWY] ),
            ALL ( DateT )
        )
    )
RETURN
    DIVIDE ( TotalFootfallPY_, CountDaysLY_ )CountDays LY

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

No @AlB ,

Sí, el problema de memoria fue causado por la función AVERAGEX().

Gracias, éste funciona. ¿Podría explicar un poco acerca de la variable 'filterT_' que ha creado?

Intentaré ver más en las métricas y ver qué está haciendo esta nueva medida con la memoria y la velocidad del informe.

AlB
Super User
Super User

Hola @JeroenR

Prueba esto para empezar. A ver si es más rápido.

AVG LYY V2 =
VAR filterT_ =
    SELECTCOLUMNS (
        ADDCOLUMNS ( DISTINCT ( DateT[DWY] ), "res", DateT[DWY] - 1 ),
        "DWY", [res]
    )
VAR filterDateT_ =
    CALCULATETABLE ( DateT, TREATAS ( filterT_, DateT[DWY] ), ALL ( DateT ) )
VAR TotalFootfallPY_ =
    CALCULATE ( [Total Footfall], filterDateT_ )
VAR CountDaysLY_ =
    COUNTROWS ( filterDateT_ )
RETURN
    DIVIDE ( TotalFootfallPY_, CountDaysLY_ )

Por cierto, para el cálculo de la medida PY, ¿no es exactamente el mismo número de días relevantes en el año anterior el mismo que el número de días en el año en curso? ¿O pueden ser diferentes debido a este inusual requisito de omparing el nombre del día de este año vs año anterior?

Y algo más importante, ya que podría simplificar las cosas: ¿count_measurement_feeds_dimensions'[count_fw]

sólo un valor por fecha (DWY) o varios?

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

Hola, @AlB ,

Lo siento por mi respuesta tardía, tuve unos días de autobús. Tengo un pequeño problema con la medida, porque no puedo usar la tabla de fechas para esta. Necesito usar la columna 'count_measurement_feeds_dimensions'[datekey].

¿por qué? Porque, al igual que usted también preguntó, el número de días relevantes en el año anterior no siempre es exactamente el mismo que el número de días en el año en curso. Eso es lo más difícil acerca de la medida, necesito calcular la cantidad de días activos del año anterior basado en la columna 'count_measurement_feeds_dimensions'[datekey].

Y sí, la columna 'count_measurement_feeds_dimensions'[count_fw] tiene varios valores por fecha..

Es por eso que utilicé esta medida.para contar la cantidad de días hace 1 año:

CountDays LY = 
SUMX (
    VALUES ( 'Date'[DWY] ),
    CALCULATE(
        DISTINCTCOUNT( 'count_measurement_feeds_dimensions'[datekey] ),
        FILTER ( ALL ( 'Date' ), 'Date'[DWY] = EARLIER( 'Date'[DWY] ) - 1 )
    )
)

Mi única pregunta sería si hubiera una manera más fácil de calcular en estos días. Porque cuando tengo este número puedo calcular fácilmente el promedio del año anterior.

AlB
Super User
Super User

Hola @JeroenR

¿Dónde está el código de [Total Footfall PY] ? Eso desempeñará un papel importante.

Puede medir la velocidad con el Analizador de rendimiento en PBI o en DAX Studio. Dependerá también de su modelo, no sólo del código en sí. Mejor si puedes compartir el pbix

Y también ayudaría si explicas lo que hacen las medidas

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

Hola @AlB,gracias por su respuesta. Trataré de explicar todo lo mejor posible.
Este es el código de la medida [Total Footfall PY]:

Total Footfall PY = 
SUMX (
    VALUES ( 'Date'[DWY] ),
    CALCULATE (
        [Total Footfall],
        FILTER ( ALL ( 'Date' ), 'Date'[DWY] = EARLIER( 'Date'[DWY] ) - 1 )
    )
)

Como puede ver, este código utiliza otra medida denominada [Total Footfall]. El código de esa medida es sólo una simple suma:

Total Footfall = 
SUM ( 'count_measurement_feeds_dimensions'[count_fw] )

Trataré de explicar cuál es mi intención de estas medidas. Mi medida [Total Footfall] es una medida SUM simple en una columna entera.

Entonces también tengo una medida [Total Footfall PY], esto es una comparación año tras año. Esta medida hace exactamente lo mismo sólo calcula 1 año atrás. La columna 'DWY' significa "NúmeroD ayen la semana * 1000000 + Weeknumber * 10000 + Year". Esto también es una columna entera, tengo esta columna / medida de esta página: https://community.powerbi.com/t5/Desktop/Weekday-Last-Year-Comparison/td-p/54561/page/2

¿Por qué hago esto? Esto se debe a que necesito comparar el nombre del día de este año con el año anterior. Por ejemplo,

05-12-2020 (sábado 5 de diciembre '20) vs 07-12-2020 (sábado 7 de diciembre '19).

Ahora mi pregunta sobre la medida promedio que quiero calcular. Podría suceder que en el año anterior haya menos días que en el año en curso. Por ejemplo: Quiero calcular el promedio de todo el noviembre 2020 frente a todo noviembre 2019, sólo en noviembre de 2019 tengo 20 días de datos y en noviembre de 2020 tengo 30 días de datos. Eso significa que para el promedio de este año tengo que usar [Total Footfall] / 30, y para el año anterior tengo que usar [Total Footfall PY] / 20. No puedo usar un simple "número" en la columna de fecha, esto funciona para la medida del año actual, pero no para la medida del año anterior.

Así que básicamente necesito una medida que cuente los días de 1 año atrás. Preferiblemente uno que cuente la columna DWY, porque esta es la más precisa.

Estoy usando el [Año actual de AVG] y [AVG Año anterior] solo en un gráfico de líneas donde mueste las horas en el x-as. Espero que todo se haya vuelto mucho más claro, por favor, si necesita más comentarios hágamelo saber.

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.