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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Contar dinámicamente a distintos individuos en grupos de edad

Hola y gracias de antemano por su ayuda. Estoy buscando una manera de poder obtener dinámicamente el recuento de distintos individuos por grupos de edad (<18, 18-64, 65+) en función de su edad en su fecha de servicio más reciente dentro de un período de tiempo seleccionado en una segmentación.

Idealmente, el recuento de las categorías de edad debe ser un recuento distinto de 'ServiceTable'[ID].

Tengo dos tablas con la siguiente información (más una tabla de calendario basada en la fecha de servicio en ServiceTable):

1. Tabla de servicio

IDENTIFICACIÓNFecha de servicio
A1/1/2021
A2/1/2021
A5/1/2021
B2/1/2021
B3/1/2021
C3/1/2021
C4/1/2021
C5/1/2021
D2/1/2021

2. Tabla de clientes

IDENTIFICACIÓNEDAD
A4/1/2003
B2/15/1956
C3/15/1956
D1/1/1981

(en este ejemplo, la persona A cumple 18 años en 2021, las personas B y C cumplen 65 años en 2021, la persona D cumple 40 años en 2021)

Si una segmentación se estableciera para el 1/3/21 - el 1/5/21, esperaría ver lo siguiente:

AgeCatContar
<180
18-641
65 +

2

(ID A = 18-64, ID B&C = 65+)

Para una segmentación de datos establecida entre 1/1/21 y 3/1/21:

AgeCatContar
<181(Identificación A)
18-642(ID C,D)
65 +1(Identificación B)

Y para una cortadora 1/1/21 - 5/1/21:

AgeCatContar
<180
18-642(ID A,D)
65 +2(ID B,C)
3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

¡Gracias, @v-kaiyue-msft ! ¿Podrías ayudarme a entender lo que estás haciendo? Parece que está creando una nueva tabla que une ID + DOB a SD en ID = ID2; y luego atribuir los meses a las diferentes categorías de edad; Luego, para cada categoría de edad, está contando el número de personas que caen en esa categoría.

Sin embargo, no estoy seguro de a qué se supone que hace referencia 'Table'[Value], pero me está dando un error. También me pregunto cómo esto "sabe" seleccionar la fecha de servicio más reciente.

¡Agradezco su ayuda!

Hola @user16940356 ,

Lamento haber olvidado mencionar en mi respuesta anterior que la tabla es la tabla de cálculo creada que contiene datos para diferentes categorías de edad con el fin de contar diferentes clientes.

vkaiyuemsft_0-1714984271877.png

CROSSJOIN (
SELECTCOLUMNS (
'ClientTable'.

"_DOB", 'ClientTable'[DOB]
),
SELECTCOLUMNS (
'ServiceTable'.

"_SD", 'ServiceTable'[SERVICE DATE]
)
)


Esta expresión anterior devuelve el producto cartesiano de todas las filas de ClientTable y ServiceTable. Las columnas de la tabla resultante son todas las columnas de ambas tablas.

vkaiyuemsft_1-1714984306012.png

El propósito de agregar un filtro a la capa externa es permitir que las dos tablas se conecten por ID, de forma similar a una clave principal.

vkaiyuemsft_2-1714984316729.png

La segmentación contiene la fecha de serviceTable y su filtrado afecta al resultado de la combinación de las dos tablas, lo que a su vez afecta al recuento general.

Aquí está la documentación de la función, espero que pueda ayudarte:
Función CROSSJOIN (DAX) - DAX | Microsoft Learn
Función SUMMARIZE (DAX) - DAX | Microsoft Learn
Función SELECTCOLUMNS (DAX) - DAX | Microsoft Learn

Si su período actual no se refiere a esto, por favor aclárelo en una respuesta de seguimiento.

Saludos

Clara Gong

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Syndicate_Admin
Administrator
Administrator

Hola @user16940356 ,

Cree una medida, escriba una expresión dax.

MEASURE = 
VAR _newvalue =
    SELECTEDVALUE ( 'Table'[Value] )
VAR _vtable =
    SUMMARIZE (
        SELECTCOLUMNS (
            FILTER (
                CROSSJOIN (
                    SELECTCOLUMNS (
                        'ClientTable',
                        "_ID", 'ClientTable'[ID],
                        "_DOB", 'ClientTable'[DOB]
                    ),
                    SELECTCOLUMNS (
                        'ServiceTable',
                        "_ID2", 'ServiceTable'[ID],
                        "_SD", 'ServiceTable'[Service Date]
                    )
                ),
                [_ID] = [_ID2]
            ),
            [_ID],
            "_Age",
                IF (
                    DATEDIFF ( [_DOB], [_SD], MONTH ) < 216,
                    "<18",
                    IF (
                        DATEDIFF ( [_DOB], [_SD], MONTH ) >= 216
                        && DATEDIFF ( [_DOB], [_SD], MONTH ) < 780,
                        "18-64",
                        IF ( DATEDIFF ( [_DOB], [_SD], MONTH ) >= 780, "65+" )
                    )
                )
        ),
        [_ID],
        [_Age]
    )
RETURN
    SWITCH (
        _newvalue,
        "<18", COUNTX ( FILTER ( _vtable, [_Age] = "<18" ), [_ID] ),
        "18-64", COUNTX ( FILTER ( _vtable, [_Age] = "18-64" ), [_ID] ),
        "65+", COUNTX ( FILTER ( _vtable, [_Age] = "65+" ), [_ID] )
    )

vkaiyuemsft_0-1714635449992.png

Si su período actual no se refiere a esto, por favor aclárelo en una respuesta de seguimiento.

Saludos

Clara Gong

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Helpful resources

Announcements
RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.