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
m_e_1203
Helper II
Helper II

Cómo calcular el promedio móvil solo para días hábiles.

Hola

Soy nuevo en el PowerBI y strugling para calcular rodar 5 días promedio.

La fecha de venta es solo días laborables (sin fines de semana ni días festivos) y la medida rápida no funcionará.

Fecha (A)Día de la semana (B)Ventas (C)Media móvil de 5 días

fórmula que quiero crear

(Excluir fines de semana y festivos)

8/31/2020Mi $ 1,501 $ 1,448PROMEDIO (C2: C6)
8/28/2020Vie $ 2,350 $ 2,906PROMEDIO (C3: C7)
8/27/2020Jue $ 2,587 $ 2,869PROMEDIO (C4: C8)
8/26/2020Mié $ 589 $ 2,549PROMEDIO (C5: C9)
8/25/2020Mar $ 214 $ 3,982
8/24/2020Mi $ 8,791 $ 12,933
8/21/2020Vie $ 2,164 $ 12,144
8/20/2020Jue $ 986 $ 14,442
8/19/2020Mié $ 7,754 $ 15,288
8/18/2020Mar $ 44,968 $ 14,931
8/17/2020Mi $ 4,846 $ 6,206
8/14/2020Vie $ 13,657 $ 5,555

Podría usar a continuación si no hay vacaciones para calcular los últimos 5 días de ventas totales.

Fecha de ventas de 5 días de laminación de la marcha a la 5 días
CALCULATE([Ventas totales],
DATESINPERIOD('Date'[Date], LASTDATE('Date'[Date]), -7, DAY))
Por favor, aconseje.
Gracias.
1 ACCEPTED SOLUTION

@m_e_1203 - Ah, si agrega el tipo de ventas o la ubicación que significa que está seleccionando en una segmentación de datos, entonces necesitará la forma de medida de esto:

5 Day Average_Date Measure = 
    VAR __Max = MAX([Work Date cont Rank])
RETURN
    AVERAGEX(
        FILTER(
            ALLSELECTED('date'),
            [Work Date cont Rank]>=__Max-4 && 
            [Work Date cont Rank]<=__Max
        ),
        [Total Sales]
    )

View solution in original post

13 REPLIES 13
amitchandak
Super User
Super User

@m_e_1203, tengo blog para esto. Necesita crear un rango solo en el día laborable. A continuación, puede viajar a través de los días laborables

Work Day = if(WEEKDAY([Date],2)>=6,0,1)
Work Date = if(WEEKDAY([Date],2)>=6,BLANK(),[Date])
Work Date Cont = if([Work Day]=0,maxx(FILTER('Date',[Date]<EARLIER([Date]) && [Work Day]<> EARLIER([Work Day]) ),[Date]),[Date])
Work Date cont Rank = RANKX(ALL('Date'),[Work Date Cont],,ASC,Dense)

Ejemplo

Plus 10 Days = var _max =maxx(ALLSELECTED('Date'),'Date'[Work Date cont Rank])
return
CALCULATE(Min('Date'[Date]),filter(ALL('Date'),'Date'[Work Date  Rank] =_max+10))

Rolling Last 10 Days =  CALCULATE(SUM(Sales[Net Sales]),FILTER(all('Date'),'Date'[Work Date cont Rank]>=min('Date'[Work Date cont Rank])-10 
				&& 'Date'[Work Date cont Rank]<=max('Date'[Work Date cont Rank])))

recomienda

https://community.powerbi.com/t5/Community-Blog/Travelling-Across-Workdays-Decoding-Date-and-Calenda...

@amitchandak

Gracias por el mensaje.

Pude hacer la primera parte. Sin embargo, no pude obtener ningún número desde abajo, Todos los resultados estaban en blanco.

Plus 10 Days = var _max =maxx(ALLSELECTED('Date'),'Date'[Work Date cont Rank])
return
CALCULATE(Min('Date'[Date]),filter(ALL('Date'),'Date'[Work Date cont Rank] =_max+10))

Y esto me dio la misma cantidad de ventas que el total diario.

Rolling Last 10 Days = CALCULATE(SUM(Sales[SALES]),FILTER(all('Date'),'Date'[Work Date cont Rank]>=min('Date'[Work Date cont Rank])-10 
				&& 'Date'[Work Date cont Rank]<=max('Date'[Work Date cont Rank])))

¿Algún consejo adicional?

Gracias.

Greg_Deckler
Super User
Super User

@m_e_1203 - OK, resulta que esto no es tan complicado. 2 columnas. Vea a continuación. PBIX se adjunta debajo de la tabla (30).

Column = COUNTROWS(FILTER('Table (30)',[Date (A)]<=EARLIER([Date (A)])))


5 Day Average = AVERAGEX(FILTER('Table (30)',[Column]>=EARLIER([Column])-4 && [Column]<=EARLIER([Column])),[Sales (C)])

