top-nested 연산자
적용 대상: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
top-nested
연산자는 계층적 집계 및 값 선택을 수행합니다.
지역, 영업 사원 및 판매 금액과 같은 판매 정보가 포함된 테이블이 있다고 상상해 보십시오. 운영자는 top-nested
"매출 기준 상위 5개 지역은 무엇이며 각 지역에서 상위 3명의 영업 사원은 누구인가?"와 같은 복잡한 질문에 답할 수 있습니다.
원본 데이터는 지역과 같은 첫 번째 top-nested
절에 설정된 조건에 따라 분할됩니다. 다음으로, 연산자는 판매액 추가와 같은 집계를 사용하여 각 파티션의 상위 레코드를 선택합니다. 각 후속 top-nested
절은 이전 절에서 만든 파티션을 구체화하여 보다 정확한 그룹의 계층 구조를 만듭니다.
그 결과 절당 두 개의 열이 있는 테이블이 생성됩니다. 한 열은 지역과 같은 분할 값을 보유하는 반면, 다른 열은 매출 합계와 같은 집계 계산 결과를 보유합니다.
구문
T top-nested
|
[ N ] of
Expr [with
others
=
ConstExpr] by
집계 [asc
| desc
] [,
top-nested
... ]
구문 규칙에 대해 자세히 알아봅니다.
매개 변수
이름 | Type | 필수 | 설명 |
---|---|---|---|
T | string |
✔️ | 입력 테이블 형식 식입니다. |
N | int |
이 계층 수준에 대해 반환할 상위 값의 수입니다. 생략하면 모든 고유 값이 반환됩니다. | |
Expr | string |
✔️ | 이 계층 수준에 대해 반환할 값을 나타내는 입력 레코드에 대한 식입니다. 일반적으로 T의 열을 참조하거나 열에 bin()과 같은 계산을 포함합니다. 필요에 따라 출력 열 이름을 Name = Expr로 설정합니다. |
ConstExpr | string |
지정된 경우 각 계층 수준에 대해 하나의 레코드가 상위에 오르지 않은 모든 레코드에 대한 집계 값과 함께 추가됩니다. | |
집계 | string |
Expr 값이 동일한 레코드에 적용된 집계 함수입니다. 결과는 상위 레코드를 결정합니다. 지원되는 집계 함수를 참조 하세요. 필요에 따라 출력 열 이름을 이름 = 집계로 설정합니다. |
지원되는 집계 함수
지원되는 집계 함수는 다음과 같습니다.
참고 항목
집계의 대수 조합도 지원됩니다.
반품
각 절에 대해 두 개의 열이 있는 테이블입니다. 한 열에는 Expr을 사용하여 계산된 고유 값이 포함되고 다른 열은 집계 계산에서 얻은 결과를 보여 줍니다.
with
others
절 사용
연산 with
others
자를 top-nested
사용하면 더 넓은 데이터 집합에서 컨텍스트화된 상위 콘텐츠를 볼 수 있습니다. 이러한 방식으로 데이터를 평가하는 것은 데이터를 시각적으로 렌더링할 때 유용합니다.
다른 열의 데이터 포함
Expr 절로 top-nested
지정된 열만 출력 테이블에 표시됩니다.
특정 수준에서 열의 모든 값을 포함하려면 다음을 수행합니다.
- N 값을 지정하지 마세요.
- 열 이름을 Expr 값으로 사용합니다.
- 집계 값으로 사용합니다
Ignore=max(1)
. - 프로젝트 어웨이를 사용하여 불필요한
Ignore
열을 제거합니다.
예를 들어 다른 열 데이터가 있는 상태당 가장 최근 이벤트를 참조 하세요.
성능 고려 사항
레코드 수는 절 수 top-nested
와 함께 기하급수적으로 증가할 수 있으며 N 매개 변수를 지정하지 않으면 레코드 증가 속도가 더 빨라집니다. 이 연산자는 상당한 양의 리소스를 사용할 수 있습니다.
집계 분포가 불규칙한 경우 N을 지정하여 반환할 고유 값의 수를 제한합니다. 그런 다음 ConstExpr 절을 사용하여 with
others
=
다른 모든 사례의 가중치를 파악합니다.
예제
속성 손상으로 인해 가장 손상된 상태, 이벤트 유형 및 최종 위치
다음 쿼리는 열을 통해 State
테이블을 분할 StormEvents
하고 각 상태에 대한 총 속성 손상을 계산합니다. 쿼리는 속성 손상이 가장 큰 상위 두 상태를 선택합니다. 이러한 상위 두 상태 내에서 쿼리는 데이터를 그룹화하고 EventType
가장 큰 피해를 주는 상위 3개 이벤트 유형을 선택합니다. 그런 다음, 쿼리는 데이터를 그룹화하여 가장 큰 피해를 입은 데이터를 EndLocation
선택합니다 EndLocation
. 폭풍 이벤트의 큰 특성 또는 끝 위치를 문서화하지 않기 때문에 결과에 값이 하나 EndLocation
만 나타납니다.
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
출력
State(상태) | EventType | EndLocation | StateTotalDamage | EventTypeTotalDamage | EndLocationDamage |
---|---|---|---|---|---|
캘리포니아 | Wildfire | 1445937600 | 1326315000 | 1326315000 | |
캘리포니아 | HighWind | 1445937600 | 61320000 | 61320000 | |
캘리포니아 | DebrisFlow | 1445937600 | 48000000 | 48000000 | |
OKLAHOMA | IceStorm | 915470300 | 826000000 | 826000000 | |
OKLAHOMA | WinterStorm | 915470300 | 40027000 | 40027000 | |
OKLAHOMA | 홍수 | COMMERCE | 915470300 | 21485000 | 20000000 |
재산 피해 with
others
가 그룹화된 상위 5개 주
다음 예제에서는 연산자를 top-nested
사용하여 속성 손상이 가장 많은 상위 5개 상태를 식별하고 절을 with
others
사용하여 다른 모든 상태에 대해 손상된 속성을 그룹화합니다. 그런 다음 상위 5개 주와 다른 모든 상태에 대한 손상된 속성을 using render
명령으로 piechart
시각화합니다.
StormEvents
| top-nested 5 of State with others="OtherStates" by sum(DamageProperty)
| render piechart
출력
다른 열 데이터가 있는 상태당 가장 최근 이벤트
다음 쿼리는 관련 이벤트 세부 정보를 사용하여 각 미국 주에 대한 두 개의 가장 최근 이벤트를 검색합니다. 특정 열 내에서 상위 중첩된 선택 논리를 사용하지 않고 데이터를 전파하는 데 사용됩니다 max(1)
. 생성된 Ignore
집계 열은 .를 사용하여 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.
다른 열 데이터를 사용하여 ID당 최신 레코드
다음 예제에서는 top-nested
ID당 최신 레코드를 추출하고 이전 예제에 도입된 개념을 기반으로 합니다. 첫 번째 top-nested
절은 자리 표시자로 사용하는 Ignore0=max(1)
고유 값 id
으로 데이터를 분할합니다. 각각id
timestamp
에 대해 . 다른 정보는 개수를 지정하지 않고 자리 표시자로 사용하지 않고 연산자를 사용하여 Ignore2=max(1)
추가 top-nested
됩니다. 마지막으로, 연산자를 사용하여 project-away
불필요한 집계 열이 제거됩니다.
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.
출력
id | timestamp | otherInformation |
---|---|---|
바라크 주 | 2016-01-01T00:00:00Z | 2 |
도널드 | 2017-01-19T00:00:00Z | 6 |
바라크 주 | 2017-01-20T00:00:00Z | 3 |
도널드 | 2017-01-20T00:00:00Z | 4 |