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

Cálculo de la suma entre 2 fechas excluyendo fines de semana

Estoy tratando de calcular una cantidad pendiente entre hoy y una fecha específica para calcular la demanda, pero quiero excluir los fines de semana de esto. Actualmente estoy usando esto, pero trata los sábados y domingos como días reales, lo que arruina las cosas.

Grimfandango227_0-1709573527854.png

¿Existe un método rápido para decirle a una medida que excluya los fines de semana?

¡Gracias! Cualquier ayuda será muy apreciada.

10 REPLIES 10
Syndicate_Admin
Administrator
Administrator

Volviendo atrás, me doy cuenta de que en realidad no hemos respondido a tu pregunta.

Sí, hay un método rápido para decirle a una medida que excluya los fines de semana. Todo lo siguiente tiene comentarios y debería poder pegarlo directamente en PowerBI

Cree una columna auxiliar:

Weekday =
//  Determine if weekday or weekend. 2 identifies Saturday/Sunday as weekend based on DAX formula.

IF (
    WEEKDAY ( [Due_Date], 2 ) > 5,
    0,
    1
)

Usando la columna anterior, puede introducirla en una fórmula SUMX en la que filtramos los valores entre StartDate y EndDate declarados. También podemos alimentarlo con la columna auxiliar para excluir los fines de semana.

Production = 
//  Declare Start Date
VAR StartDate =
    TODAY ()

//  Declare End Date
VAR EndDate =
    TODAY () + 7

//  Sum the values of [Sum of Remaining Qty] but filtering the Due date to the StartDate /EndDate variable conditions. Exlude Weekends
RETURN
    SUMX (
        FILTER (
            'Table',
            'Table'[Due_Date] >= StartDate
                && 'Table'[Due_Date] <= EndDate
                && 'Table'[Weekday] = 1
        ),
        'Table'[Sum of Remaining Qty]
    )

transform99_2-1709863220656.png

(Estoy en Australia, por lo que el formato de fecha estándar está predeterminado en DD/MM/AAAA)

transform99_1-1709863188259.png

Si desea que esto sea dinámico, use la siguiente fórmula y coloque una segmentación de datos en la página para la fecha de vencimiento:

Production = 
//  Declare Start Date
VAR StartDate =
    MIN ( [Due_Date] )

//  Declare End Date
VAR EndDate =
    MAX ( 'Table'[Due_Date] )

//  Sum the values of [Sum of Remaining Qty] but filtering the Due date to the StartDate /EndDate variable conditions. Exlude Weekends
RETURN
    SUMX (
        FILTER (
            'Table',
            'Table'[Due_Date] >= StartDate
                && 'Table'[Due_Date] <= EndDate
                && 'Table'[Weekday] = 1
        ),
        'Table'[Sum of Remaining Qty]
    )

transform99_3-1709863533615.png

Syndicate_Admin
Administrator
Administrator

@Ashish_Mathur @amitchandak Gracias por sus rápidas respuestas, tengo otro pensamiento que compartir.

Hola @Grimfandango227 ,

He asumido algunos datos, los datos de la tabla se muestran a continuación:

vzhouwenmsft_0-1709626810833.png

Puede crear una tabla de fechas adicional para determinar si la fecha es un fin de semana o no, siga estos pasos:
1. Use la siguiente expresión DAX para crear una tabla

Table = CALENDAR(DATE(2024,1,1),DATE(2024,12,31)) 

2. Use la siguiente expresión DAX para crear una columna denominada "IsWeekend"

IsWeekend = IF(WEEKDAY('Table'[Date],2)>5,TRUE(),FALSE())

Los datos de la tabla creada son los siguientes:

vzhouwenmsft_1-1709626885240.png

La relación es la siguiente:

vzhouwenmsft_2-1709626902590.png

3. Utilice la siguiente expresión DAX para crear una medida

Measure = 
VAR StartDate = TODAY()
VAR EndDate = TODAY() + 5
RETURN 
CALCULATE(SUM('DOMO_Sales_Line'[Outstanding]),'Table'[Date] >= StartDate && 'Table'[Date] <= EndDate,'Table'[IsWeekend] = FALSE())

4. Resultado final

vzhouwenmsft_3-1709627001054.png


360 = (10+20+30+40+50+60+70+80)


Saludos
Wenbin Zhou
Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Buenas tardes

Así que pude seguir todos los pasos que enumeraste anteriormente (gracias por eso), pero parece que los días de fin de semana todavía se cuentan dentro del cálculo. A continuación, mostraré algunos datos, por ejemplo.

1. Tomemos este elemento específico, por ejemplo.

Grimfandango227_0-1709677780220.png

Teóricamente, al usar su fórmula mirando hacia afuera 7 días a partir de hoy, deberíamos tener un total de 2,700 porque hoy +7 días (excluyendo los fines de semana) deberían darnos ese total.

Aquí está mi fórmula terminada

Grimfandango227_1-1709677921723.png

Desafortunadamente, parece que todavía está contando los sábados y domingos cuando se miran los 7 días.

Grimfandango227_2-1709677979227.png

Si ve algún error en mi trabajo aquí, hágamelo saber y cualquier ayuda será muy apreciada.

¡Gracias!

Hola @Grimfandango227 ,

Dependiendo de la expresión que proporcione, debido a la posible diferencia de tiempo entre nosotros. Supongo que la fecha proporcionada por la función Today() es el 5 de marzo.
Fecha de inicio: 3/5/2024
Fecha de finalización: 3/12/2024
Por lo tanto, no se contabilizarán los datos del 14 de marzo. Si el tuyo necesita incluir la fecha de hoy:

