Filtro de fecha relativa — no en los últimos x días

Un usuario Pregunto ✅

samw5

Tengo un montón de datos de registro para análisis informáticos. Cada computadora tiene múltiples entradas con un campo llamado LastScan.

Estoy tratando de crear un filtro (en última instancia, para mostrar una imagen) para la computadora que tiene su último escaneo durante un cierto período de tiempo.

samw5_0-1598901438317.png

Entonces, en el ejemplo anterior, necesito saber que el «LastScan» para la máquina resaltada es el 25/8/2020, no los otros valores y, sin embargo, retiene el resto de los datos (ReleaseName).

Intenté usar GroupBy en el Editor de consultas, sin embargo, hace que las otras columnas desaparezcan. Si agrego varias agrupaciones, no puedo obtener los datos correctos y termino con una entrada para cada fecha que no es lo que estoy tratando de obtener.

lkalawski

Hola @ samw5

Tu forma de aprovechar Group By fue muy buena. Probablemente el siguiente paso que dio fue «expandir tabla» y mostró todos sus registros.

Antes de hacer eso, agregue una columna adicional (paso: Personalizado agregado) que seleccionará solo las filas máximas; puede usar este código:

let
    Source = [your source],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"CompID", Int64.Type}, {"ReleaseName", Int64.Type}, {"Column1", type datetime}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"CompID"}, {{"MaxDate", each List.Max([Column1]), type nullable datetime}, {"Details", each _, type table [CompID=nullable number, ReleaseName=nullable number, Column1=nullable datetime]}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "TopDate", each Table.Max([Details],"Column1")),
    #"Expanded TopDate" = Table.ExpandRecordColumn(#"Added Custom", "TopDate", {"ReleaseName", "Column2", "Column3"}, {"ReleaseName", "Column2", "Column3"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded TopDate",{"Details"})
in
    #"Removed Columns"

También te preparé el archivo con solución. Encuéntrelo utilizando este enlace: https://gofile.io/d/FRY381

EDITAR: archivo con sus datos: https://gofile.io/d/QjqJC0

_______________
Si ayudé, por favor acepta la solución y felicita! 😀

Hola @ samw5,

Según tengo entendido, desea resaltar ComputerID cuando su LastScan no está en los últimos X días (elija por parámetro), ¿verdad?

Puede seguir estos pasos o mirar el pbix aquí

1. Cree un parámetro hipotético para los últimos X días como este:

9.1.4.1.png

2. Utilice las siguientes fórmulas:

theLastestDate =
CALCULATE ( MAX ( 'Table'[LastScan] ), ALL ( 'Table' ) )
lastest by ComputerID =
CALCULATE (
    MAX ( 'Table'[LastScan] ),
    ALLEXCEPT ( 'Table', 'Table'[ComputerID] )
)
LastScan not in last X days =
VAR _diff = [theLastestDate] - [lastest by ComputerID]
RETURN
IF ( _diff <= MAX ( 'Last X days'[Last X days] ), 0, 1 )

3.Haga clic con el botón derecho en ComputerID en el Panel de formato y seleccione Formato condicional ->Color de fondo ->aplicar reglas

Mi visualización se ve así:

9.1.4.2.png9.1.4.3.png

¿Es el resultado lo que quieres? Si tiene alguna pregunta, cargue algunas muestras de datos y el resultado esperado.

Enmascare los datos confidenciales antes de cargarlos.

Atentamente,

Eyelyn Qin

lkalawski

Hola @ samw5

Tu forma de aprovechar Group By fue muy buena. Probablemente el siguiente paso que dio fue «expandir tabla» y mostró todos sus registros.

Antes de hacer eso, agregue una columna adicional (paso: Personalizado agregado) que seleccionará solo las filas máximas; puede usar este código:

let
    Source = [your source],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"CompID", Int64.Type}, {"ReleaseName", Int64.Type}, {"Column1", type datetime}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"CompID"}, {{"MaxDate", each List.Max([Column1]), type nullable datetime}, {"Details", each _, type table [CompID=nullable number, ReleaseName=nullable number, Column1=nullable datetime]}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "TopDate", each Table.Max([Details],"Column1")),
    #"Expanded TopDate" = Table.ExpandRecordColumn(#"Added Custom", "TopDate", {"ReleaseName", "Column2", "Column3"}, {"ReleaseName", "Column2", "Column3"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded TopDate",{"Details"})
in
    #"Removed Columns"

También te preparé el archivo con solución. Encuéntrelo utilizando este enlace: https://gofile.io/d/FRY381

EDITAR: archivo con sus datos: https://gofile.io/d/QjqJC0

_______________
Si ayudé, por favor acepta la solución y felicita! 😀

samw5

En respuesta a lkalawski

¡Eso funciona!

Stachu

¿Puede agregar tablas de muestra (en un formato que se puede copiar a PowerBI) de su modelo con datos anonimizados? Así (solo copie y pegue en la ventana de publicación).

Columna1 Columna 2
A 1
B 2,5

Está buscando una solución PowerQuery, ¿correcto?

samw5

En respuesta a Stachu

En última instancia, no me importa si el filtro se aplica en PowerQuery, solo estoy tratando de crear una tabla en PowerBI Desktop que muestre las máquinas que no han tenido un «LastScan» en los últimos x días.
Parece que no pude averiguar cómo hacer esto con el filtro relevante en el visual.

ComputerID ReleaseName Último vistazo
g: 6755413576635087 1909 2020-08-30T13: 04: 01.0560000 + 00: 00
g: 6755413576635087 KB4566116 (18362.1049) 2020-08-30T13: 04: 01.0560000 + 00: 00
g: 6755413576635087 KB4565483 (18362.959) 2020-08-30T13: 04: 01.0560000 + 00: 00
g: 6755413576635087 2004 2020-08-30T13: 04: 01.0560000 + 00: 00
g: 6755413576635087 KB4565351 (18362.1016) 2020-08-30T13: 04: 01.0560000 + 00: 00
g: 6755413576635087 KB4559004 (18362.997) 2020-08-30T13: 04: 01.0560000 + 00: 00
g: 6755413576635087 1903 2020-08-25T04: 33: 51.0780000 + 00: 00
g: 6755413576635087 KB4560960 (18362.900) 2020-07-16T04: 15: 07.5150000 + 00: 00
g: 6896145144193208 KB4565483 (18362.959) 2020-08-30T13: 56: 57.6200000 + 00: 00
g: 6896145144193208 KB4566116 (18362.1049) 2020-08-30T13: 56: 57.6200000 + 00: 00
g: 6896145144193208 2004 2020-08-30T13: 56: 57.6200000 + 00: 00
g: 6896145144193208 1909 2020-08-30T13: 56: 57.6200000 + 00: 00
g: 6896145144193208 KB4565351 (18362.1016) 2020-08-30T13: 56: 57.6200000 + 00: 00
g: 6896145144193208 KB4559004 (18362.997) 2020-08-30T13: 56: 57.6200000 + 00: 00
g: 6896145144193208 KB4560960 (18362.900) 2020-07-28T19: 45: 24.4880000 + 00: 00
g: 6966508001147294 KB4559004 (18362.997) 2020-08-30T13: 06: 01.0850000 + 00: 00
g: 6966508001147294 KB4565483 (18362.959) 2020-08-30T13: 06: 01.0850000 + 00: 00
g: 6966508001147294 1909 2020-08-30T13: 06: 01.0850000 + 00: 00

Stachu

En respuesta a samw5

podrías hacer una medida como esta:

NrOfComputersScanned = 
VAR __nrOfDaysInScope = 1
VAR __computers = GROUPBY('Table','Table'[ComputerID],"LatestScan",MAXX(CURRENTGROUP(),[LastScan]))
VAR __validComputers = FILTER(__computers,[LatestScan]>=TODAY()-__nrOfDaysInScope)
RETURN
COUNTROWS(__validComputers

que limitará los identificadores de computadora a los relevantes, solo necesita agregar cualquier lógica adicional que desee calcular

puede cambiar la cantidad de días en el alcance usando la primera variable

Deja un comentario

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