Check your eligibility for this 50% exam voucher offer and join us for free live learning sessions to get prepared for Exam DP-700.
Get StartedDon't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.
¡Hola a todos!
Me gustaría crear una nueva tabla (Diario ordenado) utilizando datos de tablasexistentes ( Tareas , Diario) y "ligeramente" actualizarla.
Diario ordenado: debe ser un objeto de tabla, ya que me gustaría crear relaciones en mi modelo de datos con esta tabla.
A continuación se muestran las tablas existentes y esperadas:
Tabla de tareas (existente)
ID de tarea | Creado activado (m/d/y) | |
1 | 6/1/2020 | |
2 | 6/2/2020 |
Tabla de diario (existente)
ID de tarea | Fecha (m/d/a) | Estado antiguo | Nuevo estatus | |||
1 | 6/2/2020 10:00 | 1 | 24 | |||
1 | 6/3/2020 14:00 | 24 | 10 | |||
1 | 6/3/2020 16:00 | 10 | 5 | |||
1 | 6/3/2020 18:00 | 5 | 10 | |||
2 | 6/3/2020 11:00 | 1 | 10 | |||
2 | 6/4/2020 14:00 | 10 | 3 |
Tabla de diario ordenada (esperada)
ID de tarea | Fecha de inicio | Fecha de finalización | Estado inicial | |||
1 | 6/1/2020 | 6/3/2020 14:00 | Creado | |||
1 | 6/3/2020 16:00 | 6/3/2020 18:00 | 5 | |||
2 | 6/2/2020 | 6/3/2020 11:00 | Creado | |||
2 | 6/4/2020 14:00 | 3 |
La idea de una nueva tabla de diario ordenado es mostrar una duración (período) de cada tarea. El status 10 se puede considerar como un divisor de por vida (período) en períodos separados.
Nota: el estado no cambia ni el orden ascendente ni descendente. El estado se puede cambiar en esta secuencia 1-5-2-23-8-12-10 y la vida útil siguiente (período) es 10-15-2-7-10.
Cosas clave:
¿Cómo se debe rellenar la tabla Diario ordenado?
Primer registro de duración (período) de cada tarea:
Para los siguientes registros de duración (si existen para una tarea):
Esperamos cualquier consejo para resolver este problema.
Hola @Hennadii ,
En primer lugar, cree una columna calculada como se indica a continuación:
Start date = LOOKUPVALUE('Tasks table'[Created On (m/d/y)],'Tasks table'[Task ID],'Journal table'[Task ID],blank())
A continuación, cree 4 medidas como se indica a continuación:
measure1 =
var _prestatus=CALCULATE(MAX('Journal table'[New Status]),FILTER(ALL('Journal table'),'Journal table'[Index]<MAX('Journal table'[Index])))
var maxdate=MAXX(FILTER(ALL('Journal table'),'Journal table'[Task ID]=MAX('Journal table'[Task ID])&&'Journal table'[Index]<MAX('Journal table'[Index])&&'Journal table'[Old Status]=10),'Journal table'[Date (m/d/y)])
Return
IF(MAX('Journal table'[Index])=MINX(FILTER(ALL('Journal table'),'Journal table'[Task ID]=MAX('Journal table'[Task ID])),'Journal table'[Index])||_prestatus<>10,MAX('Journal table'[Start date]),
IF(MAX('Journal table'[Old Status])=10,MAX('Journal table'[Date (m/d/y)]),maxdate))
_Startdate =
VAR _max=MAXX(FILTER(ALL('Journal table'),'Journal table'[Task ID]=MAX('Journal table'[Task ID])),'Journal table'[Date (m/d/y)])
Return
IF(MAX('Journal table'[Date (m/d/y)])<>_max&&'Journal table'[_Enddate]=BLANK(),BLANK(),[measure1])
_Enddate =
var _preoldstatus= CALCULATE(MAX('Journal table'[Old Status]),FILTER(ALL('Journal table'),'Journal table'[Index]=MAX('Journal table'[Index])-1))
var _nexoldstatus=CALCULATE(MAX('Journal table'[Old Status]),FILTER(ALL('Journal table'),'Journal table'[Index]=MAX('Journal table'[Index])+1))
Return
CALCULATE(MAX('Journal table'[Date (m/d/y)]),FILTER('Journal table','Journal table'[New Status]=10&&_preoldstatus=10||'Journal table'[New Status]=10&&_nexoldstatus=10&&'Journal table'[Task ID]=MAX('Journal table'[Task ID])))
Initial State =
IF([_Startdate]=BLANK(),BLANK(),IF('Journal table'[_Startdate]=MAX('Journal table'[Start date]),"Created",IF([_Enddate]=BLANK(),MAX('Journal table'[New Status]),MAX('Journal table'[Old Status]))))
Finalmente verá:
Para el archivo .pbix relacionado, pls haga clic aquí.
Muchas gracias por tan duro trabajo @v-kellya-msft !!!
No me muestra el resultado correcr en los datos reales que tengo, y es probable que me pierda algo mientras edito el nombre de las columnas / tablas. Me veré muy profundo para understad cómo funciona. El hecho de que funciona en un ejemplo de datos es impresionante!
Me preguntaba, ¿cuánto tiempo pasaste para solwe?
Hola @Hennadii ,
¿Qué error está recibiendo? ¿Puedes mostrarme una captura de pantalla de tu error? He creado una columna de índice para lograr el cálculo, ¿lo has notado?
Francamente hablando, realmente me cuesta mucho tiempo lograrlo. Así que trabajemos juntos para resolver este problema. 😊
Hola @v-kellya-msft ,
Veo que está usando MAX para obtener el estado tardío, considerando el orden ascendente de los cambios de estado. Me comprologizo, no mencioné en el post inicial, que el estado no se cambia en orden ascendente, más sobre, el estado puede ser incluso más de 10.
En mi caso, un estatus puede cambiar de esta manera 1-5-2-23-8-12-10 y el siguiente llifetime (período) está empezando de 10-15-2-7-10.
Sólo tres cosas constantes aquí:
Actualizaré la publicación inicial con estas notas.
Hola @Hennadii ,
Perdón por la respuesta tardía.
He corregido mi archivo .pbix de acuerdo con sus detalles adicionales, ver más abajo:
Cree 3 columnas calculadas como se indica a continuación:
Group = RANKX(FILTER('Journal table','Journal table'[Task ID]=EARLIER('Journal table'[Task ID])&&'Journal table'[New Status]=10),[Date (m/d/y)],,ASC)
Start date =
IF('Journal table'[Group]=1,'Journal table'[Create date],MINX(FILTER('Journal table','Journal table'[Task ID]=EARLIER('Journal table'[Task ID])&&'Journal table'[Group]=EARLIER('Journal table'[Group])),'Journal table'[Date (m/d/y)]))
End date =
var _maxdate=MAXX(FILTER('Journal table','Journal table'[Task ID]=EARLIER('Journal table'[Task ID])&&'Journal table'[Group]=EARLIER('Journal table'[Group])),'Journal table'[Date (m/d/y)])
Return
IF('Journal table'[New Status]=10,'Journal table'[Date (m/d/y)],IF(_maxdate='Journal table'[Start date],BLANK(),_maxdate))
En cuanto a "Estado inicial", hay 2 tipos de datos, por lo que es mejor crear una medida en lugar de columna (2 tipos no se admiten en la columna calculada):
Initial State =
var _max=CALCULATE(MAX('Journal table'[New Status]),FILTER(ALL('Journal table'),'Journal table'[Old Status]=10&&'Journal table'[Group]=MAX('Journal table'[Group])&&'Journal table'[Task ID]=MAX('Journal table'[Task ID])))
Return
IF(MAX('Journal table'[Group])=1,"Created",_max)
Pero si desea crear una relación utilizando este campo, puede crear una columna calculada como se muestra a continuación: (necesita cambiar el formato del valor al texto como se muestra a continuación);
Initial status column =
var _max=CALCULATE(MAX('Journal table'[New Status]),FILTER('Journal table','Journal table'[Old Status]=10&&'Journal table'[Group]=EARLIER('Journal table'[Group])&&'Journal table'[Task ID]=EARLIER('Journal table'[Task ID])))
Return
IF('Journal table'[Group]=1,"Created",FORMAT(_max,"general number"))
Y verás:
Para el archivo .pbix relacionado, pls haga clic aquí.
Hola @v-kellya-msft , ¿puedo pedirte un favor?
Hay otro caso en mis datos, que no se maneja con la solución actual.
Tengo algunas tareas (en la tabla Tareas) que nunca cambiaron su estado (sin registros en la tabla Diario ). Me gustaría enumerar esas tareas en la tabla resultante e indicar que su fecha de inicio (igual que Creado en)y Fecha de finalización está en blanco.
¿Podría ayudar a actualizar las expresiones para crear la tabla resultante?
Tabla de tareas (existente)
ID de tarea | Creado activado (m/d/y) | |
... | ... | |
3 | 6/3/2020 |
Tabla de diario ordenada (esperada)
ID de tarea | Fecha de inicio | Fecha de finalización | Estado inicial | |||
... | ... | ... | ... | |||
3 | 6/3/2020 | Creado |
@v-kellya-msft ¡¡¡Impresionante!!! FUNCIONA!!!
No puedes imaginar cuánto aprecio todos tus esfuerzos para resolver eso. ¡Te daría un millón de felicitaciones!
Gracias y le deseo lo mejor!
Hola @v-kellya-msft ,
Encontré un caso cuando no funciona. Aquí está el archivo .pbix y una captura de pantalla que ilustra el problema.
Pensé en usar la tabla resultante como una tabla (no como tabla en visual) . Me gustaría crear algunas relaciones con otras mesas de mi modelo.
¿Es posible "combinar" el resultado en un objeto de tabla?
Hola @v-kellya-msft ,
Veo sólo Fecha de finalización para dos tareas, y el resto 500 (aprox.) tienen la fecha de finalización vacía (no debería ser así). Intentaré navegar por una razón de eso y, si es posible, reproduciré ese caso en datos de muestra y le enviaré de vuelta para su investigación.
Gracias por eso.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!
Check out the January 2025 Power BI update to learn about new features in Reporting, Modeling, and Data Connectivity.