FUERON Fecha de finalización = HOY() + 6

Por favor, avíseme si he entendido mal.

Hola @v-hack-msft ,

Tenías razón en la fecha de inicio. Así que usemos hoy ahora. Necesito que la fecha de finalización refleje +7 días hábiles y omita los sábados y domingos, lo que me da datos el 14/03/24.

3/6 - Miércoles - 1

3/7 - Jueves - 2

3/8 - Viernes - 3

3/9 - Sáb - OMIT

3/10 - Dom - OMIT

3/11 - Lun - 4

3/12 - Martes - 5

3/13 - Mié - 6

3/14 - Jueves - 7

Actualicé el informe hoy y todavía está contando los datos para el próximo miércoles (ver más abajo)

Datos actuales ↓↓

Grimfandango227_0-1709734708979.png

Expresión actual ↓↓

Grimfandango227_1-1709734758706.png

Salida de corriente↓↓

Grimfandango227_2-1709734793678.png

La respuesta correcta debería ser 6600.

¿Tiene sentido?

¡Gracias!

Hola @Grimfandango227 ,

Lamento haberte entendido mal antes, tu requisito es calcular el valor de 7 días hábiles consecutivos, para no el valor de 7 días consecutivos que son días hábiles. Empecemos de nuevo.

Mi cita de hoy es el 7 de marzo.


Los datos de la tabla se muestran a continuación:

vzhouwenmsft_0-1709790359509.png

Siga estos pasos:
1. Use la siguiente expresión DAX para crear una tabla denominada 'Table'

Table = CALENDAR(DATE(2024,1,1),DATE(2024,12,31)) 

2. Use la siguiente expresión DAX para crear una columna denominada 'IsWeekend' en 'Table'

IsWeekend = IF(WEEKDAY('Table'[Date],2)>5,TRUE(),FALSE())

vzhouwenmsft_1-1709790421501.png

3. Use la siguiente expresión DAX para crear una tabla denominada 'Tabla2'

Table 2 = FILTER('Table','Table'[IsWeekend] = FALSE())

4. Use la siguiente expresión DAX para crear una columna denominada "Columna" en "Tabla2"

Column = COUNTROWS('Table 2') - RANKX(ALL('Table 2'), 'Table 2'[Date],,DESC) + 1

vzhouwenmsft_2-1709790479711.png

5. Utilice la siguiente expresión DAX para crear una tabla denominada 'Tabla3'

Table 3 = FILTER('Table 2','Table 2'[Date] >= TODAY() )

vzhouwenmsft_3-1709790531065.png

6. Utilice la siguiente expresión DAX para crear una tabla denominada 'Tabla4'

Table 4 = FILTER('Table 3','Table 3'[Column] = MINX('Table 3',[Column] + 6))

vzhouwenmsft_4-1709790555765.png

vzhouwenmsft_5-1709790563536.png

7. Use la siguiente expresión DAX para crear una medida denominada "SevenWorkDay"

SevenWorkDay = 
VAR StartDate = TODAY()
VAR EndDate = MAXX(FILTER('Table 3','Table 3'[Column] = MINX('Table 3',[Column] + 6)),[Date])
RETURN 
CALCULATE(SUM('DOMO_Sales_Line'[Outstanding]),'Table'[Date] >= StartDate && 'Table'[Date] <= EndDate,'Table'[IsWeekend] = FALSE())

8. Las relaciones modelo son las siguientes:

vzhouwenmsft_6-1709790604304.png

9. Salida de Fianl

vzhouwenmsft_7-1709790617815.png

He subido mi archivo de prueba para que puedas comprobarlo.


Saludos
Wenbin Zhou
Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

¡Esto funciona! ¡Gracias de nuevo por toda su ayuda! ¡Buen trabajo!

Hola Grimfandango227,

Te recomiendo que veas la respuesta de amitchandak a la pregunta. Esto debería resolver su consulta.

Networkdays es la función estándar en Excel para determinar los días hábiles entre 2 fechas. Esto debería poder ayudar a identificar el # de días y se agregó a Power BI en ~julio de 2022.

Es importante tener en cuenta que Networkdays es ligeramente diferente a Workday. Workday calcula el # de días sin incluir la fecha de inicio, mientras que Networkdays incluye la fecha de inicio.

En Excel, esto significaría que escribe "NETWORKDAYS([fecha de inicio], [fecha de finalización], [omitir días festivos])-1" para eliminar el día adicional. La fórmula estipula que es inclusiva en la página de documentación, pero pruébala y comprueba si sale bien:
Función NETWORKDAYS (DAX) - DAX | Microsoft Learn

Syndicate_Admin
Administrator
Administrator

Hola

Cree una tabla de calendario con una columna calculada titulada DoW. La fórmula de esta columna debe ser =día de la semana(Calendario[Fecha],2). Utilice este patrón de medición:

Medida = calcular(suma(Datos[ventas]),datesetween(Calendario[Fecha],hoy(),hoy()+5),calendario[Dow]<=5)

Espero que esto ayude.

Syndicate_Admin
Administrator
Administrator

@Grimfandango227 , sí función networkdays

calculate(networkdays(min(Tabla[Fecha de inicio]), max(Tabla[Fecha de finalización]), 1)

AverageX(Tabla, networkdays([Fecha de inicio], [Fecha de finalización],1) )

Power BI: día laborable con y sin uso de la función DAX NETWORKDAYS : https://www.youtube.com/watch?v=Qs03ZZXXE_c
https://medium.com/@amitchandak/power-bi-dax-function-networkdays-5c8e4aca38c

Helpful resources

Announcements
LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.