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
trptl
Frequent Visitor

Promedio de los últimos N valores omitiendo valores en blanco

Hola

Necesito ayuda en esto. Estoy tratando de desarrollar una medida para aislar un promedio de las últimas entradas N (en este caso 3 días "de trabajo") de ventas, cuando la tabla contiene valores en blanco para ciertos días (es decir, días "no laborables"). La tabla tiene otras columnas con datos en días "no laborables". Entonces, ¿cómo puedo crear una medida para esto?

Un dato de muestra es el siguiente:

FechaVentasPromedio de ventas de los últimos 3
6/1/2020$5,343.00
6/2/2020$2,345.00
6/3/2020$7,532.00$5,073.33
6/4/2020
6/5/2020
6/6/2020$2,343.00$4,073.33
6/7/2020
6/8/2020$6,342.00$5,405.67
6/9/2020$2,342.00$3,675.67
6/10/2020$3,523.00$4,069.00
6/11/2020$4,325.00$3,396.67
6/12/2020
6/13/2020
6/14/2020
6/15/2020
6/16/2020
6/17/2020$3,234.00$3,694.00
6/18/2020$3,245.00$3,239.50
6/19/2020$1,234.00$2,571.00
6/20/2020$2,345.00$2,274.67

Por ejemplo, para 6/20, es AVE[6/20, 6/19, 6/18]; para 6/17, es AVE[6/17, 6/11, 6/10]; para 6/8, es AVE[6/8, 6/6, 6/3]; así sucesivamente.

Gracias.

1 ACCEPTED SOLUTION
mahoneypat
Employee
Employee

Pruebe esta expresión que obtiene los resultados deseados de los datos de ejemplo.

Last 3 WD Sum =
VAR __thisdate =
    MIN ( Sales[Date] )
VAR __top3 =
    TOPN (
        3,
        FILTER ( FILTER ( ALL ( Sales ), Sales[Date] <= __thisdate ), Sales[Sales] > 0 ),
        Sales[Date], DESC
    )
RETURN
    IF (
        OR ( COUNTROWS ( __top3 ) < 3, ISBLANK ( SUM ( Sales[Sales] ) ) ),
        BLANK (),
        CALCULATE ( AVERAGE ( Sales[Sales] ), __top3 )
    )

Si esto funciona para usted, márquelo como la solución. Los elogios también son apreciados. Por favor, avísame si no.

saludos

palmadita





Did I answer your question? Mark my post as a solution! Kudos are also appreciated!

To learn more about Power BI, follow me on Twitter or subscribe on YouTube.


@mahoneypa HoosierBI on YouTube


View solution in original post

3 REPLIES 3
mahoneypat
Employee
Employee

Pruebe esta expresión que obtiene los resultados deseados de los datos de ejemplo.

Last 3 WD Sum =
VAR __thisdate =
    MIN ( Sales[Date] )
VAR __top3 =
    TOPN (
        3,
        FILTER ( FILTER ( ALL ( Sales ), Sales[Date] <= __thisdate ), Sales[Sales] > 0 ),
        Sales[Date], DESC
    )
RETURN
    IF (
        OR ( COUNTROWS ( __top3 ) < 3, ISBLANK ( SUM ( Sales[Sales] ) ) ),
        BLANK (),
        CALCULATE ( AVERAGE ( Sales[Sales] ), __top3 )
    )

Si esto funciona para usted, márquelo como la solución. Los elogios también son apreciados. Por favor, avísame si no.

saludos

palmadita





Did I answer your question? Mark my post as a solution! Kudos are also appreciated!

To learn more about Power BI, follow me on Twitter or subscribe on YouTube.


@mahoneypa HoosierBI on YouTube


Muchas gracias a @mahoneypat, @parry2k por sus elegantes soluciones.

El conjunto de datos tiene una columna adicional con una ubicación. Así que potencialmente hay N entradas para una fecha determinada para N ubicaciones. Intenté @parry2ksolución, pero no funcionó como se esperaba; sin embargo, lo hizo para un conjunto de datos de ubicación. Por esta razón, terminé usando la solución de @mahoneypat,y se escala a lo que he estado buscando. Hice aunque hice un cambio menor: "FILTER(ALL(Sales)" -> "FILTER(ALLSELECTED(Sales)" para permitir los filtros establecidos para el informe.

parry2k
Super User
Super User

@trptl aquí es algo que se me ocurre en este momento, pero sin duda se puede mejorar, pero espero que comience

Primero agregue una columna de rango

Date Rank = IF ( Data[Sales] <> BLANK(), RANKX ( FILTER( 'Data', Data[Sales] <> BLANK() ) , 'Data'[Date], , ASC ) ) 

Ahora agregue una medida promedio

Avg Measure = 
VAR __endRank = MAX ( Data[Date Rank] )
VAR __startRank = MAX ( __endRank - 2, 1 )
VAR __avgDenominator = ( __endRank - __startRank ) + 1
RETURN
DIVIDE (
    CALCULATE (
        SUM ( Data[Sales] ),
        ALL ( Data ),    
        Data[Date Rank] >= __startRank,
        Data[Date Rank] <= __endRank
    ), __avgDenominator
)

echa un vistazo a esto y ver si te consigue lo que estás buscando, aquí está la salida

image.png

Me gustaría elogiossi mi solución ayudara.👉Si puedes pasar tiempo publicando la pregunta, también puedes hacer esfuerzos para dar a Kudos quien haya ayudado a resolver tu problema. ¡Es una muestra de agradecimiento!

Visítenos enhttps://perytus.com, su ventanilla única para proyectos/formación/consulta relacionados con Power BI.



Subscribe to the @PowerBIHowTo YT channel for an upcoming video on List and Record functions in Power Query!!

Learn Power BI and Fabric - subscribe to our YT channel - Click here: @PowerBIHowTo

If my solution proved useful, I'd be delighted to receive Kudos. When you put effort into asking a question, it's equally thoughtful to acknowledge and give Kudos to the individual who helped you solve the problem. It's a small gesture that shows appreciation and encouragement! ❤


Did I answer your question? Mark my post as a solution. Proud to be a Super User! Appreciate your Kudos 🙂
Feel free to email me with any of your BI needs.

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.