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

Problema al crear un gráfico de líneas con sumas corrientes y una proyección simple

Este es un seguimiento de un post anterior que hice.

En primer lugar voy a dejar algunos datos de ejemplo:

package_IDclient_IDpackage_weightdue_datearrival_date
112003-03-202105-03-2021
211508-04-202102-04-2021
321808-03-202112-03-2021
432305-03-202103-03-2021
513520-05-2021
631210-04-202131-03-2021
72813-04-202120-04-2021
833308-06-2021
912610-06-2021
1021409-06-2021
1126008-07-2021
1233215-07-2021
131420-07-2021

Por si acaso, las fechas son D-M-Y. Los datos de ejemplo suponen una fecha actual de 25-04-2021. Algunas fechas de la columna arrival_date están intencionalmente en blanco, ya que vencen en el futuro. Esos se rellenan a medida que llegan los paquetes.

También tengo una tabla de fechas a la que se unen las fechas de vencimiento y de llegada.

Lo que necesito lograr es un gráfico de líneas que tenga tres elementos:

1) Total corriente de package_weight por due_date.
2) Total corriente de package_weight por arrival_date.
3) Una proyección simple para el total de package_weight basada en una estimación simple. Algo así: primero calculando un "peso diario" para el último "intervalo", es decir. el último package_weight divide por días entre el penúltimo arrival_date y el último arrival_date, y luego se multiplica por la cantidad de días hasta una fecha determinada, por ejemplo. 31-07-2021. Eso debería dar una proyección muy simple para el período comprendido entre el arrival_date pasado y el 31-07-2021.

Todo esto por cliente. Esto es, necesito poder usar una segmentación de datos para ver los datos correspondientes a un solo cliente.

Un gráfico de ejemplo de lo que quiero lograr aquí:

DusanVH_0-1627681156429.png

En el gráfico, el azul es el total de package_weight por due_date, el naranja es el total de package_weightby arrival_date y el rojo es la proyección.

En el post anterior que mencioné recibí una sugerencia que me ayudó a hacer que una de las sumas corrientes funcionara, pero no ambas al mismo tiempo en el mismo gráfico.

Aquí está mi código:

