Foro Empleos Academia Blog
Recursos
  • Ejemplos de dashboards
  • DatData Games
  • Alumnos destacados
  • Torneos pasados
Search Icon Iniciar sesión Inscribirme
Back arrow

Medida DAX

Avatar por defecto

Roxana Sc

Estudiante

•

hace 14 horas

Buenas, 

No estoy encontrando la logica para poder resolver desde dax el siguiente caso:

Tengo una tabla transaccional que guarda todas las ejecuciones que se realizan en una cierta fecha por "Activo", y otros atributos importantes como es el "Estandar" y "Complejo". Ejemplo de la tabla inicial:

   Complejo  | Activo  | FechaEjecucion  | TotalReglas  | Estandar
 | CI_1  |  TEN  | 31/07/2025 0:00  | 370  | ST
 | CI_1  | TEN  | 30/06/2025 0:00  | 740  | ST
 | CI_1  | RSE  | 30/06/2025 0:00  | 378  | ST
 | CI_1  | SLR  | 30/06/2025 0:00  | 370  | ST
 | CI_1  | EPV  | 30/06/2024 0:00  | 370  | ST
 | CI_1  | TEN  | 31/12/2023 0:00  | 370  | ST
 | CI_7  | LTP  | 31/12/2023 0:00  | 370  | ST

La logica que necesito es que se quede con la ultima ejecucion y en caso de que ese activo no se encuentre en la ultima ejecucion traer el anterior a la ultima fecha. La tabla de salida deberia ser:

     | Complejo  | Activo  | FechaEjecucion  | TotalReglas  | Estandar
 | CI_1  | TEN  | 31/07/2025 0:00  | 370  | ST
 | CI_1  | RSE  | 30/06/2025 0:00  | 378  | ST
 | CI_1  | SLR  | 30/06/2025 0:00  | 370  | ST
 | CI_1  | EPV  | 30/06/2024 0:00  | 370  | ST
 |   |   |   | 1488  | 



Aqui es donde me sugen muchisimas dudas, intente crear una tabla nueva que solo tenga agrupado el max de cada activo por fecha pero tampoco resulta ya que me trae todas las fechas de ejecuciones 

Ultima_ejecuciones test = 
SUMMARIZECOLUMNS(
    Ejecuciones[Estandar],
    Ejecuciones[Complejo],
    Ejecuciones_OT[Activo],
    "FechaMax", MAX(Ejecuciones_OT[FechaEjecucion]),
    "TotalReglas",
        COUNTROWS(
            FILTER(
                Ejecuciones,
                Ejecuciones[FechaEjecucion] = MAX(Ejecuciones[FechaEjecucion])
            )
        )
)


Como dato extra el dataset tiene muchisimos registros por lo que generar una medida muy compleja demoraria mucho la carga. Podran ayudarme a replantearme la solucion con dax ? 
Muchas gracias!!

DAX

0 Votos
1
Respuestas
Respuestas
Avatar por defecto

Asistente Virtual Datdata

Estudiante

•

respondió hace 14 horas

🤖 Esta respuesta fue generada automáticamente por nuestra inteligencia artificial local. Es un intento único de ayudarte al instante. No responderá a mensajes posteriores en este hilo.

Hola, ¡gracias por tu consulta!

Entiendo tu desafío al intentar obtener la última ejecución por "Activo", o la anterior a la última si el activo no está presente en la fecha más reciente. La lógica que buscas se puede lograr con DAX, pero la clave está en utilizar las funciones adecuadas para navegar por el contexto de fechas y los filtros.

El enfoque de crear una tabla calculada con `SUMMARIZECOLUMNS` es un buen punto de partida, pero la forma en que se calcula el `TotalReglas` allí es un poco complicada y probablemente no te dé el resultado esperado para todas las condiciones.

Para abordar esto de manera eficiente, especialmente considerando el gran volumen de datos, te sugiero un enfoque basado en medidas y, posiblemente, una tabla marcada (marked table) si la performance es un problema crítico. Aquí te presento una posible estrategia:

Estrategia con Medidas DAX:

1. Identificar la Última Fecha General: Primero, necesitas saber cuál es la fecha de ejecución más reciente en todo tu conjunto de datos. Puedes crear una medida para esto:

ÚltimaFechaGeneral = MAX(Ejecuciones[FechaEjecucion])

2. Medida para el Total de Reglas de la Última Ejecución por Activo: Esta medida buscará la última fecha para cada activo y luego obtendrá el `TotalReglas` correspondiente. Si para un activo no hay registro en la última fecha general, necesitamos buscar la anterior.

Este tipo de lógica puede ser compleja de implementar eficientemente con una sola medida que se aplique a todas las filas de una tabla de salida. A menudo, para obtener una tabla de salida filtrada de esta manera, se usa una combinación de Power Query y DAX, o se crea una tabla calculada con lógica DAX más avanzada.

Enfoque recomendado con una Tabla Calculada (con precauciones por el volumen de datos):

Podrías intentar una tabla calculada, pero hay que ser cuidadoso con el rendimiento. Una forma sería:

  1. Crear una Tabla Calculada para la Última Ejecución: Esta tabla te devolvería la fila con la última fecha de ejecución para cada combinación de `Activo` y `Complejo`.
  2. Calcular la Fecha Anterior: Para los activos que no tienen registro en la última fecha general, necesitarías encontrar la fecha anterior disponible para ese activo.

La lógica para esto en DAX puede ser bastante elaborada, y dado el tamaño de tus datos, una solución basada en Power Query para pre-filtrar y transformar los datos antes de cargarlos en el modelo podría ser más eficiente.

Sugerencia de enfoque en Power Query (antes de DAX):

Una forma eficiente de preparar tus datos es usar Power Query. Podrías:

  • Agrupar por `Activo` y `Complejo`.
  • Para cada grupo, encontrar la fecha máxima (`FechaEjecucion`).
  • Luego, para cada `Activo` y `Complejo`, seleccionar la fila correspondiente a esa fecha máxima.
  • Si un `Activo` no aparece en la fecha máxima general, podrías necesitar una lógica de búsqueda de la fecha anterior, lo cual puede ser un poco más complejo en Power Query pero factible.

Recomendación para DAX:

Considerando el volumen de datos y la complejidad, te sugiero enfocar el pre-procesamiento en Power Query para tener una tabla más limpia, y luego usar DAX para los agregados necesarios (como el total de reglas de la última ejecución).

Si buscas una solución específica en DAX para obtener tu tabla de salida deseada, podrías necesitar una combinación de `CALCULATE`, `LASTDATE`, `FILTER`, y `ALLSELECTED` o `ALLEXCEPT`, pero implementar esto eficientemente para un gran dataset requiere una cuidadosa optimización.

Te sugiero revisar los siguientes recursos que te ayudarán a entender mejor las funciones DAX relevantes para este tipo de escenarios, como el manejo de fechas y filtros:

Te sugiero visitar:

https://www.datdata.com/cursos/int101/clases/RyWfmo

https://www.datdata.com/cursos/int101/clases/BTE63q

- Asistente Virtual de Datdata

0 Votos
Es necesario estar inscrito para dejar tu duda, comentario y/o respuesta

Sobre el alumno

RoxanaSc461

Roxana Sc

Cursos completados

Imagen del curso Introducción Práctica a Power BI

Más preguntas sobre el tema

La función CALCULATE no reconoce mis columnas de talbla.

manejorgepbi

medidas

Esme

conteo de clientes hasta selecciòn de segmentador. (Nivel novato)

Luiscarlos619

uso de dax formatter

MALANIS

¿Cuál es mejor, crear la tabla calendario con DAX o con M?

luisaopc

Recursos
  • Foro
  • Inscribirse
  • Blog
  • Ejemplos de dashboards
Cursos
  • Aprende Power BI con Proyectos
  • Análisis de Datos con Power BI y Excel
  • Especialización en Power Query
  • Certificación de Power BI
  • Tu Portafolio de Dashboards
Legales
  • Términos del servicio
  • Política de privacidad
  • Política de cookies
  • Contacto
  • Acerca
Canal de YouTube de datdata Cuenta de Linkedin de datdata Cuenta de Instagram de datdata Página de Facebook de datdata Cuenta de TikTok de datdata
© 2025 © datdata - Todos los derechos reservados

Confirmar eliminación

Para eliminar esta participación, por favor ingrese su contraseña.