Calcule una tasa de retención a lo largo de los años

Un usuario Pregunto ✅

Nicolas_Schonau

¡Hola a todos!

Tengo un problema con mi conjunto de datos actual, he estado buscando en el foro pero no puedo encontrar algo similar a mi situación (si esto ya existe, ¡perdón por la publicación doble!), Así que aquí está:

En mi base de datos tengo, para cada cliente, la fecha de inicio de la actividad que ha adquirido. El conjunto de datos (simplificado aquí) contiene la identificación del cliente (A, B, C, …) en mi primera columna, y en la segunda columna la fecha de inicio, por ejemplo:

Cliente Iniciar actividad
A 2018-07-30 00:00:00
B 2018-08-06 00:00:00
C 2018-07-23 00:00:00
A 2019-07-08 00:00:00
C 2019-07-15 00:00:00
D 2019-07-22 00:00:00

Me gustaría poder calcular automáticamente la tasa de retención de mis clientes por año, es decir, saber que de mis tres clientes de 2019 (A, C, D), dos (A, C) ya compraron algunas actividades en 2018. Quizás es realmente fácil, pero honestamente, estoy un poco atascado en esto ahora mismo. ¡Gracias de antemano por tu ayuda!

Nicolas_Schonau

En respuesta a Nicolas_Schonau

Hola a todos,

Finalmente logré encontrar una solución aquí. Para que conste, así es como lo hice:

Primero, cree una nueva tabla de fecha Dim con la primera columna siendo:

Dim date = CALENDAR(MIN(Sheet2[Start activity]);MAX(Sheet2[Start activity]))

Y una segunda columna para calcular el año:

Year = YEAR('Dim date'[Date])

No olvide marcar la tabla como una tabla de fechas y vincularla a la tabla principal.

En segundo lugar, cree estas medidas en la tabla principal:

Customers = DISTINCTCOUNT ( Sheet2[Client] )

New Customers = 
COUNTROWS (
    FILTER (
        ADDCOLUMNS (
            VALUES ( Sheet2[Client] );
            "PreviousSales"; CALCULATE (
                COUNTROWS ( Sheet2 );
                FILTER (
                    ALL ( 'Dim date' );
                    'Dim date'[Date] < MIN ( 'Dim date'[Date] )
                )
            )
        );
        [PreviousSales] = 0
    )
)

Returning Customers = 
COUNTROWS (
    CALCULATETABLE (
        VALUES ( Sheet2[Client] );
        VALUES ( Sheet2[Client] );
        FILTER (
            ALL ( 'Dim date' );
            'Dim date'[Date] < MIN ( 'Dim date'[Date] )
        )
    )
)

Customers Last Year = 
CALCULATE (
    DISTINCTCOUNT ( Sheet2[Client] );
    FILTER (
        ALLSELECTED ( 'Dim date' );
        'Dim date'[Year]
            = SELECTEDVALUE ( 'Dim date'[Year] ) - 1

    )
)

retention rate = [Returning Customers] / [Customers Last Year]

Esto le dará la siguiente matriz:

Capture.PNG

Nicolás

Hola @Nicolas_Schonau,

Nueva tabla de dimensión de fecha que está vinculada a la tabla de origen (‘Hoja2’ en mi prueba) basada en [Date] campo.

Dim date = CALENDAR(MIN(Sheet2[Start activity]),MAX(Sheet2[Start activity]))

Cree medidas similares a las que se muestran a continuación.

countclient TY = DISTINCTCOUNT(Sheet2[Client])
countclient LY = CALCULATE ( DISTINCTCOUNT ( Sheet2[Client] ), FILTER ( ALLSELECTED ( 'Dim date' ), 'Dim date'[Date].[Year] = SELECTEDVALUE ( 'Dim date'[Date].[Year] ) - 1 ) ) is purchased LY = CALCULATE ( COUNT ( Sheet2[Client] ), FILTER ( ALLSELECTED ( Sheet2 ), YEAR ( Sheet2[Start activity] ) = YEAR ( SELECTEDVALUE ( 'Dim date'[Date] ) ) - 1 && Sheet2[Client] = SELECTEDVALUE ( Sheet2[Client] ) ) ) retention client = COUNTROWS ( FILTER ( ALLSELECTED ( Sheet2[Start activity] ), [is purchased LY] >= 1 ) ) retention rate = [retention client]/[countclient LY]

