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
Syndicate_Admin
Administrator
Administrator

Cálculo de días entre días, luego duración total de días

Hola, tengo un informe de una base de datos SQL del que necesito extraer fechas sobre la progresión entre fases para cada proyecto. Cada proyecto tiene varias fases y varias fechas de acción dentro de la fase. En última instancia, necesito encontrar la progresión de cada proyecto a través de las fases en # de días (ver ejemplos de excel).

ccj_2-1637786803545.png

ejemplo de gráfico final:

ccj_1-1637786696588.png

Para hacer esto, necesito la primera fecha en una determinada fase (PHASE_START), luego el recuento de días entre la fecha de inicio de esa fase y la fecha de inicio de la siguiente fase (o la fecha de inicio de la última fecha de acción si es la última fase de un proyecto). Luego, estos recuentos deben sumarse para mostrar la progresión del proyecto a través de cada fase desde 0 hasta el número de días desde el inicio hasta la última fecha de acción de todas las fases de ese proyecto.

La PHASE_START es bastante fácil de obtener, pero me estoy quedando atascado en contar los días entre las fechas de inicio de las diferentes fases, ya que hay múltiples entradas para cada combinación de proyecto, fase y fecha de acción. Cualquier ayuda sería muy apreciada, gracias!!

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

En ella, @ccj

De acuerdo con su descripción, creo una muestra para satisfacer sus necesidades.

Primero debe crear una tabla distinta para mostrar la fase y la columna de inicio, también creo una tabla de fechas para ordenar.

Luego debe crear una medida para calcular el intervalo de fecha.

Nota: Poner los campos de diferentes tablas en el gráfico de líneas reportará errores, pero se mostrarán normalmente después de poner la medida en valores.

Así:

vjaneygmsft_0-1638258259691.png

Table 2 =
UNION (
    SUMMARIZE (
        Table1,
        Table1[PHASE],
        "date",
            MINX (
                FILTER ( ALL ( Table1 ), [PHASE] = EARLIER ( Table1[PHASE] ) ),
                [ACTUIN_DATE]
            )
    ),
    ROW ( "PHARE", "start", "date", DATE ( 2021, 1, 1 ) )
)

Measure =
VAR filtertable =
    FILTER (
        ALL ( Table1 ),
        [PROJECT] = SELECTEDVALUE ( Table1[PROJECT] )
            && [PHASE] = SELECTEDVALUE ( 'Table 2'[PHASE] )
    )
VAR mindate =
    MINX ( filtertable, [ACTUIN_DATE] )
VAR maxdate1 =
    MINX (
        FILTER (
            ALL ( Table1 ),
            [PROJECT] = SELECTEDVALUE ( Table1[PROJECT] )
                && [PHASE_START] > mindate
        ),
        [PHASE_START]
    )
VAR maxdate2 =
    IF ( ISBLANK ( maxdate1 ), MAXX ( filtertable, [ACTUIN_DATE] ), maxdate1 )
RETURN
    DATEDIFF ( mindate, maxdate2, DAY ) + 0

vjaneygmsft_1-1638258273469.png

¿Respondí a su pregunta? Por favor, marque mi respuesta como solución. Muchas gracias.
Si no, por favor siéntase libre de preguntarme.


Saludos
Equipo de apoyo a la comunidad _ Janey

View solution in original post

8 REPLIES 8
Syndicate_Admin
Administrator
Administrator

En ella, @ccj

De acuerdo con su descripción, creo una muestra para satisfacer sus necesidades.

Primero debe crear una tabla distinta para mostrar la fase y la columna de inicio, también creo una tabla de fechas para ordenar.

Luego debe crear una medida para calcular el intervalo de fecha.

Nota: Poner los campos de diferentes tablas en el gráfico de líneas reportará errores, pero se mostrarán normalmente después de poner la medida en valores.

Así:

vjaneygmsft_0-1638258259691.png

Table 2 =
UNION (
    SUMMARIZE (
        Table1,
        Table1[PHASE],
        "date",
            MINX (
                FILTER ( ALL ( Table1 ), [PHASE] = EARLIER ( Table1[PHASE] ) ),
                [ACTUIN_DATE]
            )
    ),
    ROW ( "PHARE", "start", "date", DATE ( 2021, 1, 1 ) )
)

Measure =
VAR filtertable =
    FILTER (
        ALL ( Table1 ),
        [PROJECT] = SELECTEDVALUE ( Table1[PROJECT] )
            && [PHASE] = SELECTEDVALUE ( 'Table 2'[PHASE] )
    )
VAR mindate =
    MINX ( filtertable, [ACTUIN_DATE] )
VAR maxdate1 =
    MINX (
        FILTER (
            ALL ( Table1 ),
            [PROJECT] = SELECTEDVALUE ( Table1[PROJECT] )
                && [PHASE_START] > mindate
        ),
        [PHASE_START]
    )
VAR maxdate2 =
    IF ( ISBLANK ( maxdate1 ), MAXX ( filtertable, [ACTUIN_DATE] ), maxdate1 )
