Comprobar si existe registro en el mes anterior

Un usuario Pregunto ✅

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»)

imranamikhan_0-1607308656032.png

atentamente,

ami

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")

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

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.

imranamikhan_0-1607311788345.png

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.

imranamikhan_1-1607311996603.png

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *