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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Frangranada
Frequent Visitor

Contar clientes entre fechas si no han comprado antes

Buenos días a todos,

 

Gracias de antemano por la ayuda. Tengo una duda desde hace tiempo y no se como resolverla. Trabajo con una tabla que simulo aquí abajo.

 

Frangranada_0-1669536873208.png

 

Quiero saber como contar los clientes para unas fechas que yo marque en el calendario, siempre y cuando no hayan comprado antes. Ejem: Si yo marco en el calendario las fechas del 21/11 al 24/11, el número de clientes distintos es 5. Ahora, si yo marcho solo el día 23/11, entonces son 2. Lo que yo quiero conseguir, es que si marco el día 24/11 en vez de contar 5, solo me cuente 2 (cliente 3 y 5), ya que los clientes 1,2 y 4 han comprado en fechas anteriores. 

 

Espero no haberme liado mucho. 

 

Gracias nuevamente por vuestra ayuda.

 

Un saludo

 

2 ACCEPTED SOLUTIONS
Syndicate_Admin
Administrator
Administrator

@Syndicate_Admin

¿Puede explicar por qué espera el resultado 2 al seleccionar 11/23?

En su mesa el 23/11 el cliente 4 y 1 compraron algo. Pero el cliente ya compró el 21/11. Entonces, según tengo entendido, ¿los resultados serían 1 y no dos?

Como usted lo describe, la fórmula debe hacer lo siguiente.

1) Revise los clientes que han comprado en el período de tiempo seleccionado

2) Mira si los clientes seleccionados han comprado algo antes

3) Si es así, ignórelos, si no, tómelos en cuenta

Si este es el requisito, entonces la fórmula debería verse así:

Number of customers not bought before =
VAR var_MinDate =
    FIRSTDATE ( DateTable[Date] )
RETURN
    SUMX (
        VALUES ( FactTable[Clientes] ),
        VAR var_NumberOfSalesBeforeMinDate =
            CALCULATE (
                COUNTROWS ( FactTable ),
                ALL ( FactTable ),
                FactTable[Fecha compra] < var_MinDate
            )
        RETURN
            IF(var_NumberOfSalesBeforeMinDate > 0, 0, 1)
    )

Saludos

Miguel

-----------------------------------------------------

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente. ¡Aprecio su pulgar hacia arriba!

@me en las respuestas o perderé tu hilo.

-----------------------------------------------------

LinkedIn (en inglés)

View solution in original post

Syndicate_Admin
Administrator
Administrator

@Syndicate_Admin ,

Por favor, intente:

Measure2 =
VAR _a =
    MIN ( 'calendar'[Date] )
VAR _b =
    SUMMARIZE (
        'Table',
        'Table'[Clientes],
        "Flag",
            IF (
                CALCULATE (
                    COUNT ( 'Table'[Clientes] ),
                    FILTER (
                        ALL ( 'Table' ),
                        [Clientes] = EARLIER ( 'Table'[Clientes] )
                            && [Fecha compra] < _a
                    )
                ) > 0,
                0,
                1
            )
    )
RETURN
    SUMX ( _b, [Flag] )

Resultado final:

vjianbolimsft_0-1669873325241.png

Saludos

Jianbo Li

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

View solution in original post

10 REPLIES 10
Syndicate_Admin
Administrator
Administrator

@Syndicate_Admin ,

Por favor, intente:

Measure2 =
VAR _a =
    MIN ( 'calendar'[Date] )
VAR _b =
    SUMMARIZE (
        'Table',
        'Table'[Clientes],
        "Flag",
            IF (
                CALCULATE (
                    COUNT ( 'Table'[Clientes] ),
                    FILTER (
                        ALL ( 'Table' ),
                        [Clientes] = EARLIER ( 'Table'[Clientes] )
                            && [Fecha compra] < _a
                    )
                ) > 0,
                0,
                1
            )
    )
RETURN
    SUMX ( _b, [Flag] )

Resultado final:

vjianbolimsft_0-1669873325241.png

Saludos

Jianbo Li

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

Fantástico! muchas gracias por la solución!!!

Syndicate_Admin
Administrator
Administrator

@Syndicate_Admin ,

De acuerdo con su descripción, si selecciono 2022-11-22 a 2022-11-24, el recuento de clientes parece ser 2.

¿Entendí mal?

vjianbolimsft_2-1669711280118.png

Si no he entendido mal, por favor intente:

Measure =
VAR _a =
    SUMMARIZE (
        'Table',
        [Clientes],
        "Flag",
            IF (
                CALCULATE (
                    COUNT ( 'Table'[Clientes] ),
                    FILTER (
                        ALL ( 'Table' ),
                        [Clientes] = EARLIER ( 'Table'[Clientes] )
                            && [Fecha compra] <= MAX ( 'calendar'[Date] )
                    )
                ) > 1,
                0,
                1
            )
    )
VAR _b =
    SUMMARIZE (
        'Table',
        [Clientes],
        "Flag",
            IF (
                CALCULATE (
                    COUNT ( 'Table'[Clientes] ),
                    FILTER (
                        'Table',
                        [Clientes] = EARLIER ( 'Table'[Clientes] )
                            && [Fecha compra] <= MAX ( 'calendar'[Date] )
                    )
                ) > 1,
                0,
                1
            )
    )
