cancel
Showing results for 
Search instead for 
Did you mean: 

Fabric is Generally Available. Browse Fabric Presentations. Work towards your Fabric certification with the Cloud Skills Challenge.

Reply
Syndicate_Admin
Administrator
Administrator

¿Qué tiene de malo el cálculo AGE usando columnas calculadas aquí?

Hola a todos

Sólo estoy tratando de entender por qué mi fórmula no funcionaría para las fechas de nacimiento que estaban en el mismo mes que hoy, es decir, mayo, sino sólo para fechas que eran más que la fecha de hoy, es decir, > 20 de mayo si consideramos hoy

Estoy usando esto:

Edad (SinRound & 365.25) =
IF(
MES (NOW()) > MES('Búsqueda de clientes'[fecha de nacimiento]),
AÑO (NOW()) - AÑO('Customer Lookup'[birthdate]),
IF(
MES (NOW()) < MES('Búsqueda de clientes'[fecha de nacimiento]),
AÑO (NOW()) - AÑO('Customer Lookup'[birthdate])-1,
IF(
DAY(NOW()) >= DAY('Customer Lookup'[birthdate]),
AÑO (NOW()) - AÑO('Customer Lookup'[birthdate]),
AÑO(NOW()) - AÑO('Búsqueda de clientes'[fecha de nacimiento]-1)
)
)
)
¿Por qué la edad incorrecta en la columna con cruz como se muestra a continuación, donde tengo la fórmula mostrada anteriormente
Gguliani_0-1621509395821.png

2 ACCEPTED SOLUTIONS
Syndicate_Admin
Administrator
Administrator

No hay @Gguliani,

Según su descripción,el ")" en su medida no está en la posición correcta, debe colocarse delante de -1, y el resultado es correcto después de cambiar la posición:

v-yalanwu-msft_0-1621845566636.jpeg

Modifique la medida:

Age (WithoutRound & 365.25) =
IF (
    MONTH ( NOW () ) > MONTH ( 'Customer Lookup'[birthdate] ),
    YEAR ( NOW () ) - YEAR ( 'Customer Lookup'[birthdate] ),
    IF (
        MONTH ( NOW () ) < MONTH ( 'Customer Lookup'[birthdate] ),
        YEAR ( NOW () ) - YEAR ( 'Customer Lookup'[birthdate] ) - 1,
        IF (
            DAY ( NOW () ) >= DAY ( 'Customer Lookup'[birthdate] ),
            YEAR ( NOW () ) - YEAR ( 'Customer Lookup'[birthdate] ),
            YEAR ( NOW () ) - YEAR ( 'Customer Lookup'[birthdate] ) - 1
        )
    )
)

La salida final se muestra a continuación:

v-yalanwu-msft_1-1621845566638.png

Saludos
Apoyo comunitario Team_ Yalan Wu
Si este post ayuda, entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

View solution in original post

Syndicate_Admin
Administrator
Administrator

@v-yalanwu-msft impresionante
Aprendí de su publicación en esta consulta, y etiquetando a todos @Fowmy, @PaulDBrown, @amitchandak - para que pueda compartir mis hallazgos:-
De las 3 maneras (que se muestran a continuación) solía resolver esto usando columnas calculadas, solo la opción 1 dio resultados en la forma en que celebramos los cumpleaños. Es decir, una persona celebra el cumpleaños cuando llega el mismo día cada año y no considera el 29 de febrero como cumpleaños.

1) Uso de IF lógico con día, mes, año, ahora función

Gguliani_0-1621935284867.png

2) Uso de DATEDIFF, PISO & 365.25

Gguliani_2-1621935351961.png

3) Uso de ROUNDDOWN, Hoy & 365.25

Gguliani_3-1621935434546.png

Digo opción 1 es correcta, porque debido a la aproximación traída por 365.25, noté una anomalía con la opción 2 & opción 3 en edad como se resalta a continuación si el cumpleaños de alguien es hoy

Gguliani_4-1621935654085.png

La razón por la que son incorrectas es porque el cumpleaños cuando cae hoy y el año de nacimiento es un año bisiesto- estas fórmulas no ajustan la aproximación presentada por 365.25.

Incluso el método de consulta de potencia sugerido anteriormente por @PaulDBrown no es preciso porque La edad cuando se redondea a Número entero no redondea hacia abajo, pero incluso si redondeamos hacia abajo, la fórmula de lenguaje M de cálculo de edad debe cambiarse en Power Query de 365 a 365,25.

Gguliani_0-1621938803554.png

Entonces, el método power query coincidiría con lo que @Fowmy &@amitchandak sugerido, pero incluso esos no son 100% correctos si su cumpleaños cae en un año bisiesto y es hoy.
Me referí a este enlace por alguien- si quieres aprender más- https://blog.magnetismsolutions.com/blog/colinmaitland/2019/10/07/how-to-accurately-calculate-ages-i...
Lo que me di cuenta después de pasar por este enlace & función YEARFRAC es que nuestros métodos pueden ser correctos a nuestra manera, pero no técnicamente preciso - ni siquiera el sugerido por YEARFRAC con cualquiera de las bases como 1 (real) o 3 (365)
Pero, si usamos 365.2422 en lugar de 365.25,todos nuestros valores coincidirán con diferentes métodos y pueden ser más precisos sin anomalías.
Vea cómo coinciden los valores para todos los casos después de eso

Gguliani_0-1621941006744.png

¡Espero que ayude! 😊

Gracias, Gaurav

View solution in original post

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

@v-yalanwu-msft impresionante
Aprendí de su publicación en esta consulta, y etiquetando a todos @Fowmy, @PaulDBrown, @amitchandak - para que pueda compartir mis hallazgos:-
De las 3 maneras (que se muestran a continuación) solía resolver esto usando columnas calculadas, solo la opción 1 dio resultados en la forma en que celebramos los cumpleaños. Es decir, una persona celebra el cumpleaños cuando llega el mismo día cada año y no considera el 29 de febrero como cumpleaños.

1) Uso de IF lógico con día, mes, año, ahora función

Gguliani_0-1621935284867.png

2) Uso de DATEDIFF, PISO & 365.25

Gguliani_2-1621935351961.png

3) Uso de ROUNDDOWN, Hoy & 365.25

Gguliani_3-1621935434546.png

Digo opción 1 es correcta, porque debido a la aproximación traída por 365.25, noté una anomalía con la opción 2 & opción 3 en edad como se resalta a continuación si el cumpleaños de alguien es hoy

Gguliani_4-1621935654085.png

La razón por la que son incorrectas es porque el cumpleaños cuando cae hoy y el año de nacimiento es un año bisiesto- estas fórmulas no ajustan la aproximación presentada por 365.25.

Incluso el método de consulta de potencia sugerido anteriormente por @PaulDBrown no es preciso porque La edad cuando se redondea a Número entero no redondea hacia abajo, pero incluso si redondeamos hacia abajo, la fórmula de lenguaje M de cálculo de edad debe cambiarse en Power Query de 365 a 365,25.

Gguliani_0-1621938803554.png

Entonces, el método power query coincidiría con lo que @Fowmy &@amitchandak sugerido, pero incluso esos no son 100% correctos si su cumpleaños cae en un año bisiesto y es hoy.
Me referí a este enlace por alguien- si quieres aprender más- https://blog.magnetismsolutions.com/blog/colinmaitland/2019/10/07/how-to-accurately-calculate-ages-i...
Lo que me di cuenta después de pasar por este enlace & función YEARFRAC es que nuestros métodos pueden ser correctos a nuestra manera, pero no técnicamente preciso - ni siquiera el sugerido por YEARFRAC con cualquiera de las bases como 1 (real) o 3 (365)
Pero, si usamos 365.2422 en lugar de 365.25,todos nuestros valores coincidirán con diferentes métodos y pueden ser más precisos sin anomalías.
Vea cómo coinciden los valores para todos los casos después de eso

Gguliani_0-1621941006744.png

¡Espero que ayude! 😊

Gracias, Gaurav

Syndicate_Admin
Administrator
Administrator

No hay @Gguliani,

Según su descripción,el ")" en su medida no está en la posición correcta, debe colocarse delante de -1, y el resultado es correcto después de cambiar la posición:

v-yalanwu-msft_0-1621845566636.jpeg

Modifique la medida:

Age (WithoutRound & 365.25) =
IF (
    MONTH ( NOW () ) > MONTH ( 'Customer Lookup'[birthdate] ),
    YEAR ( NOW () ) - YEAR ( 'Customer Lookup'[birthdate] ),
    IF (
        MONTH ( NOW () ) < MONTH ( 'Customer Lookup'[birthdate] ),
        YEAR ( NOW () ) - YEAR ( 'Customer Lookup'[birthdate] ) - 1,
        IF (
            DAY ( NOW () ) >= DAY ( 'Customer Lookup'[birthdate] ),
            YEAR ( NOW () ) - YEAR ( 'Customer Lookup'[birthdate] ),
            YEAR ( NOW () ) - YEAR ( 'Customer Lookup'[birthdate] ) - 1
        )
    )
)

La salida final se muestra a continuación:

v-yalanwu-msft_1-1621845566638.png

Saludos
Apoyo comunitario Team_ Yalan Wu
Si este post ayuda, entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Syndicate_Admin
Administrator
Administrator

@Fowmy , @PaulDBrown

Gracias por mostrarme otras maneras, también estoy interesado en entender por qué mi enfoque no funcionó.

Simplemente no funcionó para el mes de hoy y para las fechas de nacimiento más grandes que hoy. Por favor, sugiera

Syndicate_Admin
Administrator
Administrator

@Gguliani

Agregue la siguiente columna para Edad:

Age = INT((TODAY() - Table[birthdate])/365.25)

Fowmy_0-1621511851211.png



Syndicate_Admin
Administrator
Administrator

@Gguliani

Por si acaso, tiene una opción para calcular la edad en Power Query si eso ayuda:

Age.jpg

Syndicate_Admin
Administrator
Administrator

@Gguliani, ¿por qué no estás usando datediff

nueva columna = datediff([birthdate], today(), año)

o

nueva columna = datediff([birthdate], today(), year) +1

@amitchandak Esa cosa datediff funcionó para mí también, comprobar la columna de tick verde en la captura de pantalla anterior.

Quería saber por qué mi enfoque no funcionó ya que no estaba al tanto de DATEDIFF cuando probé eso.

Pensé que habría una razón para por qué esa fórmula no funcionó sólo para los meses de mayo, donde las fechas eran mayores que la fecha de hoy

Helpful resources

Announcements
PBI November 2023 Update Carousel

Power BI Monthly Update - November 2023

Check out the November 2023 Power BI update to learn about new features.

Community News

Fabric Community News unified experience

Read the latest Fabric Community announcements, including updates on Power BI, Synapse, Data Factory and Data Activator.

Power BI Fabric Summit Carousel

The largest Power BI and Fabric virtual conference

130+ sessions, 130+ speakers, Product managers, MVPs, and experts. All about Power BI and Fabric. Attend online or watch the recordings.

Top Solution Authors