Check your eligibility for this 50% exam voucher offer and join us for free live learning sessions to get prepared for Exam DP-700.
Get StartedDon'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.
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"
)
Hola @EllieSiroco1
Por favor, pruebe esto:
Aquí creo un conjunto de muestras:
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:
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.
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.
@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
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
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
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!
Check out the January 2025 Power BI update to learn about new features in Reporting, Modeling, and Data Connectivity.