@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

@Greg_Deckler Gracias por su respuesta.

Estoy recibiendo un error. ¿Qué significa este error?

Columna se agrega en la tabla Datos, 5 Promedio de día se agrega en la tabla Ventas.

Tabla de ventas contiene varias líneas para ventas de un solo día. (Ventas por tipos de negocio.)

Column = COUNTROWS(FILTER('Date', 'Date'[Date] <=EARLIER('Date'[Date]) && 'Date'[If work day] = 1))

5 Day Average = AVERAGEX(FILTER('Date', 'Date'[Column] >= EARLIER ('Date'[Column]) -4 && 'Date'[Column]<=EARLIER('Date'[Column])),[Total Sales])

Error: EARLIER/EARLIEST hace referencia a un contexto de fila anterior que no existe.

¡Gracias de nuevo!

@m_e_1203 - Mi fórmula era para una columna, parece que estabas tratando de usarla en una medida. ¿Desea columna o medida?


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...


@Greg_Deckler escribió:

@m_e_1203 - Mi fórmula era para una columna, parece que estabas tratando de usarla en una medida. ¿Desea columna o medida?


@Greg_Deckler

Estoy de acuerdo con cualquiera de los dos, siempre y cuando pueda crear un gráfico. Cambié el nombre "Columna" a "Work Date Cont Rank".

5 Day Average = AVERAGEX(FILTER('Date', 'Date'[Work Date cont Rank] >= EARLIER ([Work Date cont Rank]) -4 && 'Date'[Work Date cont Rank] <= EARLIER([Work Date cont Rank]), [Total Sales]))

El error es "Se pasaron demasiados argumentos a la función FILTER. El número máximo de argumentos para la función es 2."

Gracias de nuevo por su ayuda.

@m_e_1203 - No estoy seguro de por qué mi archivo no apareció. Tabla (30).

5 Day Average = 
  AVERAGEX(
    FILTER(
      'Date', 
      'Date'[Work Date cont Rank] >= EARLIER ([Work Date cont Rank]) -4 && 
      'Date'[Work Date cont Rank] <= EARLIER([Work Date cont Rank])
    ), 
    [Total Sales]
  )

Tienes un paren fuera de lugar.


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

@Greg_Deckler

¡¡Funcionó!! Realmente apreto esto.

5 Day Average_Date = 
  AVERAGEX(
    FILTER(
      'Date', 
      'Date'[Work Date cont Rank] >= EARLIER ([Work Date cont Rank]) -4 && 
      'Date'[Work Date cont Rank] <= EARLIER([Work Date cont Rank])
    ), 
    [Total Sales]
  )

Pero... Un problema, sólo se calculó para las ventas totales. Cuando agredo Tipo de negocio o Ubicación de ventas, muestra el mismo total.

¿Eliminar filtros?

5 Day AVG BusType = 
  CALCULATE(SUM('Date'[5 Day Average_Date]), REMOVEFILTERS(Business_Type[Business Type Group]))

Gracias de nuevo.

@m_e_1203 - Ah, si agrega el tipo de ventas o la ubicación que significa que está seleccionando en una segmentación de datos, entonces necesitará la forma de medida de esto:

5 Day Average_Date Measure = 
    VAR __Max = MAX([Work Date cont Rank])
RETURN
    AVERAGEX(
        FILTER(
            ALLSELECTED('date'),
            [Work Date cont Rank]>=__Max-4 && 
            [Work Date cont Rank]<=__Max
        ),
        [Total Sales]
    )

¡¡Trabajado!!

He estado probando esto durante las últimas 2 semanas. Gran ayuda!

¡Muchas gracias!

@m_e_1203 ¡¡Yay!! 🙂


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

Cuando agredo Row a la tabla de ventas, esto es lo que muestra.

Row No = COUNTROWS(FILTER(Sales, Sales[EODDATE (Date)] <= EARLIER(Sales[EODDATE (Date)])))

Fecha: RowNo

9/3: 63976

9/2: 63708

9/1: 63443

8/31: 63157

Row No = COUNTROWS(FILTER('Date', 'Date'[Date] <= EARLIER(Sales[EODDATE (Date)])))

Si agrego esto en la tabla Sales con la fecha de la tabla Date, se muestra así.

Se ha omitido el número de fila del sábado y el domingo...

Fecha: RowNo

9/3: 612

9/2: 611

9/1: 610

8/31: 609

8/28: 606

Greg_Deckler
Super User
Super User

@m_e_1203 - Parece que necesitaría un inverso Días de Trabajo Netos para calcular el día de trabajo hace 5 días de trabajo y luego el resto sería pastel. https://community.powerbi.com/t5/Quick-Measures-Gallery/Net-Work-Days/m-p/367362#M109


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

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.