Cumm dos = CALCULAR(CALCULAR(SUM(Tabla[package_weight]), USERELATIONSHIP(fecha[fecha], tabla[due_date])), FILTRO(ALLSELECTED(tabla[due_date]), ISONORAFTER(tabla[due_date], MAX(tabla[due_date]), DESC)))
Y no funciona para la llegada de cumm:
Cumm arrival = CALCULATE(CALCULATE(SUM(Table[package_weight]), USERELATIONSHIP(date[date], table[arrival_date]), FILTER(ALLSELECTED(table[arrival_date]), ISONORAFTER(table[arrival_date], MAX(table[arrival_date]), DESC)))
Aquí hay un gráfico de ejemplo con diferentes datos pero la misma lógica de lo que veo:
DusanVH_1-1627681451144.png

Azul es Cumm debido y cian es cumm llegada. Sólo Cumm debido parece funcionar.

Esto también es usar due_date como eje x del gráfico (cuadro eje). Cuando puse arrival_date allí, se invierte, la llegada de Cumm funciona y Cumm debido no. Es un poco obvio que no debería funcionar, ya que debería usar la fecha [fecha] en su lugar, pero cuando lo hago, el gráfico está vacío. Me imagino que esto se debe a que no uso la tabla de fechas en mi código.

Y también me falta la proyección, y aquí aparentemente la funcionalidad de pronóstico no es de ninguna ayuda en este caso porque las fechas no son a intervalos regulares.

Cualquier ayuda es apreciada, gracias de antemano!

2 REPLIES 2
Syndicate_Admin
Administrator
Administrator

No @DusanVH

Supongo que la relación entre date[date] y table[arrival_date] es una relación activa en su modelo, por lo que el código para cumm arrival no funciona. Quite la parte USERELATIONSHIP(date[date], table[arrival_date]) del código. USERELATIONSHIP se utiliza para activar una relación inactiva en el código. Para las relaciones activas, no lo necesita.

Otra razón es que arrival_date columna tiene valores en blanco para fechas futuras. Sin embargo, los valores en blanco se consideran menores que otros valores que no están en blanco, por lo que package_weight en esas filas se calcularán incorrectamente. Necesitamos filtrar las fechas en blanco en el código.

A continuación se muestra mi código

Cumm arrival = CALCULATE(SUM('Table'[package_weight]),FILTER(ALLSELECTED('Date'),NOT(ISBLANK('Date'[Date])) && 'Date'[Date]<=MAX('Date'[Date])))
Cumm due = CALCULATE(SUM('Table'[package_weight]), USERELATIONSHIP('Date'[Date], 'Table'[due_date]), FILTER(ALLSELECTED('Date'[Date]), 'Date'[Date]<=MAX('Date'[Date])))

Y debe usar 'date'[date] en ambas medidas y en el eje X en el gráfico de líneas. Esto evitará que falte cualquier valor de fecha.

080203.jpg

Para la parte de proyección, ¿quiere dividir la package_weight en el último arrival_date entre días entre el penúltimo arrival_date y el último arrival_date? ¿Y cómo obtener la fecha de finalización dada? ¿Es una fecha fija o una fecha dinámica?

saludos
Equipo de soporte de la comunidad _ Jing
Si esta publicación ayuda, por favor acéptala como la solución para ayudar a otros miembros a encontrarla.

Hola @v-jingzhang , gracias por tu sugerencia, voy a probar lo que dices, pero creo que te perdiste que es por paquete. Creo que el suyo está sumando todos los paquetes, tal vez no estaba usando una segmentación de datos para seleccionar un paquete, supongo que no debería necesitar ninguna modificación de código. Además, sus gráficos son escalonados, idealmente deben ser líneas rectas entre cada punto.


Para la parte de proyección, ¿quiere dividir la package_weight en el último arrival_date entre días entre el penúltimo arrival_date y el último arrival_date? ¿Y cómo obtener la fecha de finalización dada? ¿Es una fecha fija o una fecha dinámica?


  1. Sí, eso es todo. En otras palabras, quiero que la línea staright sea el penúltimo punto del paquete y el último se proyecte hacia adelante.

  2. Idealmente, me gustaría que la proyección tuviera un punto en cada una de las próximas due_dates. Si eso es demasiado difícil, usar solo el último due_date está bien. Si incluso eso es demasiado difícil, algo simple como el último arrival_date + 3 meses hará lo suficientemente bien. La proyección debe actualizarse a medida que llegan los paquetes.

    Para ilustrar esto mejor voy a hacer algunos gráficos. De nuevo, el azul es para due_date, el naranja es para arrival_date y el rojo es para la proyección. Para cada uno supongamos que la fecha actual es un día después de la última arrival_date. Además, hay una fecha de period_start en otra tabla que ahora me di cuenta de que debería usarse como el punto inicial "cero", que usé aquí para hacer la primera proyección.

    Este primero es justo después de que llegue el paquete #1:
    DusanVH_0-1628021723906.png

    package_IDclient_IDpackage_weightdue_date arr_daterunning_sum_whtproyecciónProj_date
    01001-03-202101-03-20210
    111030-03-202115-03-2021101015-03-2021
    212015-04-2021303215-04-2021
    313002-05-2021604402-05-2021
    414030-06-20211008630-06-2021


    El segundo es justo después de que llegue el paquete #2. En esta la proyección supera el máximo de 100, eso se pretende:
    DusanVH_0-1628022593237.png

    package_noclient_IDpackage_weightdue_date arr_daterunning_sum_whtproyecciónProj_date
    01001-03-202101-03-20210
    111030-03-202115-03-202110
    212015-04-202103-04-2021303003-04-2021
    313002-05-2021606502-05-2021
    414030-06-202110012730-06-2021


    El tercero es después de que llegue el paquete #3:
    DusanVH_1-1628022876309.png

    package_noclient_IDpackage_weightdue_date arr_daterunning_sum_whtproyecciónProj_date
    01001-03-202101-03-20210
    111030-03-202115-03-202110
    212015-04-202103-04-202130
    313002-05-202120-04-2021606020-04-2021
    414030-06-202110021430-06-2021



    Para crear la proyección aquí obtuve los valores simplemente calculando la pendiente de la línea entre la última y la penúltima fecha de llegada y multiplicándola por la diferencia en días entre la fecha siguiente correspondiente y la fecha de inicio del período. Las fechas de cada valor son las due_date correspondientes.

    Como puede ver, la proyección "avanza" y se actualiza cada vez que llega un paquete.

Muchas gracias por tu tiempo, eres de gran ayuda.

Editar: se han agregado columnas que faltan en las tablas

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.