cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Syndicate_Admin
Administrator
Administrator

Filtrado de registros basado en una fecha de registro dentro de la fecha de inicio y finalización de otro registro

¡Hola!

Estoy trabajando con grandes conjuntos de datos del sistema ERP de nuestras empresas, así que estoy simplificando un poco el problema, pero básicamente tenemos una lista de trabajos y esos trabajos tienen una fecha de inicio y una fecha de finalización. Necesito filtrar los trabajos que se muestran en el panel eligiendo una fecha y solo mostrando los trabajos que aún están "abiertos", lo que significa que la fecha elegida está en o entre sus fechas de inicio y finalización. Trabajos sin fecha de finalización que estarán en blanco. Vinculados a esos empleos hay registros que deben crearse diariamente. Esos registros tienen un registro de encabezado con una fecha y registros de detalle. También me gustaría poder mostrar los trabajos que tienen un registro para esa fecha, incluso si el trabajo aún no ha comenzado o si ya ha terminado.

Lo que me gustaría poder hacer es para una sola fecha dada del registro de encabezado (o tabla de fechas relacionada), extraer los registros diarios para esos trabajos (que podría haber múltiples) y mostrar qué trabajos tenían un registro, luego mostrar todos los trabajos que no tienen registro pero deberían haber dado sus fechas de inicio y finalización.

El resultado esperado basado en los datos sería un panel que se encuentra predeterminado a la fecha de ayer utilizando un filtro marcado y que filtrará el número de trabajos para mostrar el número total de trabajos abiertos en esa fecha, el número total con un registro, el número total sin un registro, y luego agregará los datos de los registros de varias maneras, como el número total de trabajadores, total de trabajadores internos, total de trabajadores externos, número de registros cerrados y número de registros pendientes. También hay otras mesas como el personal de trabajo clave que también se atraería. Luego, otro botón borrará ese filtro y el usuario puede seleccionar cualquier fecha en el pasado. Básicamente, la fecha seleccionada debe filtrar la tabla de trabajos y luego la tabla de trabajos debe filtrar todo lo demás.

Tengo esto funcionando basado en estados de trabajo estáticos, pero tenemos que ser dinámicos para que si miro la fecha de ayer muestre los trabajos que estaban activos a partir de ayer y si miro hace 2 semanas o hace 2 meses mostrará diferentes trabajos porque algunos habrán terminado y otros habrán comenzado.

Los dos elementos con los que estoy luchando son cómo filtrar dinámicamente los trabajos que se muestran solo a los que se abren en función de la fecha seleccionada y sus fechas de inicio y finalización, al tiempo que muestran todos los trabajos que tienen un registro y todos los trabajos que deberían tener un registro pero no lo tienen. E idealmente mostrándolos todos en una tabla con información resumida en tarjetas a lo largo de la parte superior.

Los usuarios de esto luego filtrarán esa tabla (o será prefiltrada por RLS para ellos) para hacer un seguimiento de los registros de trabajos faltantes o con registros pendientes en una fecha determinada o ver datos agregados para una fecha específica para la fuerza laboral.

¡Cualquier idea sobre cómo hacer que esto se filtre así sería muy apreciada!

Usando los datos a continuación, si establecí una segmentación de datos para el 6/4/2021, debería ver una tabla como esta.

TABLA DE DETALLES

Trabajo Número de registrosNúmero de registros cerradosNúmero de registros pendientesNúmero de trabajadores internosNúmero de trabajadores externosGerente de Trabajo
100 Peter Cola de algodón
200211 5Juan Smith
300 Jane Ée

Si lo configguro para el 6/9/2021:

TABLA DE DETALLES

Trabajo Número de registrosNúmero de registros cerradosNúmero de registros pendientesNúmero de trabajadores internosNúmero de trabajadores externosGerente de Trabajo
1001 15 Peter Cola de algodón
200 Juan Smith
3001 125Jane Ée
40011 75Mike Jones

DATOS DE MUESTRA

Tabla de trabajos

Código de trabajoNombre del puestoFecha de inicioFecha final
100Trabajo 16/1/20216/5/2021
200Empleo 26/2/20216/10/2021
300Puesto 36/3/2021
400Puesto 46/8/2021

Encabezado de registro

