Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!The Power BI Data Visualization World Championships is back! It's time to submit your entry. Live now!
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:
Solved! Go to Solution.
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.
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.
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!
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.
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.
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...