Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
2 years ago

NETWORKDAYS() Pregunta sobre las vacaciones

Recientemente descubrí la función NETWORKDAYS(), tengo una pregunta sobre el uso del parámetro Holidays de la función. Tenemos nuestra mesa navideña configurada de la siguiente manera:

Recibo el siguiente error al inyectar los días festivos en la fórmula NETWORKDAYS(): "La expresión se refiere a varias columnas. Varias columnas no se pueden convertir en un valor escalar".

FieldTAT = 
    VAR vStartDate = 'WF'[InspectionDate]
    VAR vEndDate = MAX('WF'[ReportReceivedDate], TODAY())
    VAR vHolidays =
        FILTER(
            'Holidays',
            'Holidays'[Country] = 'WF'[Country]
            && 'Holidays'[Date] >= vStartDate && 'Holidays'[Date] <= vEndDate
        )

    RETURN
    SWITCH(
        TRUE(),
        'WF'[WeekendType] = 3, NETWORKDAYS(vStartDate, vEndDate, 6, vHolidays), // THU/FRI
        ...
        NETWORKDAYS(vStartDate, vEndDate, vHolidays)
    )


Mi error es obviamente con la forma en que estoy tratando de usar la mesa navideña aquí, entonces, ¿hay alguna manera de solucionar esto?

Otra pregunta es, ¿hay alguna manera de agregar un identificador de fin de semana personalizado? Según la KB, no hay un identificador de fin de semana para viernes + domingo como fin de semana. Actualmente estamos calculando nuestro TAT utilizando un calendario personalizado que no es la solución más optimizada:

VAR vCalendar = CALENDAR(MIN(vStartDate, vEndDate), MAX(vStartDate, vEndDate))
    VAR vWeekdays = ADDCOLUMNS(vCalendar, "Weekday", WEEKDAY([Date]))

    VAR vTAT = 
        IF(vStartDate = vEndDate, 0,
            SWITCH(
                TRUE(),
                'WF'[WeekendType] = 2, COUNTX(FILTER(vWeekdays, AND([Weekday] <> 6, [Weekday] <> 7)), [Date]) - 1, // Fri, Sat
                'WF'[WeekendType] = 3, COUNTX(FILTER(vWeekdays, AND([Weekday] <> 5, [Weekday] <> 6)), [Date]) - 1, // Thu, Fri
                'WF'[WeekendType] = 4, COUNTX(FILTER(vWeekdays, AND([Weekday] <> 6, [Weekday] <> 1)), [Date]) - 1, // Fri, Sun
                ...
            )
        )

5 Replies

  • Hola @olimilo

    La tabla de días festivos debe contener solo una columna y realmente no es necesario filtrar los días festivos por las fechas de inicio y finalización.

    Networkdays Measure =
    VAR _holidays =
        SELECTCOLUMNS ( FILTER ( Holidays, Holidays[Country] = "A" ), [Holidays] )
    RETURN
        NETWORKDAYS (
            SELECTEDVALUE ( Start_End[End] ),
            SELECTEDVALUE ( Start_End[End] ),
            1,
            _holidays
        )
    
    Networkdays Column =
    VAR _holidays =
        SELECTCOLUMNS ( FILTER ( Holidays, Holidays[Country] = "A" ), [Holidays] )
    RETURN
        NETWORKDAYS (
            Start_End[End],
            Start_End[End],
            1,
            _holidays
        )
    

    1 significa que los fines de semana se omiten y no se incluyen en el conteo. DAX NETWORKDAYS incluye las fechas de inicio y finalización.

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      Hola Dan, gracias por la respuesta. Esto significa entonces que no es posible indicar fines de semana fuera de lo que está disponible en la KB? Estamos tratando de evitar tener que crear un calendario calculado por entrada en la tabla, que es lo que hicimos anteriormente para calcular los TATs.

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        ¿A qué te refieres con indicar fines de semana fuera de lo que está disponible en la KB? Creo que las opciones para indicar qué días son los fines de semana son bastante completas.