1.PNG

Atentamente,

Yuliana Gu

Nicolas_Schonau

En respuesta a v-yulgu-msft

Hola @ v-yulgu-msft,

Gracias por su respuesta.

He podido crear la nueva tabla ‘Dim date’, y la primera medida cuenta el cliente TY, pero no la segunda, el contador LY. Esto me da una medida vacía. Creo que el problema proviene del hecho de que en la fórmula, Power Bi no me permite insertar el

.[Year]

Si lo uso, obtengo un error, y si no lo hago, obtengo una medida vacía. Esto me bloquea por el resto de las medidas.

¿Podría ser algún tipo de problema relacionado con el formato? ¿Recibiste esto también?

Gracias de antemano por su respuesta.

Atentamente,

Nicolás

En respuesta a Nicolas_Schonau

Hola @Nicolas_Schonau,

Modifique la fórmula a continuación para realizar una prueba.

countclient LY =
CALCULATE (
    DISTINCTCOUNT ( Sheet2[Client] ),
    FILTER (
        ALLSELECTED ( 'Dim date' ),
        YEAR('Dim date'[Date])
            = YEAR(SELECTEDVALUE ( 'Dim date'[Date])) - 1
    )
)

Saludos,

Yuliana Gu

Nicolas_Schonau

En respuesta a v-yulgu-msft

Hola @ v-yulgu-msft,

Probé su nueva solución pero no pude obtener los resultados correctos.

He subido el archivo .pbix de prueba que utilizo para este ejemplo, ¿sería tan amable de echarle un vistazo rápido y ver qué hay de malo en lo que estoy haciendo?

https: //nschonau-my.sharepoint.com/: u: / g / personal / nschonau_nschonau_onmicrosoft_com / EbMUd2jPnEdIox6s …

Una vez más, muchas gracias de antemano.

Nicolás

Nicolas_Schonau

En respuesta a Nicolas_Schonau

Hola @ v-yulgu-msft,

Solo quería saber si tuvo la oportunidad de echar un vistazo al conjunto de datos.

Lo he intentado de nuevo con algunas modificaciones, pero todavía no funciona.

Muchas gracias de antemano.

Atentamente,

Nicolás

Nicolas_Schonau

En respuesta a Nicolas_Schonau

Hola a todos,

Finalmente logré encontrar una solución aquí. Para que conste, así es como lo hice:

Primero, cree una nueva tabla de fecha Dim con la primera columna siendo:

Dim date = CALENDAR(MIN(Sheet2[Start activity]);MAX(Sheet2[Start activity]))

Y una segunda columna para calcular el año:

Year = YEAR('Dim date'[Date])

No olvide marcar la tabla como una tabla de fechas y vincularla a la tabla principal.

En segundo lugar, cree estas medidas en la tabla principal:

Customers = DISTINCTCOUNT ( Sheet2[Client] )

New Customers = 
COUNTROWS (
    FILTER (
        ADDCOLUMNS (
            VALUES ( Sheet2[Client] );
            "PreviousSales"; CALCULATE (
                COUNTROWS ( Sheet2 );
                FILTER (
                    ALL ( 'Dim date' );
                    'Dim date'[Date] < MIN ( 'Dim date'[Date] )
                )
            )
        );
        [PreviousSales] = 0
    )
)

Returning Customers = 
COUNTROWS (
    CALCULATETABLE (
        VALUES ( Sheet2[Client] );
        VALUES ( Sheet2[Client] );
        FILTER (
            ALL ( 'Dim date' );
            'Dim date'[Date] < MIN ( 'Dim date'[Date] )
        )
    )
)

Customers Last Year = 
CALCULATE (
    DISTINCTCOUNT ( Sheet2[Client] );
    FILTER (
        ALLSELECTED ( 'Dim date' );
        'Dim date'[Year]
            = SELECTEDVALUE ( 'Dim date'[Year] ) - 1

    )
)

retention rate = [Returning Customers] / [Customers Last Year]

Esto le dará la siguiente matriz:

Capture.PNG

Nicolás

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *