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
Anonymous
Not applicable

Cómo calcular la duración por fechas

Hola

¿Me puedes ayudar? 🙂

Mis datos en la tabla "Adquisición":

TítuloFecha de finalización programadaFecha de finalización
Pc2020-06-022020-08-03
Monitor2020-07-032020-07-03
Ps42020-08-28

Debe calcularse lo siguiente:

- Compruebe que se ha introducido la fecha de finalización. En caso afirmativo, calcule si hay un retraso. Si no es así - tome una fecha hoy y calcule si hay un retraso. Si hay un retardo - mostrar en el nuevo campo 1, si no - BLANK ().

- Mostrar en el siguiente campo: si hay un retraso - mostrar cuántos días laborables se retrasan. Calcule los días de la red estimando todos los días festivos. Las vacaciones se almacenan en mi otra mesa.

En este caso, el resultado debería tener este aspecto:

TítuloFecha de finalización programadaFecha de finalizaciónRetrasoDías
Pc2020-06-022020-08-03143*
Monitor2020-07-032020-07-03
Ps42020-08-28 17**

*43, porque 2020-06-24, 2020-07-06 días son días festivos.

**7, porque hoy es 2020-09-07. Habrá un día más cada día: mañana - 8, etc.

7 REPLIES 7
v-stephen-msft
Community Support
Community Support

Hola @Martyna_ ,

1.Cree una tabla de calendario. No hay ninguna relación entre dos tablas.

Date = 
ADDCOLUMNS (
    CALENDAR ( DATE ( 2020, 6, 1 ), DATE ( 2020, 9, 30 ) ),
    "Holiday",
        IF (
            WEEKDAY ( [Date], 2 ) = 6
                || WEEKDAY ( [Date], 2 ) = 7
                || [Date] = DATE ( 2020, 6, 24 )
                || DATE ( 2020, 7, 6 ) = [Date],
            "Yes",
            "No"
        )
)

1.png2.png

2.Crear medidas.

Delay =
IF (
    MAX ( 'Procurement'[End date] ) = MAX ( 'Procurement'[Scheduled end date] ),
    BLANK (),
    1
)
Days =
VAR t1 =
    CALCULATE (
        COUNTROWS ( 'Date' ),
        FILTER (
            'Date',
            [Date] <= MAX ( 'Procurement'[End date] )
                && [Date] >= MAX ( 'Procurement'[Scheduled end date] )
                && [Holiday] = "No"
        )
    )
VAR t2 =
    CALCULATE (
        COUNTROWS ( 'Date' ),
        FILTER (
            'Date',
            [Date] <= TODAY ()
                && [Date] >= MAX ( 'Procurement'[Scheduled end date] )
                && [Holiday] = "No"
        )
    )
RETURN
    SWITCH (
        TRUE (),
        [Delay] = BLANK (), BLANK (),
        [Delay] = 1
            && MAX ( 'Procurement'[End date] ) <> BLANK (), t1,
        [Delay] = 1
            && MAX ( 'Procurement'[End date] ) = BLANK (), t2
    )

3.El resultado es el siguiente.

3.png

Puede consultar más detalles desde aquí.

Saludos

Stephen Tao

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Anonymous
Not applicable

@v-stephen-msft , gracias, pero no todo está claro para mí.
Voy a explicar lo que he calculado ahora y lo que necesito.

Ya he creado dos tablas: Adquisición y Vacaciones. También he calculado el retraso utilizando la medida.

Tabla de compras:

TítuloFecha de finalización programadaFecha de finalización
Pc2020-06-022020-08-03
Monitor2020-07-032020-07-03
Ps42020-08-28

Tabla de vacaciones:

FechaValor
2020-01-011
2020-03-011
2020-04-131
etcetera...

Retraso (no sé si es correcto, o no, porque estoy usando dos lógicas en esta fórmula):

