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

Don't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

Error al calcular los clientes que regresan

Tengo una tabla de PowerBi llamada "pedidos-web2019" con las siguientes dimensiones: "Fecha del pedido", "correo electrónico del cliente", y la siguiente métrica "Ventas con IVA incluido".

He escrito DAX para definir una nueva columna calculada con el nombre "clientes recurrentes" que muestra los clientes (según la dimensión "correo electrónico del cliente") que generaron ventas (según 'orders-web2019' [Ventas con IVA] > 0) en el período comprendido entre "01 de noviembre de 2023 y 31 de diciembre de 2023" (fecha del pedido) y volvieron a generar ventas en el período comprendido entre las fechas de pedido "01 de noviembre de 2024 hasta el 31 de diciembre de 2024". El resto de los clientes se identificarían como "Nuevos".

Me he encontrado con el siguiente error "Se ha utilizado una función "marcador de posición" en una expresión de verdadero / falso como una tabla que se usa como expresión de filtro, esto no está permitido"

para este fragmento de DAX, ¿dónde está el error?

Clientes recurrentes =
VAR CurrentCustomerEmail = 'orders-web2019'[correo electrónico del cliente]
VAR CurrentOrderDate = 'orders-web2019'[Fecha del pedido]
VAR PeriodoAnteriorInicio = FECHA ( 2023, 11, 01 )
VAR PreviousPeriodEnd = FECHA ( 2023, 12, 31 )
VAR CurrentPeriodStart = FECHA ( 2024, 11, 01 )
VAR CurrentPeriodEnd = FECHA ( 2024, 12, 31 )


VAR ClienteEnPeriodoAnterior =
CALCULAR (
COUNTROWS ( 'pedidos-web2019' ),
'orders-web2019'[correo electrónico del cliente] = CurrentCustomerEmail,
'orders-web2019'[Fecha del pedido] >= PreviousPeriodStart,
'orders-web2019'[Fecha del pedido] <= PreviousPeriodEnd,
'orders-web2019'[Ventas inc IVA] > 0
)


VAR CustomerInCurrentPeriod =
CALCULAR (
COUNTROWS ( 'pedidos-web2019' ),
'orders-web2019'[correo electrónico del cliente] = CurrentCustomerEmail,
'orders-web2019'[Fecha del pedido] >= CurrentPeriodStart,
'orders-web2019'[Fecha del pedido] <= CurrentPeriodEnd,
'orders-web2019'[Ventas inc IVA] > 0
)


DEVOLUCIÓN
SI (
CustomerInPreviousPeriod > 0
&& CustomerInCurrentPeriod > 0,
"Regresando",
"Nuevo"
)

8 REPLIES 8
Syndicate_Admin
Administrator
Administrator

Hola @EllieSiroco1

Por favor, pruebe esto:

Aquí creo un conjunto de muestras:

vzhengdxumsft_0-1736734004951.png

A continuación, agregue una columna calculada:

Returning Customers =
VAR CurrentPeriodStart =
    DATE ( 2024, 11, 01 )
VAR CurrentPeriodEnd =
    DATE ( 2024, 12, 31 )
VAR _previousSales2 =
    CALCULATE (
        SUM ( 'orders-web2019'[Sales inc VAT] ),
        FILTER (
            ALLSELECTED ( 'orders-web2019' ),
            'orders-web2019'[customer email] = EARLIER ( 'orders-web2019'[customer email] )
                && YEAR ( 'orders-web2019'[Order date] )
                    = YEAR ( EARLIER ( 'orders-web2019'[Order date] ) ) - 1
                && MONTH ( 'orders-web2019'[Order date] )
                    = MONTH ( EARLIER ( 'orders-web2019'[Order date] ) )
        )
    )
RETURN
    IF (
        'orders-web2019'[Order date] >= CurrentPeriodStart
            && 'orders-web2019'[Order date] <= CurrentPeriodEnd,
        IF (
            _previousSales2 > 0
                && 'orders-web2019'[Sales inc VAT] > 0,
            "Returning",
            "New"
        )
    )

El resultado es el siguiente:

vzhengdxumsft_1-1736734578427.png

Saludos

Zhengdong Xu
Si esta publicación ayuda, considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.

Muchas gracias @v-zhengdxu-msft esto funciona para mí

Syndicate_Admin
Administrator
Administrator

Hola

Comparta algunos datos, explique la pregunta y muestre el resultado esperado. Comparta datos en un formato que se pueda pegar en un archivo de MS Excel.

Syndicate_Admin
Administrator
Administrator

