Ignorar fines de semana y días festivos en función del país/depósito

Un usuario Pregunto ✅

mrahimtu

Hola

Necesito excluir los fines de semana y los días festivos de cada Depósito, pero pensé en hacer el cálculo para el fin de semana, pero necesito ayuda sobre cómo excluir los días festivos en función de cada Depósito.

Tiempo objetivo de carga = MAXX(
SUPERIOR([Offset for load time in days],
FILTRO(TODO(‘Jda DM_Dim_Date’),
‘Jda DM_Dim_Date'[Date] >= ANTES([PurchseCutoffDatetime]) && ‘Jda DM_Dim_Date'[IsWeekend] = FALSO()),
‘Jda DM_Dim_Date'[Date]ASC),
‘Jda DM_Dim_Date'[Date])

A continuación se muestran mis vacaciones para Depot

deposito Días festivos
Depósito_Nombre1 25/12/2019
Depósito_Nombre1 26/12/2019
Depósito_Nombre2 25/12/2019
Depósito_Nombre2 26/12/2019
Depósito_Nombre1 25/12/2020
Depósito_Nombre1 26/12/2020
Depósito_Nombre2 25/12/2020
Depósito_Nombre2 26/12/2020

Tabla de envío de depósito

EnvíoIdentificación Depot_Slicer_Name PurchseCutoffDatetime Compensación por tiempo de carga en días Tiempo objetivo de carga
679936 Depósito_Nombre3 23/12/2020 12:32 2 25/12/2020 00:00
678794 Depósito_Nombre3 23/12/2020 12:32 2 25/12/2020 00:00
675254 Depósito_Nombre3 23/12/2020 12:32 2 25/12/2020 00:00
678871 Depósito_Nombre2 23/12/2020 12:32 3 28/12/2020 00:00
681039 Depósito_Nombre2 22/12/2020 12:32 3 25/12/2020 00:00
680841 Depósito_Nombre2 23/12/2019 12:32 3 26/12/2019 00:00
681020 Depósito_Nombre2 23/12/2019 12:32 3 26/12/2019 00:00
679828 Depósito_Nombre2 02/01/2020 10:28 3 02/05/2020 00:00
680847 Depósito_Nombre2 02/03/2020 09:31 3 02/06/2020 00:00
679896 Depósito_Nombre2 02/01/2020 11:43 3 02/05/2020 00:00
681024 Depósito_Nombre2 02/03/2020 13:08 3 02/06/2020 00:00
679054 Depósito_Nombre1 31/01/2020 15:14 2 02/04/2020 00:00

Gracias

Hola @mrahimtu,

Podrías usar los siguientes pasos:

Paso 1, cree una nueva tabla de fechas base con el siguiente dax:

Dates = CALENDAR("2019/1/1","2021/12/31")
date1 = var test1=
GENERATE (
    CALENDARAUTO (),
    VAR yyyy =
        YEAR ( [Date] )
    VAR mmmm =
        MONTH ( [Date] )
    RETURN
        ROW (
            "Year", yyyy,
            "Month", FORMAT ( [Date], "mmmm" ),
            "Month2", mmmm,
            "Week1", FORMAT ( [Date], "dddd" ),
            "Week2", WEEKDAY ( [Date] ),
            "weekday", NOT WEEKDAY ( [Date] ) IN { 1,7 } 
        )    
)   return test1

entonces obtendrás lo siguiente:

v-luwang-msft_0-1617269348970.png

Paso 2, cree una nueva base de columna en la tabla:

depot = IF ( date1[Date] IN DISTINCT ( Depot[Holidays]), 1, 0 )

Paso 3, basado en el paso 1 y el paso 2, cree una nueva columna:

pdbz = if(date1[weekday]=TRUE()&&date1[depot]=0,TRUE(),FALSE())

Paso 4, use el siguiente dax para crear una nueva columna:

dateneed =
VAR day1 =
    DATEADD (
        'Depot Shipment Table'[PurchseCutoffDatetime].[Date],
        'Depot Shipment Table'[Offset for load time in days],
        DAY
    )
VAR day2 =
    CALCULATE (
        COUNTROWS ( 'date1' ),
        DATESBETWEEN (
            date1[Date],
            'Depot Shipment Table'[PurchseCutoffDatetime],
            day1
        ),
        date1[pdbz] <> TRUE,
        ALL ( 'Depot Shipment Table' )
    )
VAR day3 =
    IF ( day2 = BLANK (), 0, day2 )
VAR day4 =
    DATEADD ( day1, day3, DAY )
RETURN
    day4

¡Y finalmente obtendrás lo que quieres!

v-luwang-msft_1-1617269561012.png

¡Ojalá te sea útil!

Atentamente

Lucien

Hola @mrahimtu,

Podrías usar los siguientes pasos:

Paso 1, cree una nueva tabla de fechas base con el siguiente dax:

Dates = CALENDAR("2019/1/1","2021/12/31")
date1 = var test1=
GENERATE (
    CALENDARAUTO (),
    VAR yyyy =
        YEAR ( [Date] )
    VAR mmmm =
        MONTH ( [Date] )
    RETURN
        ROW (
            "Year", yyyy,
            "Month", FORMAT ( [Date], "mmmm" ),
            "Month2", mmmm,
            "Week1", FORMAT ( [Date], "dddd" ),
            "Week2", WEEKDAY ( [Date] ),
            "weekday", NOT WEEKDAY ( [Date] ) IN { 1,7 } 
        )    
)   return test1

entonces obtendrás lo siguiente:

v-luwang-msft_0-1617269348970.png

Paso 2, cree una nueva base de columna en la tabla:

depot = IF ( date1[Date] IN DISTINCT ( Depot[Holidays]), 1, 0 )

Paso 3, basado en el paso 1 y el paso 2, cree una nueva columna:

pdbz = if(date1[weekday]=TRUE()&&date1[depot]=0,TRUE(),FALSE())

Paso 4, use el siguiente dax para crear una nueva columna:

dateneed =
VAR day1 =
    DATEADD (
        'Depot Shipment Table'[PurchseCutoffDatetime].[Date],
        'Depot Shipment Table'[Offset for load time in days],
        DAY
    )
VAR day2 =
    CALCULATE (
        COUNTROWS ( 'date1' ),
        DATESBETWEEN (
            date1[Date],
            'Depot Shipment Table'[PurchseCutoffDatetime],
            day1
        ),
        date1[pdbz] <> TRUE,
        ALL ( 'Depot Shipment Table' )
    )
VAR day3 =
    IF ( day2 = BLANK (), 0, day2 )
VAR day4 =
    DATEADD ( day1, day3, DAY )
RETURN
    day4

¡Y finalmente obtendrás lo que quieres!

v-luwang-msft_1-1617269561012.png

¡Ojalá te sea útil!

Atentamente

Lucien

amichandak

@mrahimtu, basado en lo que obtuve. Pruebe una nueva columna como

Día laborable = CUENTAS(FILTRO(AÑADIR COLUMNAS(CALENDARIO(Envío[PurchseCutoffDatetime].fecha,Envío[Loading Target time].fecha), «Día laboral», si (DÍA DE LA SEMANA ([Date],2) <6,1,0)),[WorkDay] =1))
– countx(filtro(Días festivos, Días festivos[Depot] = Envío[Depot_Slicer_Name] && Días festivos[Holidays] >= Envío[PurchseCutoffDatetime].fecha y días festivos[Holidays] = Envío[Loading Target time].fecha ),vacaciones[Holidays])

Cuente el día de trabajo – días festivos. Solo maneja negativo

mrahimtu

En respuesta a amichandak

@amitchandak Muchas gracias por tu respuesta

Lo siento, no estaba claro antes, necesito calcular nuevos «Loading Target time», que actualmente excluye el fin de semana entre las fechas. También debo ignorar los días festivos según el depósito específico.

Gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *