Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
4 years ago
Solved

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:

CarreraFecha de inicioFecha final
12021/12/312022/01/15
22021/07/312021/12/15
32021/02/202021/04/12
42021/12/072021/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

CarreraFecha de inicioFecha final
12021/12/312022/01/15
22021/07/312021/12/15
42021/12/072021/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 Result

    Se creó un objeto visual de tabla y se agregó la medida como un filtro de nivel visual:

    bcdobbs_0-1641752466503.png

11 Replies

  • 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 Result

    Se creó un objeto visual de tabla y se agregó la medida como un filtro de nivel visual:

    bcdobbs_0-1641752466503.png

  • @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 YouTube.gif 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's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      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's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        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

  • @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's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      ¡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's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        ¡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:

        bcdobbs_0-1641766221669.png

        No hay necesidad de un filtro de nivel visual y estoy obteniendo un orden de magnitud más pequeño. 695 ms

        bcdobbs_1-1641766257739.png

        Lo siento @pva el código inicial de mí o de @parry2k está absolutamente bien. Esto fue simplemente divertido.

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      @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

  • 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.