Código de trabajoCódigo del sistema de encabezado de registroFecha de registroEstado del registro
100683216/1/2021Cerrado
100685486/2/2021Cerrado
100693456/9/2021Pendiente
200682346/2/2021Cerrado
200691276/4/2021Cerrado
200695346/4/2021Pendiente
200696526/6/2021Cerrado
200697586/6/2021Pendiente
200698436/7/2021Cerrado
200699846/7/2021Pendiente
300697126/6/2021Cerrado
300699956/9/2021Pendiente
400725686/9/2021Cerrado
400735686/15/2021Pendiente

Detalle del registro

Código de trabajoCódigo del sistema de encabezado de registroCódigo del sistema de detalle de registroNombre de la empresa# de trabajadores
1006832168321.1Interno 17
1006832168321.2Externo 28
1006832168321.3Externo 32
1006832168321.4Externo 45
1006854868548.1Interno 14
1006854868548.2Externo 26
1006854868548.3Externo 35
1006854868548.4Externo 48
1006934569345.1Interno 15
2006823468234.1Externo 12
2006912769127.1Externo 13
2006953469534.1Externo 12
2006965269652.1Externo 13
2006975869758.1Externo 15
2006984369843.1Externo 12
2006998469984.1Externo 11
3006971269712.1Interno 12
3006971269712.2Externo 35
3006999569995.1Interno 12
3006999569995.2Externo 35
4007256872568.1Interno 1

7

4007256872568.2Externo 45
4007356873568.1Interno 18

Personal clave

TrabajoNombre
100Peter Cola de algodón
200Juan Smith
300Jane Ée
400Mike Jones

1 ACCEPTED SOLUTION

No parece estar funcionando como esperaba. Pude resolver esto por mi cuenta usando una respuesta a una de mis preguntas anteriores en este foro. Utilizando esta medida y tabla de fechas que va desde hace 5 años hasta hoy:

Empleos activos =
Dónde __lastVisibleDate = MÁXIMO( 'Tabla de fechas'[Fecha] )
Dónde __result =
CALCULAR(
CUENTAS( 'Tabla de trabajo' ),
FILTROS DE CONSERVACIÓN('Tabla de trabajos'[Fecha de inicio] <= __lastVisibleDate ),
FILTROS DE CONSERVACIÓN(
O(
'Tabla de trabajos'[Fecha de finalización] > __lastVisibleDate,
ISBLANK('Tabla de trabajos'[Fecha de finalización])
)
)
)
devolución
__result
Esto me da un recuento de los trabajos que están activos contra una fecha de entrega en esa tabla de fechas. Y si muestro un solo trabajo en una tabla, esto mostrará un 1 si ese trabajo está activo y en blanco si no lo está.
Luego vinculé la tabla de encabezado Record a eso, por lo que también filtra los datos a trabajos con registros en esa fecha.
Luego creé una tabla de resumen a partir de los trabajos y registros por fecha y estado
Luego tengo otras dos medidas:
Esto mira esa tabla de resumen y me da un indicador de si el trabajo existe en esa tabla o no, pero solo mira si el trabajo está activo.
Registro creado =
SI (Y('Tabla'[Empleos activos]=1, NO ( MÁXIMO ( 'Tabla de trabajo'[Número de trabajo] ) ) EN VALORES ( 'Registrar estado por trabajo y día'[Número de trabajo] )),
"N","Y")
Esto me da un recuento de trabajos si un trabajo no tiene registro en una fecha determinada.
Trabajos sin diarios = CALCULAR(countx('Tabla de trabajo',[Registro creado]),filtro('Tabla de trabajo',[Diario creado]="N"))
Luego mostré esto en dos tablas. Uno que me muestra trabajos con registros en la fecha seleccionada y otro que me muestra trabajos que estaban activos en esa fecha y deberían tener un registro pero no lo hacen.
perdón por las redacciones masivas:
CMDATA_0-1635282294089.png

View solution in original post

8 REPLIES 8
Syndicate_Admin
Administrator
Administrator

Hola CMDATA

Gracias a sus datos de ejemplo, pero no entiendo muy bien toda su explicación.

Por lo tanto, he construido el PBIX adjunto para que podamos intentar trabajar juntos para resolver su problema.

Nota He creado una tabla de Calandar y desnormalizado sus tablas en una tabla FACT.

Aprecio que es posible que no desee normalizar sus grandes datos de ERP en la solución final,

pero esta tabla denormalizada ayudará en gran medida a simplificar el problema y comprender mejor sus matemáticas.

Entonces podemos usar relaciones en la solución final.

es decir, ¡vamos a caminar antes de que podamos correr!