VAR _c =
    COUNTX ( SELECTCOLUMNS ( 'calendar', "Sliered", [Date] ), [Sliered] )
RETURN
    IF ( _c = 1, SUMX ( _a, [Flag] ), SUMX ( _b, [Flag] ) )

Salida:

vjianbolimsft_3-1669711395567.png

Saludos

Jianbo Li

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

Buenos días,

 

Te pido disculpas, creo que no expliqué bien el problema. 

 

Si selecciono del 2022-11-22 a 2022-11-24, el recuento de clientes correcto debería ser 4, ya que el único cliente que ha comprado antes de esa fecha es el cliente 1. (Compra de 35 unidades el 21/11). Ver imagen marcada en rojo.

Captura de pantalla (16).png

 

A diferencia de tu resultado, si hay que dar por buenos el cliente 2 y 4, ya que todas las compras las han hecho dentro del periodo que tenemos marcado del 22/11 al 24/11. No importa que haya comprado en varios días siempre que sea dentro del periodo que marquemos. Si por ejemplo marcasemos del 23/11 al 24/11, entonces el cliente 2 quedaría fuera porque ha hecho una compra el 22/11.

 

Espero haberlo explicado ahora bien.

 

Gracias, es muy importante para mi este cálculo

Syndicate_Admin
Administrator
Administrator

@Syndicate_Admin ,

Por favor, intente:

Measure = 
var _a = SUMMARIZE('Table',[Clientes],"Flag",IF(CALCULATE(COUNT('Table'[Clientes]),FILTER(ALL('Table'),[Clientes]=EARLIER('Table'[Clientes])&&[Fecha compra]<=MAX('calendar'[Date])))>1,0,1))
return SUMX(_a,[Flag])

Resultado final:

vjianbolimsft_0-1669627398270.png

vjianbolimsft_1-1669627407866.png

Saludos

Jianbo Li

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

Buenas tardes,

 

Antes de nada, gracias por su respuesta. La medida creada me resuelve a medias el problema. Creo que no expliqué bien mi casuistica.

 

Si selecciono un solo día, la medida funciona perfectamente, pero si filtro juntando varios días, entonces no me hace bien el cálculo bien. Yo necesito que si tomo varios días, me cuente los clientes distintos de esos días que no hayan comprado los días anteriores.

 

Como podrás ver en tu ejemplo, si selecciono 3 días, el computo total de clientes que han comprado en esos 3 días, y no lo habían hecho antes, segun la medida es 2.

Frangranada_0-1669646531974.png

Esto es erroneo, debería ser 4 porque el cliente 1 ya había comprado el día 21.

Captura de pantalla (15).png

Espero que sirva de ayuda esta explicación a ver si puedes resolverlo. 

 

gracias!

 

 

Syndicate_Admin
Administrator
Administrator

@Syndicate_Admin

¡De nada!

¿Puede marcarlo como solución? 🙂

Syndicate_Admin
Administrator
Administrator

@Syndicate_Admin

¿Puede explicar por qué espera el resultado 2 al seleccionar 11/23?

En su mesa el 23/11 el cliente 4 y 1 compraron algo. Pero el cliente ya compró el 21/11. Entonces, según tengo entendido, ¿los resultados serían 1 y no dos?

Como usted lo describe, la fórmula debe hacer lo siguiente.

1) Revise los clientes que han comprado en el período de tiempo seleccionado

2) Mira si los clientes seleccionados han comprado algo antes

3) Si es así, ignórelos, si no, tómelos en cuenta

Si este es el requisito, entonces la fórmula debería verse así:

Number of customers not bought before =
VAR var_MinDate =
    FIRSTDATE ( DateTable[Date] )
RETURN
    SUMX (
        VALUES ( FactTable[Clientes] ),
        VAR var_NumberOfSalesBeforeMinDate =
            CALCULATE (
                COUNTROWS ( FactTable ),
                ALL ( FactTable ),
                FactTable[Fecha compra] < var_MinDate
            )
        RETURN
            IF(var_NumberOfSalesBeforeMinDate > 0, 0, 1)
    )

Saludos

Miguel

-----------------------------------------------------

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente. ¡Aprecio su pulgar hacia arriba!

@me en las respuestas o perderé tu hilo.

-----------------------------------------------------

LinkedIn (en inglés)

Buenas tardes,

 

He probado la fórmula y me da el mismo resultado sin filtrar los clientes que ya hubiesen comprado.

 

ctes nuevos prueba =
VAR var_MinDate =
    DATE(22,10,31)
RETURN
    SUMX(
        VALUES(Pedidos[Codigo Cliente]),
        VAR var_NumberOfSalesBeforeMinDate =
            CALCULATE (
                COUNTROWS(Pedidos),
                ALL(Pedidos),
             Pedidos[Fecha Pedido] < var_MinDate
            )
        RETURN
            IF(var_NumberOfSalesBeforeMinDate > 0, 0, 1)
    )

Buenos días Miguel,

 

Tienes toda la razón!! me equivoque, era 1 el resultado esperado para el 23/11

 

Un millón de gracias por la solución!!!

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.