Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
8 months ago

Promedio de fecha

Estoy intentando calcular una fecha media en Power BI a partir de una columna del tipo Fecha, con el objetivo de devolver un valor de fecha como resultado que pueda usarse en visuales. Intenté usar AVERAGEX directamente en la columna de fecha y luego convertir el resultado de nuevo a una fecha usando una fecha de referencia, pero me encuentro con el siguiente error al mostrar la medida: "Conflicto de tipos de operando: la fecha es incompatible con int". A continuación, la medida que utilicé:

Fecha media =
VAR AvgNum = AVERAGEX( 'Table', [DateColumn] )
RETURN IF( NOT ISBLANK(AvgNum), DATE(1900,1,1) + AvgNum - 2 )

Por lo que entiendo, AVERAGEX espera valores numéricos y no maneja directamente los tipos de fecha . ¿Cuál es el enfoque recomendado en DAX para calcular correctamente un promedio de fechas (fecha → valor numérico → fecha), y cuáles son las mejores prácticas para evitar este tipo de error de desajuste?

6 Replies

  • @akim_no

    Tienes toda la razón en que AVERAGEX solo funciona con valores numéricos, y las fechas en DAX se almacenan internamente como números. El error ocurre porque intentas promediar una columna de fecha directamente sin convertirla primero a su representación numérica.

    Enfoque recomendado

    Convierte la fecha a su equivalente numérico usando VALUE() o INT(), calcula la media y luego la conviertes de nuevo a una fecha usando DATE() o DATEVALUE().
    Aquí está la medida:
    Average Date =
    VAR AvgNum = AVERAGEX('Table', VALUE([DateColumn]))
    RETURN IF(NOT ISBLANK(AvgNum), DATEVALUE(AvgNum))

    Si esta respuesta te ha servido de algo, aceptaría encantado 👍la alegría de ver funcionar una medida DAX a la primera sin necesidad de otro FILTRO.

    Por favor, márcalo como la solución correcta. Ayuda a otros miembros de la comunidad a encontrar su camino más rápido (y les salva de otro bucle 🌀 interminable).

  • En DAX, una fecha es un tipo de dato propio, aunque se almacene internamente como un número. Primero debes convertir explícitamente la fecha a un número y luego convertirlo de nuevo.

    Average Date =
    VAR AvgSerial =
        AVERAGEX (
            'Table',
            VALUE ( 'Table'[DateColumn] )
        )
    RETURN
    IF (
        NOT ISBLANK ( AvgSerial ),
        DATE ( 1900, 1, 1 ) + AvgSerial - 2
    )

  • He probado ambos enfoques sugeridos para calcular una fecha media en Power BI, pero ahora me encuentro con un error diferente:
    "Error convirtiendo el tipo de dato VARCHAR a FLOAT."

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      @akim_no

      ¿Por qué ocurre este error?

      • Hay valores nulos o entradas que no se reconocen como fechas (por ejemplo, "N/A", "-" o texto libre).
      • Cuando usamos VALUE([DateColumn]), DAX intenta convertir a un número pero encuentra texto → error.

      Por favor, revisa tu consulta de energía, pon el tipo de columna en Fecha. Si quieres, por favor danos una captura de pantalla (sin datos restringidos) para mejorar nuestro análisis.

      Si esta respuesta te ha servido de algo, aceptaría encantado 👍la alegría de ver funcionar una medida DAX a la primera sin necesidad de otro FILTRO.

      Por favor, márcalo como la solución correcta. Ayuda a otros miembros de la comunidad a encontrar su camino más rápido (y les salva de otro bucle 🌀 interminable).

  • Sospecho que el problema viene de la columna de origen. Puede haber un problema de calidad o tipo de datos en esta columna. Aunque la columna contiene valores nulos, ya los excluí del cálculo, pero el error sigue ocurriendo. También probé la misma medida en otra columna de fechas donde estoy seguro de que solo se almacenan las fechas válidas, y funcionó correctamente. Esto me lleva a pensar que la columna problemática puede contener valores que no son de fecha o almacenarse como texto en el sistema fuente. Por ello, revisaré los datos fuente para identificar qué está causando este comportamiento.