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.
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! 😀
Eyelyn9
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:
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í:
¿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