Retardo: IF(('Procurement'[Scheduled end date])>'('Procurement'[End date]) ? («Adquisición»[La contratación se realiza según lo previsto]) n.o 1; BLANK();1)

Necesito calcular:

- si no tengo una fecha de finalización - ¿cómo puedo calcular el retraso hasta hoy?

- ¿Y cómo puedo calcular los días? Necesito mostrar cuántos días de trabajo se retrasan? Calculé Networkdays en otra tabla. Puede ser posible hacer un cálculo similar:

Días de la Red (NetworkDays)
Var TBL_Date-CALENDAR(IF('Tarjeta de aplicación'[Fecha de inicio] - BLANK();' Tarjeta de solicitud'[Fecha de creación];' Tarjeta de solicitud'[Fecha de inicio]);' Tarjeta de solicitud'[Fecha de registro])
var TBL_FinalDate-ADDCOLUMNS(TBL_Date;" Día laborable";IF(WEEKDAY([Fecha];2)>-6;0;1);" Holiday";IFERROR(LOOKUPVALUE('Holidays'[Value];' Vacaciones'[Fecha]; [Fecha]);0))
devolución
SUMX(TBL_FinalDate;if([Día laborable]-1&&[Vacaciones]-0;1;0))

Hola @Martyna_ ,

Usted ha dado una mesa especial de vacaciones. Puede intentar utilizar la función RELACIONADA para hacer referencia a las columnas de la tabla de vacaciones de la tabla de calendario, siempre que las dos tablas tengan una relación.

1.Tabla de calendario. Y hay una relación entre la tabla Calendario y la tabla Vacaciones.

Calendar = CALENDAR ( MIN('Procurement'[Scheduled end date]),TODAY() )

9.png

2.Crear columnas calculadas en la tabla Calendario. La columna Día de la semana devuelve un número del 1 al 7,la semana comienza el lunes (1) y termina el domingo (7). La columna Fin de semana/Vacaciones devuelve 1 si la fecha es un fin de semana o un día festivo, de lo contrario devuelve 0.

Holiday = RELATED(Holidays[Date])
Weekday = WEEKDAY([Date],2)
Weekend/Holiday = IF([Weekday]=6||[Weekday]=7||[Holiday]=[Date],1,0)

10.png

3.De acuerdo con su explicación, modifiqué la medida Delay. Puesto que no tengo una columna [Adquisición se realiza según la programación], uso la columna Fecha de finalización como condición de juicio.

Delay =
IF (
    MAX ( 'Procurement'[Scheduled end date] ) < MAX ( 'Procurement'[End date] )
        || MAX ( 'Procurement'[End date] ) = BLANK (),
    1,
    BLANK ()
)

4.t1 es el número de días desde la fecha de finalización programada hasta la fecha de finalización y excluyendo fines de semana y días festivos.

t2 es el número de días desde la fecha de finalización programada hasta hoy y excluyendo fines de semana y días festivos.

A continuación, llame a t1 o t2 según el valor devuelto de la medida Delay y si la columna Fecha de finalización está vacía como condición de sentencia.

Days =
VAR t1 =
    CALCULATE (
        COUNTROWS ( 'Calendar' ),
        FILTER (
            'Calendar',
            [Date] <= MAX ( 'Procurement'[End date] )
                && [Date] >= MAX ( 'Procurement'[Scheduled end date] )
                && [Weekend/Holiday] = 0
        )
    )
VAR t2 =
    CALCULATE (
        COUNTROWS ( 'Calendar' ),
        FILTER (
            'Calendar',
            [Date] <= TODAY ()
                && [Date] >= MAX ( 'Procurement'[Scheduled end date] )
                && [Weekend/Holiday] = 0
        )
    )
RETURN
    SWITCH (
        TRUE (),
        [Delay] = BLANK (), BLANK (),
        [Delay] = 1
            && MAX ( 'Procurement'[End date] ) <> BLANK (), t1,
        [Delay] = 1
            && MAX ( 'Procurement'[End date] ) = BLANK (), t2
    )

11.png

Puede consultar más detalles desde aquí.

Saludos
Stephen Tao

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Anonymous
Not applicable

@v-stephen-msft , gracias. Todo se ve bien.

Quiero hacer algunas preguntas más:

El cálculo del retraso debe incluir la lógica (excepción) que aplico a este día, si la columna "Adquisición está programada" es 1, no aplique el retraso. Por ejemplo:

TítuloFecha de finalización programadaFecha de finalizaciónRetrasoDíasLas adquisiciones se realizan a tiempo
Pc2020-06-022020-08-03143
Monitor2020-07-032020-07-03
Ps42020-08-28 17
Tv2020-07-272020-08-03 61

Y una pregunta más:

En la tabla, excepto por esa lógica en la parte superior, todo cuenta correctamente. Sin embargo, cuando intento comparar los retrasos en la adquisición con las adquisiciones en curso o mostrar cuánto es retraso y cuántos no se retrasan, no cuenta.

table.png

procurement.png

not delay.png

También en el cuadro de compras veo la fecha de finalización programada de la contratación en el futuro y veo que ya son retrasas, aunque esas fechas aún no han llegado, por ejemplo, la fecha de finalización programada: 2020-09-14

Greg_Deckler
Super User
Super User

@Martyna_ - No entendí todo eso, pero puedes usar días de trabajo netos para calcular el número de días entre el final programado y el final. 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...
amitchandak
Super User
Super User

@Martyna_ ,

Mira esto -https://www.sqlbi.com/articles/counting-working-days-in-dax/

Compruebe mi archivo página 2 - tiene diferencia de fecha y días de trabajo de negocios

https://www.dropbox.com/s/y47ah38sr157l7t/Order_delivery_date_diff.pbix?dl=0

Anonymous
Not applicable

@amitchandak, no puedo abrir el archivo, porque mi versión de PBI Desktop es más antigua.

¿Quizás es posible presentar el contenido de este archivo de manera diferente, por ejemplo en las fotos? Gracias.

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.