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.
Este es un seguimiento de un post anterior que hice.
En primer lugar voy a dejar algunos datos de ejemplo:
package_ID | client_ID | package_weight | due_date | arrival_date |
1 | 1 | 20 | 03-03-2021 | 05-03-2021 |
2 | 1 | 15 | 08-04-2021 | 02-04-2021 |
3 | 2 | 18 | 08-03-2021 | 12-03-2021 |
4 | 3 | 23 | 05-03-2021 | 03-03-2021 |
5 | 1 | 35 | 20-05-2021 | |
6 | 3 | 12 | 10-04-2021 | 31-03-2021 |
7 | 2 | 8 | 13-04-2021 | 20-04-2021 |
8 | 3 | 33 | 08-06-2021 | |
9 | 1 | 26 | 10-06-2021 | |
10 | 2 | 14 | 09-06-2021 | |
11 | 2 | 60 | 08-07-2021 | |
12 | 3 | 32 | 15-07-2021 | |
13 | 1 | 4 | 20-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í:
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)))
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)))
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!
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.
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?
package_ID | client_ID | package_weight | due_date | arr_date | running_sum_wht | proyección | Proj_date |
0 | 1 | 0 | 01-03-2021 | 01-03-2021 | 0 | ||
1 | 1 | 10 | 30-03-2021 | 15-03-2021 | 10 | 10 | 15-03-2021 |
2 | 1 | 20 | 15-04-2021 | 30 | 32 | 15-04-2021 | |
3 | 1 | 30 | 02-05-2021 | 60 | 44 | 02-05-2021 | |
4 | 1 | 40 | 30-06-2021 | 100 | 86 | 30-06-2021 |
package_no | client_ID | package_weight | due_date | arr_date | running_sum_wht | proyección | Proj_date |
0 | 1 | 0 | 01-03-2021 | 01-03-2021 | 0 | ||
1 | 1 | 10 | 30-03-2021 | 15-03-2021 | 10 | ||
2 | 1 | 20 | 15-04-2021 | 03-04-2021 | 30 | 30 | 03-04-2021 |
3 | 1 | 30 | 02-05-2021 | 60 | 65 | 02-05-2021 | |
4 | 1 | 40 | 30-06-2021 | 100 | 127 | 30-06-2021 |
package_no | client_ID | package_weight | due_date | arr_date | running_sum_wht | proyección | Proj_date |
0 | 1 | 0 | 01-03-2021 | 01-03-2021 | 0 | ||
1 | 1 | 10 | 30-03-2021 | 15-03-2021 | 10 | ||
2 | 1 | 20 | 15-04-2021 | 03-04-2021 | 30 | ||
3 | 1 | 30 | 02-05-2021 | 20-04-2021 | 60 | 60 | 20-04-2021 |
4 | 1 | 40 | 30-06-2021 | 100 | 214 | 30-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
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
2 | |
1 | |
1 | |
1 | |
1 |
User | Count |
---|---|
2 | |
2 | |
2 | |
1 | |
1 |