Por favor, ¿puede explicar con todo detalle sus matemáticas / lógica para el trabajo 400 para una fecha silcer = 6/9/2021?

¿Cómo se obtiene una respuesta de 1 por favor?

Haga clic aquí para descargar PBIX

¡Muchas gracias por ayudarme con esto!

Esto sale como 1 porque solo hay 1 registro de encabezado para el 6/9/2021 para el trabajo 400. En su mesa plana sería un recuento distinto del registro de encabezado por trabajo.

Hola de nuevo CMDATA

Gracias por la información adicional, creo que ahora lo entiendo.

Haga clic aquí para obtener una solución actualizada

Está casi allí, pero no del todo. La pieza que falta es que la selección de fecha debe ser todos los días y la tabla de informe debe mostrar tanto los trabajos con registros como los trabajos sin registros, siempre que el trabajo sin registros estuviera activo en la fecha seleccionada.

CMDATA_0-1635182513477.png

Hola de nuevo CMSDATA

Haga clic aquí para ver la solución de demostración

He añadido una segmentación de datos de calendario con una relación a la tabla de hechos.

Echa un vistazo a las consultas de edición, las relaciones y las medidas dax.

Todavía no me has dado ningún pulgar hacia arriba. Por favor, hágalo.

Si esta solución soluciona su problema, acepte la solución.

Recuerde que no me pagan, somos voluntarios de la comunidad de BI, así que haga clic en el pulgar hacia arriba para que me tome la molestia de ayudarlo y luego acepte la solución si funciona. ¡¡¡Gracias!!!

Hola. Muchas gracias de nuevo por trabajar en esto. Ese enlace no está funcionando para mí. su enlace anterior funcionó bien.

Lo siento por ese CMDATA, por favor pruebe este enlace ...

Haga clic aquí para descargar una solución de demostración

No parece estar funcionando como esperaba. Pude resolver esto por mi cuenta usando una respuesta a una de mis preguntas anteriores en este foro. Utilizando esta medida y tabla de fechas que va desde hace 5 años hasta hoy:

Empleos activos =
Dónde __lastVisibleDate = MÁXIMO( 'Tabla de fechas'[Fecha] )
Dónde __result =
CALCULAR(
CUENTAS( 'Tabla de trabajo' ),
FILTROS DE CONSERVACIÓN('Tabla de trabajos'[Fecha de inicio] <= __lastVisibleDate ),
FILTROS DE CONSERVACIÓN(
O(
'Tabla de trabajos'[Fecha de finalización] > __lastVisibleDate,
ISBLANK('Tabla de trabajos'[Fecha de finalización])
)
)
)
devolución
__result
Esto me da un recuento de los trabajos que están activos contra una fecha de entrega en esa tabla de fechas. Y si muestro un solo trabajo en una tabla, esto mostrará un 1 si ese trabajo está activo y en blanco si no lo está.
Luego vinculé la tabla de encabezado Record a eso, por lo que también filtra los datos a trabajos con registros en esa fecha.
Luego creé una tabla de resumen a partir de los trabajos y registros por fecha y estado
Luego tengo otras dos medidas:
Esto mira esa tabla de resumen y me da un indicador de si el trabajo existe en esa tabla o no, pero solo mira si el trabajo está activo.
Registro creado =
SI (Y('Tabla'[Empleos activos]=1, NO ( MÁXIMO ( 'Tabla de trabajo'[Número de trabajo] ) ) EN VALORES ( 'Registrar estado por trabajo y día'[Número de trabajo] )),
"N","Y")
Esto me da un recuento de trabajos si un trabajo no tiene registro en una fecha determinada.
Trabajos sin diarios = CALCULAR(countx('Tabla de trabajo',[Registro creado]),filtro('Tabla de trabajo',[Diario creado]="N"))
Luego mostré esto en dos tablas. Uno que me muestra trabajos con registros en la fecha seleccionada y otro que me muestra trabajos que estaban activos en esa fecha y deberían tener un registro pero no lo hacen.
perdón por las redacciones masivas:
CMDATA_0-1635282294089.png

View solution in original post

Helpful resources

Announcements
UG GA Amplification 768x460.png

Launching new user group features

Learn how to create your own user groups today!

November Power BI Update 768x460.png

Check it Out!

Click here to read more about the November 2021 Updates!

M365 768x460.jpg

Microsoft 365 Collaboration Conference | December 7–9, 2021

Join us, in-person, December 7–9 in Las Vegas, for the largest gathering of the Microsoft community in the world.