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

Be one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now

Reply
littlemojopuppy
Community Champion
Community Champion

Cálculo de retención de clientes a lo largo de semanas sucesivas

¡Hola! Buscando un pequeño consejo. El requisito es calcular el número de clientes que iniciaron sesión en una fecha determinada y, a continuación, que han iniciado sesión de nuevo en cada uno de los seis períodos de tiempo de una semana a partir de esa fecha. Significado para los clientes que iniciaron sesión el 31 de mayo, cuántos de esos clientes iniciaron sesión en cada uno de los períodos del 1 al 7 de junio, del 8 al 14 de junio, del 15 al 21 de junio, etc.

Se me ocurrió una fórmula larga que es correcta.

Users Returning Within 42 Days:=VAR Weeks = 5
RETURN
    COUNTROWS (
        CALCULATETABLE (
            VALUES ( IdentityLog[IdentityId] ),
            -- Current Week
            CALCULATETABLE (
                VALUES ( IdentityLog[IdentityId] ),
                DATESINPERIOD (
                    'Calendar'[Date],
                    DATEADD (
                        LASTDATE ( 'Calendar'[Date] ),
                        ( Weeks * 7 ) + 1,
                        DAY
                    ),
                    7,
                    DAY
                )
            ),
            -- Previous Week
            CALCULATETABLE (
                VALUES ( IdentityLog[IdentityId] ),
                DATESINPERIOD (
                    'Calendar'[Date],
                    DATEADD (
                        LASTDATE ( 'Calendar'[Date] ),
                        ( ( Weeks - 1 ) * 7 ) + 1,
                        DAY
                    ),
                    7,
                    DAY
                )
            ),
            -- Two Weeks Ago
            CALCULATETABLE (
                VALUES ( IdentityLog[IdentityId] ),
                DATESINPERIOD (
                    'Calendar'[Date],
                    DATEADD (
                        LASTDATE ( 'Calendar'[Date] ),
                        ( ( Weeks - 2 ) * 7 ) + 1,
                        DAY
                    ),
                    7,
                    DAY
                )
            ),
            -- Three Weeks Ago
            CALCULATETABLE (
                VALUES ( IdentityLog[IdentityId] ),
                DATESINPERIOD (
                    'Calendar'[Date],
                    DATEADD (
                        LASTDATE ( 'Calendar'[Date] ),
                        ( ( Weeks - 3 ) * 7 ) + 1,
                        DAY
                    ),
                    7,
                    DAY
                )
            ),
            -- Four Weeks Ago
            CALCULATETABLE (
                VALUES ( IdentityLog[IdentityId] ),
                DATESINPERIOD (
                    'Calendar'[Date],
                    DATEADD (
                        LASTDATE ( 'Calendar'[Date] ),
                        ( ( Weeks - 4 ) * 7 ) + 1,
                        DAY
                    ),
                    7,
                    DAY
                )
            ),
            -- Five Weeks Ago
            CALCULATETABLE (
                VALUES ( IdentityLog[IdentityId] ),
                DATESINPERIOD (
                    'Calendar'[Date],
                    DATEADD (
                        LASTDATE ( 'Calendar'[Date] ),
                        ( ( Weeks - 5 ) * 7 ) + 1,
                        DAY
                    ),
                    7,
                    DAY
                )
            )
        )
    )

Tenía curiosidad de si alguien podía sugerir una solución más elegante. He visto @Greg_Decklerentrada de blog de For y While Loops en DAX. Pero no pude conseguir que funcione correctamente porque necesito pasar grupos de ID de usuario para comparar y no un solo valor.

Cualquier ayuda sería apreciada!

6 REPLIES 6
v-lionel-msft
Community Support
Community Support

Hola @littlemojopuppy ,

Tal vez pueda agregar un [índice] y simplificar el código.

Users Returning Within 42 Days = 
VAR Weeks = 5
RETURN
    COUNTROWS (
        CALCULATETABLE (
            VALUES ( IdentityLog[IdentityId] ),
            CALCULATETABLE (
                VALUES ( IdentityLog[IdentityId] ),
                DATESINPERIOD (
                    'Calendar'[Date],
                    DATEADD (
                        LASTDATE ( 'Calendar'[Date] ),
                        ( (Weeks- MAX([Index] )* 7 ) + 1,
                        DAY
                    ),
                    7,
                    DAY
                )
            )
    )
)

Saludos
Lionel Chen

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

Lo probé... no funcionó. El problema es que el uso de MAX(Index) solo examina el valor de semana/índice más lejano en el tiempo. Necesito mirar cada período individual de 7 días desde hoy hasta la semana/índice. Realmente podría usar bucle, pero eso no parece posible.

Hola @littlemojopuppy ,

¿O así?

Users Returning Within 42 Days = 
VAR Weeks = 5
RETURN
COUNTROWS (
        CALCULATETABLE (
            VALUES ( IdentityLog[IdentityId] ),
            
            CALCULATETABLE (
                VALUES ( IdentityLog[IdentityId] ),
                // 0
                DATESINPERIOD ( 
                    'Calendar'[Date],
                    DATEADD ( LASTDATE ( 'Calendar'[Date] ), ( (Weeks-0 )* 7 ) + 1, DAY ),
                    7, DAY
                ),
                // 1
                DATESINPERIOD ( 
                    'Calendar'[Date],
                    DATEADD ( LASTDATE ( 'Calendar'[Date] ), ( (Weeks-1 )* 7 ) + 1, DAY ),
                    7, DAY
                ),
                // 2
                DATESINPERIOD ( 
                    'Calendar'[Date],
                    DATEADD ( LASTDATE ( 'Calendar'[Date] ), ( (Weeks-2 )* 7 ) + 1, DAY ),
                    7, DAY
                ),
                //3
                DATESINPERIOD ( 
                    'Calendar'[Date],
                    DATEADD ( LASTDATE ( 'Calendar'[Date] ), ( (Weeks-3 )* 7 ) + 1, DAY ),
                    7, DAY
                ),
                // 4
                DATESINPERIOD ( 
                    'Calendar'[Date],
                    DATEADD ( LASTDATE ( 'Calendar'[Date] ), ( (Weeks-4 )* 7 ) + 1, DAY ),
                    7, DAY
                ),
                 // 5
                DATESINPERIOD ( 
                    'Calendar'[Date],
                    DATEADD ( LASTDATE ( 'Calendar'[Date] ), ( (Weeks-5 )* 7 ) + 1, DAY ),
                    7, DAY
                ),
                //5
                 DATESINPERIOD ( 
                    'Calendar'[Date],
                    DATEADD ( LASTDATE ( 'Calendar'[Date] ), ( (Weeks-5 )* 7 ) + 1, DAY ),
                    7, DAY
                )
            )
        )
)

Si necesita utilizar la función CALCULATETABLE(), parece que solo puede enumerar cada filtro, no puede enumerarlo en un bucle.

aaa10.PNG

Saludos
Lionel Chen

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

¡Buenos días!

El uso de CALCULATETABLE no es obligatorio. Necesidad de encontrar a los usuarios que iniciaron sesión en cada una de las seis semanas y sin duda puedo probar esto. Esperaba que pudiera evitar tener que hacer una lista cada semana sucesiva, pero tal vez no pueda.

Encontré este artículo por @marcorusso sobre la implementación de interés compuesto. Los cálculos de intereses compuestos tienen que basarse en períodos sucesivos, así que pensé que lo intentaría, pero no tengo la esperanza de que funcionara porque la fórmula devolvería valores para períodos y no grupos de usuarios/IdentityIDs de cada período. Ahí es donde se atasca...

Gracias por volver a verlo.

Así que el código que publiqué originalmente fue lo único que intenté que funcionó con éxito. Pero gracias por su opinión! 😊

Lo probaré... ¡Gracias! 🙂

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

Dec Fabric Community Survey

We want your feedback!

Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.

ArunFabCon

Microsoft Fabric Community Conference 2025

Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.

Top Solution Authors
Top Kudoed Authors