Forum Discussion
Filtro de fecha
¡Hola a todos! Tengo una tabla con diferentes sprints con su propia estrella y fecha de finalización. Quiero filtrar la tabla así: si elijo diciembre de 2021 quiero que muestre todos los sprints que comenzaron o terminaron en este período. ¿Cómo puedo hacerlo?
Esta es la tabla:
| Carrera | Fecha de inicio | Fecha final |
| 1 | 2021/12/31 | 2022/01/15 |
| 2 | 2021/07/31 | 2021/12/15 |
| 3 | 2021/02/20 | 2021/04/12 |
| 4 | 2021/12/07 | 2021/12/31 |
Este es el resultado que estoy buscando (filtrado diciembre 2021) El filtro tiene que tener en cuenta tanto la fecha de inicio como la de finalización
| Carrera | Fecha de inicio | Fecha final |
| 1 | 2021/12/31 | 2022/01/15 |
| 2 | 2021/07/31 | 2021/12/15 |
| 4 | 2021/12/07 | 2021/12/31 |
Gracias por su apoyo.
Pedro
Hola Pedro echa un vistazo a esta demo.
Utilicé una tabla de fechas desconectada.
Calendar = ADDCOLUMNS ( CALENDAR ( DATE (2020, 1, 1), DATE (2022, 12, 31) ), "Month Year", DATE ( YEAR([Date]), MONTH([Date]),1) //Format as MMMM YYYY )Establezca ambos como tipo de fecha y luego establezca el formato de Mes Año en MMMM AAAA
Se ha creado una medida en la tabla Sprint:
Show Row = VAR DatesInContext = VALUES ( 'Calendar'[Date] ) VAR StartDates = TREATAS ( VALUES ( Sprint[Start date] ), 'Calendar'[Date] ) VAR EndDates = TREATAS ( VALUES ( Sprint[End Date] ), 'Calendar'[Date] ) VAR AllDates = UNION (StartDates, EndDates) VAR CountDateIntersect = COUNTROWS( INTERSECT ( DatesInContext, AllDates ) ) VAR Result = IF ( CountDateIntersect > 0, 1, 0 ) RETURN ResultSe creó un objeto visual de tabla y se agregó la medida como un filtro de nivel visual:
11 Replies
- Syndicate_Admin
Administrator
Hola Pedro echa un vistazo a esta demo.
Utilicé una tabla de fechas desconectada.
Calendar = ADDCOLUMNS ( CALENDAR ( DATE (2020, 1, 1), DATE (2022, 12, 31) ), "Month Year", DATE ( YEAR([Date]), MONTH([Date]),1) //Format as MMMM YYYY )Establezca ambos como tipo de fecha y luego establezca el formato de Mes Año en MMMM AAAA
Se ha creado una medida en la tabla Sprint:
Show Row = VAR DatesInContext = VALUES ( 'Calendar'[Date] ) VAR StartDates = TREATAS ( VALUES ( Sprint[Start date] ), 'Calendar'[Date] ) VAR EndDates = TREATAS ( VALUES ( Sprint[End Date] ), 'Calendar'[Date] ) VAR AllDates = UNION (StartDates, EndDates) VAR CountDateIntersect = COUNTROWS( INTERSECT ( DatesInContext, AllDates ) ) VAR Result = IF ( CountDateIntersect > 0, 1, 0 ) RETURN ResultSe creó un objeto visual de tabla y se agregó la medida como un filtro de nivel visual:
- Syndicate_Admin
Administrator
@pva gran solución de @bcdobbs pero también puede probar el
Filter = VAR __minDate = MIN ( 'Calendar'[Date] ) VAR __maxDate = MAX ( 'Calendar'[Date] ) RETURN CALCULATE ( COUNTROWS ( 'Table' ), ( 'Table'[Start date] >= __minDate && 'Table'[Start date] <= __maxDate ) || ( 'Table'[End date] >= __minDate && 'Table'[End date] <= __maxDate ) )✨ Síguenos en LinkedIn (en inglés) y
a nuestro YouTube (en inglés) canal
Más información sobre el formato condicional en Microsoft Reactor
Mi última entrada de blog El poder de usar grupos de cálculo con relaciones inactivas (Parte 1) (perytus.com) Yo lo haría ❤ Elogios si mi solución ayudó. 👉 Si puede dedicar tiempo a publicar la pregunta, también puede hacer esfuerzos para felicitar a quien ayudó a resolver su problema. ¡Es una muestra de agradecimiento!
⚡ Visítenos en https://perytus.com, su ventanilla única para proyectos/formación/consultoría relacionados con Power BI.
siguiente medida y, a continuación, utilice esta medida como filtro de nivel visual donde el valor > = 1
- Syndicate_Admin
Administrator
Buena solución @parry2k!
¡Creo que el tuyo es potencialmente más rápido! Tentado a encontrar/generar un gran conjunto de datos y probar.- Syndicate_Admin
Administrator
Sospecho que es totalmente académico (pero tenía ganas de nerding) a menos que el conjunto de datos sea masivo pero con una tabla aleatoria de 10,000,000 de filas:
Mi DAX original funcionaba en 9674 ms, @parry2k funcionaba en 10267 ms, lo que contaría como prácticamente idéntico en términos de experiencia de usuario.Lo mejor que he podido lograr es la siguiente modificación de mi código que lo recorta a 8491 ms.
Show Row = VAR StartDates = TREATAS ( VALUES ( BigSprint[Start Date] ), 'Calendar'[Date] ) VAR EndDates = TREATAS ( VALUES ( BigSprint[End Date] ), 'Calendar'[Date] ) VAR AllDates = DISTINCT ( UNION ( StartDates, EndDates ) ) VAR Result = CALCULATE ( INT ( NOT ( ISEMPTY ( 'Calendar' ) ) ), KEEPFILTERS( AllDates ) ) RETURN Result
- Syndicate_Admin
Administrator
- Syndicate_Admin
Administrator
@bcdobbs Impresionante para hacer la prueba de esfuerzo, si puede compartir el gran conjunto de datos que probó, tengo más ideas para mejorar el rendimiento. ¡Buena!
- Syndicate_Admin
Administrator
¡Adelante! El conjunto de datos no es nada muy elegante:
BigSprint = VAR BaseTable = GENERATESERIES( 1, 10000000, 1 ) RETURN GENERATE ( BaseTable, VAR BaseId = [Value] VAR StartDate = DATE (2020, RANDBETWEEN( 1, 12 ), RANDBETWEEN( 1, 28 ) ) VAR EndDate = StartDate + RANDBETWEEN(2,60) RETURN ROW ( "SprintId", BaseId, "Start Date", StartDate, "End Date", EndDate ) )
Archivo disponible aquí.- Syndicate_Admin
Administrator
¡Lo rompí! Buena lección para hacer que el modelo de datos haga el trabajo en lugar del DAX. El servicio de análisis nunca deja de sorprenderme...
Tomó la misma tabla base con 10000000 filas y la amplió hasta el día granualaridad. Por ejemplo, cada SprintId tenía una fila por día. Podría hacerlo en powerquery o ETL pero utilicé generar en DAX:
SprintExpanded = GENERATE ( BigSprint, DATESBETWEEN('Calendar'[Date], BigSprint[Start Date], BigSprint[End Date] ) )(Mi computadora portátil tardó una buena cantidad de tiempo en crujir y la tabla resultante podría hacer con las columnas ordenadas)
A continuación, puede aprovechar una relación normal:No hay necesidad de un filtro de nivel visual y estoy obteniendo un orden de magnitud más pequeño. 695 ms
Lo siento @pva el código inicial de mí o de @parry2k está absolutamente bien. Esto fue simplemente divertido.
- Syndicate_Admin
Administrator
@pva intente usar una medida como esta. @bcdobbs usado su pbix
Measure = VAR _yr = VALUES ( _calendar[Year] ) VAR _mo = VALUES ( _calendar[Month] ) VAR _ret = CALCULATE ( MAX ( Sprint[Sprint] ), FILTER ( Sprint, ( YEAR ( Sprint[Start date] ) IN _yr || YEAR ( ( Sprint[End date] ) IN _yr ) ) && ( MONTH ( Sprint[Start date] ) IN _mo || MONTH ( Sprint[End Date] ) IN _mo ) ) ) RETURN _ret
- Syndicate_Admin
Administrator
Tengo un requisito similar, sin embargo, mis datos contienen 8 columnas de fecha. Necesito filtrar la fecha a los registros en función de la selección de la fecha y mostrar los registros relacionados con la fecha filtrada de todas las columnas de fecha. Tenga en cuenta que todas las fechas estarán allí. Algunas fechas disponibles, otras en blanco. Cualquiera que sea la fecha disponible, necesitamos obtener registros.
Las columnas de datos son las siguientes, ya que no puedo pegar los datos, ya que está dando un error.
Nombre de la tarea, Fecha asignada, Fecha de inicio planificada, Fecha de finalización planificada, Fecha de inicio real, Fecha de finalización real, Fecha de aprobación inicial, Fecha de aprobación técnica, Fecha de autorización de TI, Fecha de aprobación final.
Si selecciono el último 1 mes, deberían mostrarse todos los registros que caen en un mes, independientemente de las columnas de fecha. Por favor, ayuda.
Probé la tabla de calendario y conecté la fecha a la fecha de inicio planificada. Sin embargo, cuando filtro, solo tiene en cuenta los registros dentro de la selección de la fecha de inicio planificada y no muestra los registros que tienen datos dentro de la fecha seleccionada.
Se agradece cualquier apoyo.
Gracias de antemano.