Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Grow your Fabric skills and prepare for the DP-600 certification exam by completing the latest Microsoft Fabric challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Gestión de fines de semana y festivos consecutivos en el cálculo de la fecha de entrega estimada en DAX (Excel)

Tengo pedido, fecha de aprobación de CS y tiempo de entrega para procesar el pedido. Mi trabajo es averiguar la fecha estimada de entrega excluyendo fines de semana y días festivos. Esta es la fórmula que estoy utilizando para contar los días festivos y los fines de semana entre 2 fechas:

'Recuento de fines de semana y días festivos' =
CALCULAR
(

COUNTROWS(«Tabla de fechas»),

FILTRO(

'Tabla de fechas',

'Tabla de fechas'[Fecha] >= 'OrderDetails'[Fecha de aprobación de CS] &&

'Tabla de fechas'[Fecha] <= 'OrderDetails'[Fecha de aprobación de CS] + 'OrderDetails'[Tiempo de entrega] &&

'Tabla de fechas'[es un día laborable] = "Falso"

)

)

Verdadero = Días laborables y Falso = Días no laborables (Mi tabla de fechas identificó correctamente los fines de semana y días festivos en Power Query)

El problema es que la fecha estimada de entrega vuelve a ser un día festivo o fines de semana. Entonces, fórmula sin contar esa. En dax no hay capacidades de bucle que yo sepa para comprobar que la fecha de entrega estimada es días laborables o no.

Tengo 3 columnas calculadas: 'Recuento de fines de semana y días festivos', 'Tiempo de entrega total' y 'Fecha de entrega estimada'

Plazo de entrega total = 'Recuento de fines de semana y días festivos' + 'Tiempo de entrega'
Fecha estimada de entrega =

SI(

NO(ISBLANK('OrderDetails' [Fecha de aprobación de CS])),

'OrderDetails'[Fecha de aprobación de CS] + 'OrderDetails'[Tiempo total de entrega]

)



Por ejemplo, Pedido # OE200023, Fecha de aprobación de CS 25/04/2024, el plazo de entrega es de 5 días y La fecha de entrega estimada es el 30/04/2024. Entonces, entre el 25/4/2024 y el 30/4/2024, solo hay un fin de semana, que es el viernes en mi caso. Ahora la fecha de entrega estimada es el 5/1/2024, que es un día festivo (este es el problema, el tiempo de entrega no cubre esto). La fórmula no sabe si la fecha estimada de entrega es días hábiles o no. Puedo hacer esto usando la fórmula solo una vez para contar los fines de semana y los días festivos. ¿Qué pasa con los días festivos consecutivos, que no están cubiertos por el plazo de entrega? Especialmente en época de festivales. El principal problema es que My Lead time no cubrirá todos los fines de semana y días festivos todo el tiempo. Este plazo de entrega varía en cuanto a la categoría del producto y continúa todo el año hasta que se produzcan cambios (es el valor predeterminado del sistema).

He encontrado una solución a este problema, pero puede comprobar una sola vez que la fecha estimada de entrega es días laborables o no. Si , entonces devolverá lo mismo, si no, entonces agregará un día más. Pero el problema sigue existiendo (fines de semana y días festivos consecutivos, que no están cubiertos por el plazo de entrega o la fecha de entrega estimada por primera vez).

Fecha de entrega estimada (fija) =

FUERON EstimatedDeliveryDate =
SI(

NO(ISBLANK('OrderDetails' [Fecha de aprobación de CS])),

'OrderDetails'[Fecha de aprobación de CS] + 'OrderDetails'[Tiempo total de entrega]

)

FUERON IsHoliday = LOOKUPVALUE('Tabla de fechas' [es día laborable], 'tabla de fechas'[fecha], INT(EstimatedDeliveryDate)) = "Falso"

DEVOLUCIÓN SI(IsHoliday, EstimatedDeliveryDate + 1, EstimatedDeliveryDate)

Cómo resolver este problema. Le agradecería que me ayudara a resolver este problema.

Solo para recordar, no podría crear ninguna nueva columna calculada en Power Pivot (Dax) o en Power Query debido a la tabla autorreferencial. Cualquiera que sea la fórmula, debe ir en esta columna 3.

9 REPLIES 9
eileen_iTalent
Administrator
Administrator

This post was in spam quarantine and is a duplicate false positive.

Syndicate_Admin
Administrator
Administrator

Esta es mi solución:
El recuento inicial es

Recuento de fines de semana y días festivos =

CALCULAR(

COUNTROWS(«Tabla de fechas»),

FILTRO(

'Tabla de fechas',

'Tabla de fechas'[Fecha] >= 'OrderDetails'[CAD (Duplicado)] &&

'Tabla de fechas'[Fecha] <= 'OrderDetails'[CAD (Duplicado)] + 'OrderDetails'[Lead Time] &&

'Tabla de fechas'[es un día laborable] = "Falso"

)

)



El cambio clave en la solución es la adición de un cheque durante 5 días consecutivos. La fórmula ahora deja de calcularse tan pronto como encuentra un día hábil dentro de este período. A continuación, devuelve la fecha de entrega estimada inicial, ajustada sumando el número de días antes de que se encontrara el día laborable. Esto garantiza que la fecha de entrega siempre caiga en un día laborable.

Plazo de entrega total =

VAR
InitialCount (Recuento inicial) = 'OrderDetails'[Vacaciones semanales]

FUERON NewDate1 = 'OrderDetails' [Fecha de aprobación de CS] + 'OrderDetails' [Tiempo de entrega] + InitialCount (Recuento inicial)

FUERON IsHoliday1 = CALCULAR(COUNTROWS(«Tabla de fechas»), FILTRO('Tabla de fechas', 'Tabla de fechas'[Fecha] = NewDate1 && 'Tabla de fechas'[es el día laborable] = "Falso"))

FUERON NewDate2 = SI(IsHoliday1 > 0, NewDate1 + 1, NewDate1)

FUERON IsHoliday2 = SI(IsHoliday1 > 0, CALCULAR(COUNTROWS(«Tabla de fechas»), FILTRO('Tabla de fechas', 'Tabla de fechas'[Fecha] = NewDate2 && 'Tabla de fechas'[es el día laborable] = "Falso")), 0)

FUERON NewDate3 = SI(IsHoliday2 > 0, NewDate2 + 1, NewDate2)

FUERON IsHoliday3 = SI(IsHoliday2 > 0, CALCULAR(COUNTROWS(«Tabla de fechas»), FILTRO('Tabla de fechas', 'Tabla de fechas'[Fecha] = NewDate3 && 'Tabla de fechas'[es el día laborable] = "Falso")), 0)

FUERON NuevaFecha4 = SI(IsHoliday3 > 0, NewDate3 + 1, NewDate3)

FUERON IsHoliday4 = SI(IsHoliday3 > 0, CALCULAR(COUNTROWS(«Tabla de fechas»), FILTRO('Tabla de fechas', 'Tabla de fechas'[Fecha] = NuevaFecha4 && 'Tabla de fechas'[es el día laborable] = "Falso")), 0)

FUERON NuevaFecha5 = SI(IsHoliday4 > 0, NuevaFecha4 + 1, NuevaFecha4)

FUERON IsHoliday5 = SI(IsHoliday4 > 0, CALCULAR(COUNTROWS(«Tabla de fechas»), FILTRO('Tabla de fechas', 'Tabla de fechas'[Fecha] = NuevaFecha5 && 'Tabla de fechas'[es el día laborable] = "Falso")), 0)

DEVOLUCIÓN InitialCount (Recuento inicial) + OrderDetails[Plazo de ejecución] + SI(IsHoliday1 > 0, 1, 0) + SI(IsHoliday2 > 0, 1, 0) + SI(IsHoliday3 > 0, 1, 0) + SI(IsHoliday4 > 0, 1, 0) + SI(IsHoliday5 > 0, 1, 0)


Por último,


Fecha estimada de entrega =

SI(

NO(ISBLANK('OrderDetails' [Fecha de aprobación de CS])),

'OrderDetails' [Fecha de aprobación de CS] + 'OrderDetails' [TLT]

)



Syndicate_Admin
Administrator
Administrator

Hola @shafiz_p genial. Avísame si puedo ayudarte. ¡Mejor!

Syndicate_Admin
Administrator
Administrator

Hola @shafiz_p ejemplo de cheque

Lo siento, pero esta no es mi solución. Ya lo he aplicado.
Tengo que calcular la fecha estimada de entrega. Solo conozco la fecha de aprobación y el tiempo de entrega del producto. A partir de esta información podemos averiguar fácilmente cuándo es la fecha estimada de entrega. A continuación, podemos averiguar los fines de semana y los días festivos entre estas 2 fechas (Fecha de aprobación, y Fecha de aprobación + Tiempo de entrega). Digamos que se ha encontrado 1 fin de semana. Finalmente, la fecha estimada de entrega aumentó en 1 día. Ahora bien, el problema es que esta fecha de entrega estimada final es un día festivo o al día siguiente puede ser un día festivo, luego el siguiente, luego el siguiente. Por lo tanto, quiero asegurarme de que cuando sea, sean días hábiles. ¡Espero que lo entiendas!

Hola, @shafiz_p comparta su archivo con la entrada de muestra y la salida esperada.

shafiz_p_1-1714746110517.png

La marca de verificación roja es mi entrada. 3ª columna calculada por la fórmula del post. Mira esto. La 4ª columna es la suma de la 2ª y la 3ª. La 5ª es la salida. Pocos de los resultados están bien y pocos no lo están debido al problema que describí. Quiero esto La fecha estimada de entrega debe ser días hábiles. Si es un día laborable, la fórmula devolverá esta fecha, si no, comprobará la siguiente fecha y continuará hasta que se encuentre un día laborable. Solo recuerde, no podría crear ninguna columna nueva. Las columnas son fijas.

Actualmente el siguiente formulario de EDD, comprobando solo un día que es hábil o no.

Fecha estimada de entrega (EDD) =

FUERON EstimatedDeliveryDate =
SI(

NO(ISBLANK('OrderDetails' [Fecha de aprobación de CS])),

'OrderDetails'[Fecha de aprobación de CS] + 'OrderDetails'[Tiempo total de entrega]

)

FUERON IsHoliday = LOOKUPVALUE('Tabla de fechas' [es día laborable], 'tabla de fechas'[fecha], INT(EstimatedDeliveryDate)) = "Falso"

DEVOLUCIÓN SI(IsHoliday, EstimatedDeliveryDate + 1, EstimatedDeliveryDate)

Esta es la tabla de fechas. Tabla relacionada

shafiz_p_2-1714746657386.png


Puede crear tablas ficticias.

Hola @shafiz_p su tabla, ¿OrderDetails tiene filas duplicadas?

¿Debería ser algún identificador de producto u otra cosa única por fila en esa u otras tablas?

Acabo de proporcionarte la parte de la fecha. Sí, hay un ID de pedido único.

Helpful resources

Announcements
Europe Fabric Conference

Europe’s largest Microsoft Fabric Community Conference

Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.

RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

Top Solution Authors
Top Kudoed Authors