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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Optimización de una medida media

Hola

He creado una medida que promedia las colocaciones semanales de artículos durante las seis semanas anteriores. (Debido a que el mismo artículo puede colocarse en la misma tienda cada semana, necesito capturar esto a nivel semanal y luego crear un promedio de cifras semanales para que no se cuenten dos veces). La medida funciona, es muy lenta. ¿Podría ofrecer algún consejo sobre cómo optimizar esto? Una nota: Estoy usando una medida para Ubicaciones en este momento, pero podría cambiar a una columna si eso habilita otros métodos.

Seis colocaciones semanales promedio de WK = DIVIDE(
CALCULAR([Colocaciones],DATESINPERIOD(Calendar_Lookup[Fecha],MAX(Ventas[Fecha]),-7,DÍA))+
CALCULAR([Colocaciones],DATESINPERIOD(Calendar_Lookup[Fecha],MAX(Ventas[Fecha])-7,-7,DÍA))+
CALCULAR([Colocaciones],DATESINPERIOD(Calendar_Lookup[Fecha],MAX(Ventas[Fecha])-14,-7,DÍA))+
CALCULAR([Colocaciones],DATESINPERIOD(Calendar_Lookup[Fecha],MAX(Ventas[Fecha])-21,-7,DÍA))+
CALCULAR([Colocaciones],DATESINPERIOD(Calendar_Lookup[Fecha],MAX(Ventas[Fecha])-28,-7,DÍA))+
CALCULAR([Colocaciones],DATESINPERIOD(Calendar_Lookup[Fecha],MAX(Ventas[Fecha])-35,-7,DÍA)),6,0)
¡Gracias!
1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

@fullcount

La transición de contexto podría estar atascóndote en la medida [Ubicaciones]. En mis pruebas, esto devuelve los mismos resultados y es casi 3 veces más rápido.

Placements =
COUNTROWS(
    CALCULATETABLE(
        VALUES(Sales[Item Name + Store Name]),
        Sales[Units Sold] > 0
    )
)

Esta es su medida.

jdbuchanan71_2-1633016604910.png

Esta es la mía

jdbuchanan71_3-1633016623513.png

View solution in original post

10 REPLIES 10
Syndicate_Admin
Administrator
Administrator

Ese gráfico parece que estás comparando una línea de tendencia con la real. ¿Qué pasa si pones tus colocaciones y las mías una al lado de la otra en una tabla por fecha?

También había establecido el MaxDate como otra variable y estaba tirando cosas, cuando reescribí con mi sintaxis original de seis MAX(Calendar_Lookup[Date]), nuestros números coincidían. ¡Muchas gracias por su ayuda!

@jdbuchanan71 ¿Puede ver alguna razón por la cual la versión de CalcTable que sugirió afectaría mi capacidad para mover las fechas? Estoy tratando de comparar el promedio semanal de las últimas seis semanas con el promedio semanal de hace 46-51 semanas (tasa de avance de LY). Cuando uso mi antigua medida [Colocaciones], calculará el rango anterior correctamente, pero usando la nueva versión CalcTable de la medida, estas dos producen el mismo resultado:

LY Forward 6W Colocaciones semanales promedio:=

VAR TabPlacements = COUNTROWS(CALCULATETABLE(VALUES(Sales[Nombre del artículo + Nombre de la tienda]),Sales[Unidades vendidas]>0))
DEVOLUCIÓN
DIVIDIR(
CALCULAR(TabPlacements,DATESINPERIOD(Calendar_Lookup[Fecha],(MAX(Calendar_Lookup[Fecha])-358),-7,DÍA))+
CALCULATE(TabPlacements,DATESINPERIOD(Calendar_Lookup[Date],(MAX(Calendar_Lookup[Date])-351),-7,DAY))+
CALCULATE(TabPlacements,DATESINPERIOD(Calendar_Lookup[Date],(MAX(Calendar_Lookup[Date])-344),-7,DAY))+
CALCULATE(TabPlacements,DATESINPERIOD(Calendar_Lookup[Date],(MAX(Calendar_Lookup[Date])-337),-7,DAY))+
CALCULATE(TabPlacements,DATESINPERIOD(Calendar_Lookup[Date],(MAX(Calendar_Lookup[Date])-330),-7,DAY))+
CALCULATE(TabPlacements,DATESINPERIOD(Calendar_Lookup[Date],(MAX(Calendar_Lookup[Date])-323),-7,DAY)),6,0)
TY Últimas Ubicaciones Semanales Promedio de 6W:=
VAR TabPlacements = COUNTROWS(CALCULATETABLE(VALUES(Sales[Nombre del artículo + Nombre de la tienda]),Sales[Unidades vendidas]>0))
DEVOLUCIÓN
DIVIDIR(
CALCULAR(TabPlacements,DATESINPERIOD(Calendar_Lookup[Fecha],MAX(Calendar_Lookup[Fecha]),-7,DÍA))+
CALCULATE(TabPlacements,DATESINPERIOD(Calendar_Lookup[Date],MAX(Calendar_Lookup[Date])-7,-7,DAY))+
CALCULAR(TabPlacements,DATESINPERIOD(Calendar_Lookup[Fecha],MAX(Calendar_Lookup[Fecha])-14,-7,DÍA))+
CALCULAR(TabPlacements,DATESINPERIOD(Calendar_Lookup[Fecha],MAX(Calendar_Lookup[Fecha])-21,-7,DÍA))+
CALCULATE(TabPlacements,DATESINPERIOD(Calendar_Lookup[Date],MAX(Calendar_Lookup[Date])-28,-7,DAY))+
CALCULATE(TabPlacements,DATESINPERIOD(Calendar_Lookup[Date],MAX(Calendar_Lookup[Date])-35,-7,DAY)),6,0)

@fullcount

Convierta esto en una medida en lugar de una variable.

TabPlacements = COUNTROWS(CALCULATETABLE(VALUES(Sales[Item Name + Store Name]),Sales[Units Sold]>0))

Luego use la medida en sus otros calcs.

LY Forward 6W Avg Weekly Placements:=
DIVIDE(
		CALCULATE([TabPlacements],DATESINPERIOD(Calendar_Lookup[Date],(MAX(Calendar_Lookup[Date])-358),-7,DAY))+
		CALCULATE([TabPlacements],DATESINPERIOD(Calendar_Lookup[Date],(MAX(Calendar_Lookup[Date])-351),-7,DAY))+
		CALCULATE([TabPlacements],DATESINPERIOD(Calendar_Lookup[Date],(MAX(Calendar_Lookup[Date])-344),-7,DAY))+
		CALCULATE([TabPlacements],DATESINPERIOD(Calendar_Lookup[Date],(MAX(Calendar_Lookup[Date])-337),-7,DAY))+
		CALCULATE([TabPlacements],DATESINPERIOD(Calendar_Lookup[Date],(MAX(Calendar_Lookup[Date])-330),-7,DAY))+
		CALCULATE([TabPlacements],DATESINPERIOD(Calendar_Lookup[Date],(MAX(Calendar_Lookup[Date])-323),-7,DAY))
		,6,0
	)

Syndicate_Admin
Administrator
Administrator

@fullcount

La transición de contexto podría estar atascóndote en la medida [Ubicaciones]. En mis pruebas, esto devuelve los mismos resultados y es casi 3 veces más rápido.

Placements =
COUNTROWS(
    CALCULATETABLE(
        VALUES(Sales[Item Name + Store Name]),
        Sales[Units Sold] > 0
    )
)

Esta es su medida.

jdbuchanan71_2-1633016604910.png

Esta es la mía

jdbuchanan71_3-1633016623513.png

Gracias, @jdbuchanan71. No pude reproducir completamente el valor [Placements] con la versión CALCULATETABLE. Estos son los resultados de las dos medidas en el mismo gráfico:

fullcount_0-1633021598522.png

He verificado tres veces las fechas involucradas, así que creo que solo hay una diferencia en los valores que alcanzan las dos medidas. ¿Crees que vale la pena cambiar a una columna?

¡Gracias!

Syndicate_Admin
Administrator
Administrator

Hola a todos

Gracias por las notas hasta ahora. [Colocaciones] =

CALCULATE(SUMX(VALUES(Sales[Nombre del artículo + Nombre de la tienda]),1),Sales[Unidades vendidas]>0); una versión de columna sería Colocaciones = IF(Ventas[Unidades vendidas]>0,1,0)
¡Gracias!
Syndicate_Admin
Administrator
Administrator

@fullcount

¿Puede darnos el cálculo para la medida [Colocaciones]? Es posible que esto le dé el mismo resultado dependiendo de lo que esa medida esté calculando.

Six WK Avg Weekly Placements =
DIVIDE (
    CALCULATE (
        [Placements],
        DATESINPERIOD ( Calendar_Lookup[Date], MAX ( Sales[Date] ), -42, DAY )
    ),
    6
)
Syndicate_Admin
Administrator
Administrator

Hola @fullcount ,

esa es una buena pregunta. Puede tener algunas razones por las que es lento. Supongo que ayudaría mostrar o analizar la Medida [Colocaciones] tal como la usas muchas veces. ¿Se puede publicar el código fuente de esa medida o mejor el archivo si es posible?

Lo que definitivamente lo hará un poco más rápido es poner el MAX (Sales[Date]) en una variable. Así es que tiene que ser evaluado solo una vez y no 6 veces:

Six WK Avg Weekly Placements =
VAR vMaxDate = MAX(Sales[Date])
RETURN
DIVIDE(
    CALCULATE([Placements],DATESINPERIOD(Calendar_Lookup[Date],vMaxDate ,-7,DAY))+
    CALCULATE([Placements],DATESINPERIOD(Calendar_Lookup[Date],vMaxDate -7,-7,DAY))+
    CALCULATE([Placements],DATESINPERIOD(Calendar_Lookup[Date],vMaxDate -14,-7,DAY))+
    CALCULATE([Placements],DATESINPERIOD(Calendar_Lookup[Date],vMaxDate -21,-7,DAY))+
    CALCULATE([Placements],DATESINPERIOD(Calendar_Lookup[Date],vMaxDate -28,-7,DAY))+
    CALCULATE([Placements],DATESINPERIOD(Calendar_Lookup[Date],vMaxDate -35,-7,DAY)),
    6,
    0
)

Si necesita ayuda, por favor hágamelo saber.
Si respondiera a su pregunta, estaría encantado de que pudiera marcar mi publicación como una solución ✔️ y darle un pulgar hacia arriba 👍
Saludos
Denis
Syndicate_Admin
Administrator
Administrator

Hay @fullcount ,

¿Podría proporcionar algunos datos de ejemplo de la tabla original?

Jori

Helpful resources

Announcements
LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.

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.