imranamikhan
Hola a todos,
Tengo una tabla con una columna de ID y una columna de fecha/marca de tiempo.
¿Alguien podría recomendar una fórmula (ya sea Power Query o DAX) para identificar si existe un registro en la misma tabla pero para el último día del mes anterior en comparación con la marca de tiempo de ese registro?
En excel por ejemplo:
Criterio Rango 1: columna de ID de registro
Criterios1: ID de registro
Criterio Rango 2: columna de marca de tiempo
Criterio 2: Marca de tiempo del mes anterior
Luego verificaría si el resultado devuelto es mayor que> 0
=SI(CONTAR.SI([Customer],[@Customer],[Record Timestamp],EOMES([@[Record Timestamp]],-1))>0,»Antiguo»,»Nuevo»)
atentamente,
ami
v-shex-msft
En respuesta a imranamikhan
Hola @imranamikhan,
¿Quiere decir que desea agregar un filtro adicional en el campo personalizado para filtrar aún más los registros que ya se filtraron por rangos de fechas?
Si este es un caso, ¿dónde desea agregarlo? ¿La variable del paso de filtro base del resultado final que procesa con funciones excepto?
Si se refiere al segundo escenario para filtrar el resultado final, puede intentar usar las siguientes fórmulas:
New VM =
VAR customerlist =
ALLSELECTED ( Table[Customer] )
VAR _history =
CALCULATETABLE (
VALUES ( DB_CustomerMasterData_Current_Report[Customer] ),
FILTER (
ALL ( DB_CustomerMasterData_Current_Report ),
[Record Timestamp]
< EARLIER ( DB_CustomerMasterData_Current_Report[Record Timestamp] )
)
)
VAR _current =
CALCULATETABLE (
VALUES ( DB_CustomerMasterData_Current_Report[Customer] ),
FILTER (
ALL ( DB_CustomerMasterData_Current_Report ),
[Record Timestamp]
= EARLIER ( DB_CustomerMasterData_Current_Report[Record Timestamp] )
)
)
VAR devices_found =
COUNTROWS ( _current )
VAR devices_not_found =
COUNTROWS ( EXCEPT ( _history, _current ) ) + 0
VAR new_devices =
COUNTROWS (
FILTER ( EXCEPT ( _current, _history ), [Customer] IN customerlist )
) + 0
RETURN
new_devices
Saludos,
Xiaoxin-sheng
imranamikhan
En respuesta a v-shex-msft
Hola @v-shex-msft, disculpas por la respuesta tardía. La sugerencia que proporcionó me estaba dando un recuento, pero necesitaba una columna adicional que identificara si un registro era Nuevo (VERDADERO) o Antiguo (FALSO) de una lista de registros duplicados con una marca de tiempo (nuevamente según la imagen en mi primera publicación).
Ahora tengo el DAX requerido y lo he publicado a continuación en caso de que alguien más lo necesite:
Last date of previous month = EOMONTH(DB_CustomerMasterData_Current_Report[Record Timestamp],-1)
New at Timestamp = if(CALCULATE(COUNTROWS(DB_CustomerMasterData_Current_Report),FILTER(DB_CustomerMasterData_Current_Report,DB_CustomerMasterData_Current_Report[CustomerID]=EARLIER(DB_CustomerMasterData_Current_Report[CustomerID])&&EOMONTH(DB_CustomerMasterData_Current_Report[Record Timestamp],0)=EARLIER(DB_CustomerMasterData_Current_Report[Last date of previous month])))>0,"Old","New")
v-shex-msft
Hola @imranamikhan,
Según su lectura, parece un requisito de análisis de registros históricos.
Si este es el caso, puede consultar el siguiente enlace si cumple con su requisito: (construyo la muestra en función de las funciones de filtro y excepción, para su escenario, solo necesita modificar el rango de filtro al mes anterior )
Obtenga el número y los valores de las máquinas virtuales creadas
Saludos,
Xiaoxin-sheng
imranamikhan
En respuesta a v-shex-msft
gracias @v-shex-msft. Esta solución ciertamente se acerca a lo que necesito, pero ¿podría aconsejarme cómo podría modificar esto para devolver qué registros son nuevos? Según la imagen de ejemplo, quiero agregar una columna a la lista de clientes y filtrar qué registros son nuevos.
New VM =
var _history=CALCULATETABLE(VALUES(DB_CustomerMasterData_Current_Report[Customer]),FILTER(ALL(DB_CustomerMasterData_Current_Report),[Record Timestamp]<EARLIER(DB_CustomerMasterData_Current_Report[Record Timestamp])))
var _current=CALCULATETABLE(VALUES(DB_CustomerMasterData_Current_Report[Customer]),FILTER(ALL(DB_CustomerMasterData_Current_Report),[Record Timestamp]=EARLIER(DB_CustomerMasterData_Current_Report[Record Timestamp])))
var devices_found=COUNTROWS(_current)
var devices_not_found=COUNTROWS(EXCEPT(_history,_current))+0
var new_devices=COUNTROWS(EXCEPT(_current,_history))+0
Return
new_devices
v-shex-msft
En respuesta a imranamikhan
Hola @imranamikhan,
¿Quiere decir que desea agregar un filtro adicional en el campo personalizado para filtrar aún más los registros que ya se filtraron por rangos de fechas?
Si este es un caso, ¿dónde desea agregarlo? ¿La variable del paso de filtro base del resultado final que procesa con funciones excepto?
Si se refiere al segundo escenario para filtrar el resultado final, puede intentar usar las siguientes fórmulas:
New VM =
VAR customerlist =
ALLSELECTED ( Table[Customer] )
VAR _history =
CALCULATETABLE (
VALUES ( DB_CustomerMasterData_Current_Report[Customer] ),
FILTER (
ALL ( DB_CustomerMasterData_Current_Report ),
[Record Timestamp]
< EARLIER ( DB_CustomerMasterData_Current_Report[Record Timestamp] )
)
)
VAR _current =
CALCULATETABLE (
VALUES ( DB_CustomerMasterData_Current_Report[Customer] ),
FILTER (
ALL ( DB_CustomerMasterData_Current_Report ),
[Record Timestamp]
= EARLIER ( DB_CustomerMasterData_Current_Report[Record Timestamp] )
)
)
VAR devices_found =
COUNTROWS ( _current )
VAR devices_not_found =
COUNTROWS ( EXCEPT ( _history, _current ) ) + 0
VAR new_devices =
COUNTROWS (
FILTER ( EXCEPT ( _current, _history ), [Customer] IN customerlist )
) + 0
RETURN
new_devices
Saludos,
Xiaoxin-sheng
imranamikhan
En respuesta a v-shex-msft
Hola @v-shex-msft, disculpas por la respuesta tardía. La sugerencia que proporcionó me estaba dando un recuento, pero necesitaba una columna adicional que identificara si un registro era Nuevo (VERDADERO) o Antiguo (FALSO) de una lista de registros duplicados con una marca de tiempo (nuevamente según la imagen en mi primera publicación).
Ahora tengo el DAX requerido y lo he publicado a continuación en caso de que alguien más lo necesite:
Last date of previous month = EOMONTH(DB_CustomerMasterData_Current_Report[Record Timestamp],-1)
New at Timestamp = if(CALCULATE(COUNTROWS(DB_CustomerMasterData_Current_Report),FILTER(DB_CustomerMasterData_Current_Report,DB_CustomerMasterData_Current_Report[CustomerID]=EARLIER(DB_CustomerMasterData_Current_Report[CustomerID])&&EOMONTH(DB_CustomerMasterData_Current_Report[Record Timestamp],0)=EARLIER(DB_CustomerMasterData_Current_Report[Last date of previous month])))>0,"Old","New")
amichandak
@imranamikhan, consulte mi blog para verificar los valores de los clientes este mes en comparación con el mes pasado, vea si eso puede ayudar
https://community.powerbi.com/t5/Community-Blog/Customer-Retention-Part-1-Month-on-Month-Retention/b…
imranamikhan
En respuesta a amichandak
Hola @amitchandak. Esto parece funcionar para el último mes (diciembre), pero necesito que la tabla muestre todos los períodos/meses de la columna Marca de tiempo de registro en lugar de mediante una segmentación porque, en última instancia, quiero crear una imagen.
Si utilizo una segmentación que usa el campo Fecha de un calendario de fechas unido, el cálculo devuelve el recuento de todos los registros del mes anterior en lugar de los registros nuevos. También traté de usar el campo Marca de tiempo de registro en las medidas en lugar del campo Fecha del calendario Fecha y observé los mismos resultados.