@speedramps gracias por la solución, no estoy del todo seguro de cómo adaptarlo, ya que no tengo una "fecha mínima". Estoy comparando dos períodos muy específicos:
entre el "01 de noviembre de 2023 y el 31 de diciembre de 2023" (fecha del pedido) y el período comprendido entre las fechas del pedido "01 de noviembre de 2024 y el 31 de diciembre de 2024, en lugar del período anterior a una fecha en todo el calendario

@EllieSiroco1

Lo siento, creo que te entendí mal antes.

Creo que esta solución simple hará lo que quieras ...

Crea 4 medidas ...

Has NovDec2023 sales = 
// create a temp file of dates in range 
VAR mydates =  FILTER('Calendar', 'Calendar'[Date] >= DATE(2023,11,01) && 'Calendar'[Date] <= DATE(2023,12,31))
RETURN
// return 1 if tehre were any sales within date range
CALCULATE(
INT(NOT(ISEMPTY(Sales))),
mydates
)

Has NovDec2024 sales = 
// create a temp file of dates in range 
VAR mydates =  FILTER('Calendar', 'Calendar'[Date] >= DATE(2024,11,01) && 'Calendar'[Date] <= DATE(2024,12,31))
RETURN
// return 1 if tehre were any sales within date range
CALCULATE(
INT(NOT(ISEMPTY(Sales))),
mydates
)

New customers = 
// create temp file of qualifiying customers  
var mysubset =
FILTER(VALUES(Sales[CustomerKey]), 
    [Has NovDec2023 sales] = 0 &&
    [Has NovDec2024 sales] = 1)
 RETURN
 // count the rows
 COUNTROWS(mysubset)  

Returning customer = 
// create temp file of qualifiying customers  
var mysubset =
FILTER(VALUES(Sales[CustomerKey]), 
    [Has NovDec2023 sales] = 1 &&
    [Has NovDec2024 sales] = 1)
 RETURN
 // count the rows
 COUNTROWS(mysubset)   

Haga clic aquí para descargar el ejemplo de PBIX de Onedrive

Haga clic aquí

speedramps_0-1736784118589.png

Syndicate_Admin
Administrator
Administrator

Pruebe estas medidas DAX en lugar de las columnas calculadas.
Las medidas DAX son mucho mejores que las columnas calculadas, ya que el usuario puede elegir la duración

NO new customers = 
/* DOCUMENTATION
Get number of new customers as follows:-
Use addcolumns to get a set with (ResellerKey,Previous Rows)
Then filters the set to just to include customers Keys with no previous rows.
Then count the number of customers 
*/

VAR mindate =  MIN ( 'Calendar'[Date] ) 

VAR NewCustomers  = 
    FILTER (
        ADDCOLUMNS (
            VALUES ( Sales[CustomerKey] ),
            "PreviousRows", 
                CALCULATE (COUNTROWS (Sales),
                FILTER (ALL ( 'Calendar'[Date] ),'Calendar'[Date] < mindate))
        ),
        [PreviousRows] = 0
    )

RETURN
COUNTROWS(NewCustomers) 

NO returning customers = 
/* DOCUMENTATION *
Number of returning customers
*/
VAR mindate = MIN('Calendar'[Date])

RETURN
COUNTROWS (
    CALCULATETABLE (
        VALUES ( Sales[CustomerKey] ),
        VALUES ( Sales[CustomerKey] ),
        FILTER (
            ALL ( 'Calendar' ),
            'Calendar'[Date] < mindate 
        )
    )
)

Estaría muy agradecido si hiciera clic en los botones [aceptar solución] y pulgar hacia arriba.

Gracias

@speedramps esta es una estructura de modelo (tabla) diferente para mí, y usa medidas en lugar de una columna calculada, pero puedo ver la lógica detrás de ella y la he aplicado con cambios para que se ajuste a mi modelo. Este es un enfoque diferente y alternativo, gracias

Los principiantes suelen empezar usando columnas calculadas (porque son como Excel).
Todos comenzamos de esa manera (recuerdo que lo hice), pero luego aprendemos que las medidas son mucho mejores y dinámicas.

Haga clic en [aceptar solución] y en el botón de pulgar hacia arriba para mi solución y la de otros ayudantes.

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!

Jan25PBI_Carousel

Power BI Monthly Update - January 2025

Check out the January 2025 Power BI update to learn about new features in Reporting, Modeling, and Data Connectivity.

Jan NL Carousel

Fabric Community Update - January 2025

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

Top Solution Authors
Top Kudoed Authors