RETURN
    DATEDIFF ( mindate, maxdate2, DAY ) + 0

vjaneygmsft_1-1638258273469.png

¿Respondí a su pregunta? Por favor, marque mi respuesta como solución. Muchas gracias.
Si no, por favor siéntase libre de preguntarme.


Saludos
Equipo de apoyo a la comunidad _ Janey

hola @v-janeyg-msft, esto es exaclty lo que estaba buscando!!! gracias por proporcionar la muestra, realmente ayudó.

Seguí sus instrucciones y modifiqué la fórmula de muestra a mis datos, y me estoy topado con un gran problema: los números en mi gráfico cuentan hacia atrás.

backward_progression.png

la progresión de la línea es correcta, el eje x está en el orden correcto, la diferencia entre cada punto es correcta, pero cuenta de 64 a 1 cuando debería ser de 1 a 64. Tengo el eje y invertido para mostrar la línea que tiene la progresión hacia arriba, pero idealmente el eje y debería comenzar en 0 y aumentar, pero con esta línea. ¿Hay alguna manera de modificar la fórmula de la medida para contar correctamente?

Cuando pongo la medida en la tabla, parece estar contando hacia atrás a partir de la fecha más reciente, luego una y otra vez hasta la primera fecha, dando a la fecha de inicio el valor más alto, lo cual es incorrecto.

En ella, @ccj

Compruebe la configuración en formato de eje Y.: eje invertido

vjaneygmsft_0-1638495327006.png

Si el resultado es incorrecto, proporcione su código y datos relacionados,de lo contrario es difícil para mí juzgar.

¿Respondí a su pregunta? Por favor, marque mi respuesta como solución. Muchas gracias.
Si no, por favor siéntase libre de preguntarme.


Saludos
Equipo de apoyo a la comunidad _ Janey

Hola @v-janeyg-msft,tengo el eje y invertido a propósito. la línea es correcta cuando se invierte, pero los valores cuentan hacia atrás, lo cual es incorrecto. Cuando el eje y no está invertido, se ve así:

ccj_3-1638564842050.png

esta línea es incorrecta y todavía cuenta hacia atrás. Quiero que se vea como el gráfico a continuación, pero los puntos de datos deben contar de 1 a 64:

ccj_2-1638564821838.png

gracias por su ayuda!

@ccj

Quiero ayudarte.. Pero solo proporcionas dos capturas de pantalla, es inútil ... Ni siquiera sé qué datos pones en el eje X.

Si es solo el orden incorrecto, puede ordenarlo. También utilicé la columna de fecha para ordenar la tabla recién creada en el ejemplo. (si sabes ordenar por columna y revisa cuidadosamente mi muestra)

vjaneygmsft_0-1638754313890.png

Si el resultado es incorrecto, proporcione su código y datosrelacionados, de lo contrario es difícil para mí juzgar.

Saludos
Equipo de apoyo a la comunidad _ Janey

Syndicate_Admin
Administrator
Administrator

Hola

Cree un objeto visual de tabla simple y arrastre Proyecto y Fase a las etiquetas de fila. Escribe estas medidas

Fecha de la primera acción = min(data[action_date])

Fecha de la última acción = max(data[action_date])

Duración = 1*([Fecha de la última acción]-[Fecha de la primera acción])

Formato de la duración como un número entero.

Cambie el vidual a un visual de línea.

Espero que esto ayude.

Syndicate_Admin
Administrator
Administrator

@Greg_Deckler gracias por la pronta respuesta y por enviarme al artículo de MTBF! Parece muy similar a lo que estoy haciendo. Sin embargo, al seguir el proceso MTBF en mis datos, tengo un problema con la fecha de finalización (RepairCompleted en el artículo) ya que mis datos tienen una fecha de inicio pero no una fecha de finalización. Eso necesita hacer referencia a un inicio de fase diferente para obtener esencialmente ese valor (ya que la fecha de finalización no es la última fecha enumerada para esa fase).

Pude usar ese formato de fórmula que pegaste en la respuesta anterior, pero devuelve "30/12/1899" en cada fila. Si cambio la referencia [Valor], entonces obtengo un problema de que el texto no se puede comparar con los valores numéricos.

gracias por su ayuda

Syndicate_Admin
Administrator
Administrator

@ccj Parece que podrías usar un enfoque MTBF. Vea mi artículo sobre el tiempo medio entre fallas (MTBF) que utiliza EARLIER: http://community.powerbi.com/t5/Community-Blog/Mean-Time-Between-Failure-MTBF-and-Power-BI/ba-p/3395....
El patrón básico es:
Columna =
VAR __Current = [Valor]
VAR __PreviousDate = MAXX(FILTER('Table','Table'[Date] < EARLIER('Table'[Date])),[Date])

VAR __Previous = MAXX(FILTER('Tabla',[Fecha]=__PreviousDate),[Valor])
DEVOLUCIÓN
__Current - __Previous

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.