Operador top-nested
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
El top-nested
operador realiza la agregación jerárquica y la selección de valores.
Imagine que tiene una tabla con información de ventas como regiones, vendedores y cantidades vendidas. El top-nested
operador puede ayudarle a responder preguntas complejas, como "¿Cuáles son las cinco principales regiones por ventas y cuáles son los tres principales vendedores de cada una de esas regiones?"
Los datos de origen se particionan en función de los criterios establecidos en la primera top-nested
cláusula, como la región. A continuación, el operador elige los registros principales de cada partición mediante una agregación, como agregar cantidades de ventas. Cada cláusula posterior top-nested
refina las particiones creadas por la cláusula anterior, creando una jerarquía de grupos más precisos.
El resultado es una tabla con dos columnas por cláusula. Una columna contiene los valores de creación de particiones, como región, mientras que la otra columna contiene los resultados del cálculo de agregación, como la suma de ventas.
Sintaxis
T top-nested
|
[ N ] of
Expr [with
others
=
ConstExpr] by
Aggregation [asc
| desc
] [,
top-nested
... ]
Obtenga más información sobre las convenciones de sintaxis.
Parámetros
Nombre | Type | Obligatorio | Descripción |
---|---|---|---|
T | string |
✔️ | Expresión tabular de entrada. |
N. | int |
Número de valores principales que se van a devolver para este nivel de jerarquía. Si se omite, se devuelven todos los valores distintos. | |
Expr | string |
✔️ | Expresión sobre el registro de entrada que indica qué valor se va a devolver para este nivel de jerarquía. Normalmente, hace referencia a una columna de T o implica un cálculo como bin() en una columna. Opcionalmente, establezca un nombre de columna de salida como Name = Expr. |
ConstExpr | string |
Si se especifica, para cada nivel de jerarquía, se agrega un registro con el valor que es la agregación en todos los registros que no lo han establecido en la parte superior. | |
Agregación | string |
Función de agregación aplicada a registros con el mismo valor expr . El resultado determina los registros principales. Consulte Funciones de agregación admitidas. Opcionalmente, establezca un nombre de columna de salida como Agregación de = nombres. |
Funciones de agregación admitidas
Se admiten las siguientes funciones de agregación:
Nota:
También se admite cualquier combinación algebraica de las agregaciones.
Devoluciones
Tabla con dos columnas para cada cláusula. Una columna contiene valores únicos calculados mediante Expr y la otra columna muestra los resultados obtenidos del cálculo de agregación.
Uso de la with
others
cláusula
El uso del top-nested
operador con with
others
agrega la capacidad de ver el contenido superior contextualizado en un conjunto de datos más amplio. Evaluar los datos de esta manera es útil al representar los datos visualmente.
Incluir datos de otras columnas
Solo se muestran las columnas especificadas como cláusula top-nested
Expr en la tabla de salida.
Para incluir todos los valores de una columna en un nivel específico:
- No especifique el valor de N.
- Use el nombre de columna como valor de Expr.
- Use
Ignore=max(1)
como valor de Aggregation. - Quite la columna innecesaria
Ignore
con project-away.
Para obtener un ejemplo, consulte Eventos más recientes por estado con otros datos de columna.
Consideraciones sobre el rendimiento
El número de registros puede crecer exponencialmente con el número de cláusulas y el crecimiento del top-nested
registro es aún más rápido si no se especifica el parámetro N . Este operador puede consumir una cantidad considerable de recursos.
Si la distribución de agregaciones es irregular, limite el número de valores distintos que se van a devolver especificando N. A continuación, use la with
others
=
cláusula ConstExpr para obtener una idea del peso de todos los demás casos.
Ejemplos
Principales estados dañados, tipos de eventos y ubicaciones finales por daños en la propiedad
La consulta siguiente particiona la StormEvents
tabla por la State
columna y calcula el daño total de la propiedad para cada estado. La consulta selecciona los dos estados principales con la mayor cantidad de daños en la propiedad. Dentro de estos dos estados principales, la consulta agrupa los datos por EventType
y selecciona los tres tipos de eventos principales con mayor daño. A continuación, la consulta agrupa los datos por EndLocation
y selecciona con EndLocation
el daño más alto. Solo aparece un EndLocation
valor en los resultados, posiblemente debido a la gran naturaleza de los eventos de tormenta o no documentar la ubicación final.
StormEvents // Data source.
| top-nested 2 of State by sum(DamageProperty), // Top 2 States by total damaged property.
top-nested 3 of EventType by sum(DamageProperty), // Top 3 EventType by total damaged property for each State.
top-nested 1 of EndLocation by sum(DamageProperty) // Top 1 EndLocation by total damaged property for each EventType and State.
| project State, EventType, EndLocation, StateTotalDamage = aggregated_State, EventTypeTotalDamage = aggregated_EventType, EndLocationDamage = aggregated_EndLocation
Salida
State | EventType | EndLocation | StateTotalDamage | EventTypeTotalDamage | EndLocationDamage |
---|---|---|---|---|---|
CALIFORNIA | Wildfire | 1445937600 | 1326315000 | 1326315000 | |
CALIFORNIA | HighWind | 1445937600 | 61320000 | 61320000 | |
CALIFORNIA | DebrisFlow | 1445937600 | 48000000 | 48000000 | |
OKLAHOMA | IceStorm | 915470300 | 826000000 | 826000000 | |
OKLAHOMA | WinterStorm | 915470300 | 40027000 | 40027000 | |
OKLAHOMA | Inundación | COMERCIO | 915470300 | 21485000 | 20000000 |
Cinco estados principales con daños de with
others
propiedad agrupados
En el ejemplo siguiente se usa el top-nested
operador para identificar los cinco estados principales con la mayor cantidad de daños en la propiedad y se usa la cláusula para agrupar la with
others
propiedad dañada para todos los demás estados. A continuación, visualiza la propiedad dañada para los cinco estados principales y todos los demás estados como mediante piechart
el render
comando .
StormEvents
| top-nested 5 of State with others="OtherStates" by sum(DamageProperty)
| render piechart
Salida
Eventos más recientes por estado con otros datos de columna
La consulta siguiente recupera los dos eventos más recientes para cada estado de EE. UU. con los detalles de eventos pertinentes. Usa max(1)
dentro de determinadas columnas para propagar datos sin usar la lógica de selección anidada superior. Las columnas de agregación generadas Ignore
se quitan mediante project-away
.
StormEvents
| top-nested of State by Ignore0=max(1), // Partition the data by each unique value of state.
top-nested 2 of StartTime by Ignore1=max(StartTime), // Get the 2 most recent events in each state.
top-nested of EndTime by Ignore2=max(1), // Append the EndTime for each event.
top-nested of EpisodeId by Ignore3=max(1) // Append the EpisodeId for each event.
| project-away Ignore* // Remove the unnecessary aggregation columns.
| order by State asc, StartTime desc // Sort results alphabetically and chronologically.
Registros más recientes por identidad con otros datos de columna
En el ejemplo siguiente top-nested
se extraen los registros más recientes por identidad y se basan en los conceptos introducidos en el ejemplo anterior. La primera top-nested
cláusula particiona los datos por valores distintos de uso Ignore0=max(1)
como marcador de id
posición. Para cada id
, identifica los dos registros más recientes en función de timestamp
. Otra información se anexa mediante un top-nested
operador sin especificar un recuento y usar Ignore2=max(1)
como marcador de posición. Por último, las columnas de agregación innecesarias se quitan mediante el project-away
operador .
datatable(id: string, timestamp: datetime, otherInformation: string) // Create a source datatable.
[
"Barak", datetime(2015-01-01), "1",
"Barak", datetime(2016-01-01), "2",
"Barak", datetime(2017-01-20), "3",
"Donald", datetime(2017-01-20), "4",
"Donald", datetime(2017-01-18), "5",
"Donald", datetime(2017-01-19), "6"
]
| top-nested of id by Ignore0=max(1), // Partition the data by each unique value of id.
top-nested 2 of timestamp by Ignore1=max(timestamp), // Get the 2 most recent events for each state.
top-nested of otherInformation by Ignore2=max(1) // Append otherInformation for each event.
| project-away Ignore0, Ignore1, Ignore2 // Remove the unnecessary aggregation columns.
Salida
id | timestamp | otherInformation |
---|---|---|
Barak | 2016-01-01T00:00:00Z | 2 |
Donald | 2017-01-19T00:00:00Z | 6 |
Barak | 2017-01-20T00:00:00Z | 3 |
Donald | 2017-01-20T00:00:00Z | 4 |