Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

The Power BI Data Visualization World Championships is back! It's time to submit your entry. Live now!

Reply
Syndicate_Admin
Administrator
Administrator

[Inglés] DATEDIFF siempre calcula un año de más

Hola a todos

Tengo el siguiente problema.

Tengo una tabla en la que hay una columna con la fecha de contratación y la fecha de salida (si está disponible, de lo contrario vacía) para cada empleado.

Ahora debería mostrarme la duración como un número entero en una columna calculada. Pero aquí está el problema de que siempre tarda un año de más. En otras palabras, un empleado ha estado allí durante 103 meses, es decir, unos 8,6 años, entonces debería mostrarme como una duración de 8, porque aún no ha completado el noveno año.

Tengo el siguiente código en las dos columnas calculadas:

El año pasado =
VAR __MaxYearHire = AÑO(MAXX(TODO('tbl_Employees'), 'tbl_Employees'[Fecha de contratación]))
VAR __MaxYearExit = AÑO(MAXX(TODO('tbl_Employees'), 'tbl_Employees'[Fecha de salida]))
VAR __LastYear = MÁXIMO(__MaxYearHire, __MaxYearExit)
VAR __LastDate = FECHA(__LastYear, 12, 31)
DEVOLUCIÓN
__LastYear
y
Duración del empleo =
VAR __MaxYearHire = AÑO(MAXX(TODO('tbl_Employees'), 'tbl_Employees'[Fecha de contratación]))
VAR __MaxYearExit = AÑO(MAXX(TODO('tbl_Employees'), 'tbl_Employees'[Fecha de salida]))
VAR __LastYear = MÁXIMO(__MaxYearHire, __MaxYearExit)
VAR __LastDate = FECHA(__LastYear, 12, 31)
DEVOLUCIÓN
DIFERENCIA DE FECHA(
'tbl_Employees'[Fecha de contratación],
SI(EN BLANCO('tbl_Employees'[Fecha de salida]), __LastDate, 'tbl_Employees'[Fecha de salida]),
AÑO
)
¿Alguien tiene idea de dónde está el error?
1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Hola @PleinCiel,

Disculpe, pero tuve que enviar la traducción a Alemania. Por favor, ignore los errores ortográficos.

Simulé una situación aquí con los datos e ingresé lo necesario en una columna calculada para que fuera más fácil de entender. Por favor, dígame si está utilizando este método o un método convencional.

zanqueta001_0-1762860665691.png

Employment Duration (Years) = 
VAR StartDate = 'tbl_Employees'[Hire Date]
VAR EndDate =
    IF(
        ISBLANK('tbl_Employees'[Exit Date]),
        DATE(YEAR(TODAY()), 12, 31),
        'tbl_Employees'[Exit Date]
    )
RETURN
INT(DATEDIFF(StartDate, EndDate, MONTH) / 12)



tbl_Employees:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("PY5BCsIwEEWvErKuZCZpbbuU7kRBdBm6CDSLQEgkrV7Io3gxZ6K4fMObx7dWomzkITlxdmULaSXCToFRGrAjAFSoCbSRc2OlptMxv19Z3EJ8uq8APdsDQXrEWD1DcA0bZX1aPFcpATtAgUBgQCFyVVe7pdPFLyWLKa9brdKGkas9vw4K6oa22jxrciU6ccr3X1vBnu3xv2H+AA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [EmployeelD = _t, Nome = _t, #"Hire Date" = _t, #"Exit Date" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Hire Date", type date}, {"Exit Date", type date}})
in
    #"Changed Type"

Si esta respuesta resolvió su problema, márquela como correcta para ayudar a otros miembros de la comunidad.

View solution in original post

4 REPLIES 4
Syndicate_Admin
Administrator
Administrator

Hola @PleinCiel,

He usado el traductor de Google para responder a su consulta, ya que no sé alemán, cualquier error ortográfico debe ignorarse,

El error en el cálculo anual se debe a que la diferencia se calcula en años y no en días.

Vea el siguiente ejemplo:
DATEDIFF("2016-12-31", "2017-01-01", AÑO)
En este ejemplo, DAX devuelve un año a pesar de un día anterior porque el año ha cambiado. Pruebe la siguiente expresión DAX:Duración del empleo =
VAR HireDate = 'tbl_Employees'[Fecha de contratación]
Fecha de salida del VAR =
COALESCE('tbl_Employees'[Fecha de salida], TODAY())
VAR FullYears = DATEDIFF(HireDate, ExitDate, YEAR)
Aniversario del VAResteAño =
DATE(YEAR(ExitDate), MONTH(HireDate), DAY(HireDate))
DEVOLUCIÓN
IF(Fecha de salida < AniversarioEste año, Años completos - 1, Años completos)

🌟 ¡Espero que esta solución te ayude a desbloquear tu potencial de Power BI! Si te ha resultado útil, haz clic en "Marcar como solución" para guiar a otros hacia las respuestas que necesitan.
💡 ¿Te encanta el esfuerzo? ¡Deja los elogios! Su aprecio alimenta el espíritu comunitario y la innovación.
🎖 Como orgulloso superusuario y socio de Microsoft, estamos aquí para potenciar su recorrido de datos y la comunidad de Power BI en general.
🔗 ¿Tienes curiosidad por explorar más? [Descúbrelo aquí].
¡Sigamos construyendo juntos soluciones más inteligentes!

Syndicate_Admin
Administrator
Administrator

Hola @PleinCiel,

Disculpe, pero tuve que enviar la traducción a Alemania. Por favor, ignore los errores ortográficos.

Simulé una situación aquí con los datos e ingresé lo necesario en una columna calculada para que fuera más fácil de entender. Por favor, dígame si está utilizando este método o un método convencional.

zanqueta001_0-1762860665691.png

Employment Duration (Years) = 
VAR StartDate = 'tbl_Employees'[Hire Date]
VAR EndDate =
    IF(
        ISBLANK('tbl_Employees'[Exit Date]),
        DATE(YEAR(TODAY()), 12, 31),
        'tbl_Employees'[Exit Date]
    )
RETURN
INT(DATEDIFF(StartDate, EndDate, MONTH) / 12)



tbl_Employees:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("PY5BCsIwEEWvErKuZCZpbbuU7kRBdBm6CDSLQEgkrV7Io3gxZ6K4fMObx7dWomzkITlxdmULaSXCToFRGrAjAFSoCbSRc2OlptMxv19Z3EJ8uq8APdsDQXrEWD1DcA0bZX1aPFcpATtAgUBgQCFyVVe7pdPFLyWLKa9brdKGkas9vw4K6oa22jxrciU6ccr3X1vBnu3xv2H+AA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [EmployeelD = _t, Nome = _t, #"Hire Date" = _t, #"Exit Date" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Hire Date", type date}, {"Exit Date", type date}})
in
    #"Changed Type"

Si esta respuesta resolvió su problema, márquela como correcta para ayudar a otros miembros de la comunidad.

Gracias por la ayuda.

Syndicate_Admin
Administrator
Administrator

Hola @PleinCiel ,

Para entender esto exactamente, sería interesante saber qué tipo de datos se asigna a las columnas. DATEDIFF devuelve un número decimal. En algún momento, aparentemente hay un redondeo. Para asegurarse de que suceda lo deseado, tendría sentido hacer un ajuste correspondiente directamente en la fórmula. Eso probablemente estaría en INT () alrededor de la expresión DATEDIFF. Esto deja en claro que siempre debe redondear hacia abajo al número entero más cercano.

Espero haber entendido el problema correctamente y haber podido ayudar...

Helpful resources

Announcements
FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.