top-nested 연산자
top-nested
연산자는 계층적 집계 및 값 선택을 수행합니다.
지역, 영업 사원 및 판매 금액과 같은 판매 정보가 포함된 테이블이 있다고 상상해 보십시오. 운영자는 top-nested
"판매 기준 상위 5개 지역은 무엇이며 각 지역에서 상위 3명의 영업 사원은 누구인가요?"와 같은 복잡한 질문에 대답하는 데 도움을 줄 수 있습니다.
원본 데이터는 지역과 같은 첫 번째 top-nested
절에 설정된 조건에 따라 분할됩니다. 다음으로 연산자는 판매 금액 추가와 같은 집계를 사용하여 각 파티션의 상위 레코드를 선택합니다. 각 후속 top-nested
절은 이전 절에서 만든 파티션을 구체화하여 보다 정확한 그룹의 계층 구조를 만듭니다.
결과는 절당 두 개의 열이 있는 테이블입니다. 한 열에는 지역과 같은 분할 값이 저장되며, 다른 열에는 판매 합계와 같은 집계 계산 결과가 있습니다.
Syntax
T|
top-nested
[ N ] of
Expr [with
others
=
ConstExpr] by
집계 [asc
| desc
] [,
top-nested
... ]
구문 규칙에 대해 자세히 알아보세요.
매개 변수
이름 | 형식 | 필수 | 설명 |
---|---|---|---|
T | string |
✔️ | 입력 테이블 형식 식입니다. |
N | int |
이 계층 수준에 대해 반환할 상위 값의 수입니다. 생략하면 모든 고유 값이 반환됩니다. | |
Expr | string |
✔️ | 이 계층 수준에 대해 반환할 값을 나타내는 입력 레코드에 대한 식입니다. 일반적으로 T 의 열을 참조하거나 열의 bin() 과 같은 계산을 포함합니다. 필요에 따라 출력 열 이름을 이름= Expr로 설정합니다. |
ConstExpr | string |
지정된 경우 각 계층 수준에 대해 하나의 레코드가 상위에 오르지 않은 모든 레코드에 대한 집계 값과 함께 추가됩니다. | |
집계 | string |
Expr 값이 동일한 레코드에 적용된 집계 함수입니다. 결과는 상위 레코드를 결정합니다. 지원되는 집계 함수를 참조하세요. 필요에 따라 출력 열 이름을 이름= 집계로 설정합니다. |
지원되는 집계 함수
지원되는 집계 함수는 다음과 같습니다.
참고
집계의 모든 대수 조합도 지원됩니다.
반환
각 절에 대해 두 개의 열이 있는 테이블입니다. 한 열에는 Expr을 사용하여 계산된 고유 값이 포함되고 다른 열은 집계 계산에서 얻은 결과를 보여 줍니다.
다른 열의 데이터 포함
Expr 절로 top-nested
지정된 열만 출력 테이블에 표시됩니다.
특정 수준에서 열의 모든 값을 포함하려면 다음을 수행합니다.
- N 값을 지정하지 마세요.
- 열 이름을 Expr 값으로 사용합니다.
- 을 집계 값으로 사용합니다
Ignore=max(1)
. - 프로젝트 어웨이를 사용하여 불필요한
Ignore
열을 제거합니다.
예를 들어 다른 열의 추가 데이터를 사용하여 상태당 가장 최근 이벤트 가져오기를 참조하세요.
성능 고려 사항
레코드 수는 절 수 top-nested
와 함께 기하급수적으로 증가할 수 있으며 N 제한이 지정되지 않은 경우 레코드 증가 속도가 더 빨라집니다. 이 연산자는 상당한 양의 리소스를 사용할 수 있습니다.
집계 분포가 상당히 균일하지 않은 경우 N을 지정하여 반환할 고유 값의 수를 제한합니다. 그런 다음 ConstExpr 사양을 사용하여 with
others
=
다른 모든 사례의 가중치에 대한 표시를 가져옵니다.
예제
연산자 top-nested
시작
다음 쿼리는 열을 기준으로 StormEvents
State
테이블을 분할하고 각 상태에 대한 총 위도를 계산합니다. 쿼리는 위도 합계가 가장 높은 상위 두 상태를 선택합니다. 이러한 상위 두 상태 내에서 쿼리는 데이터를 기준으로 Source
그룹화하고 위도 합계가 가장 높은 상위 3개 원본을 선택합니다. 상위 두 상태의 상위 3개 원본 각각에 대해 쿼리는 데이터를 기준으로 EndLocation
그룹화하고 위도 합계가 가장 높은 를 선택합니다 EndLocation
.
StormEvents // Data source.
| top-nested 2 of State by sum(BeginLat), // Top 2 States by total latitude.
top-nested 3 of Source by sum(BeginLat), // Top 3 Sources by total latitude in each State.
top-nested 1 of EndLocation by sum(BeginLat) // Top 1 EndLocation by total latitude in each Source and State.
출력
시스템 상태 | aggregated_State | Source | aggregated_Source | EndLocation | aggregated_EndLocation |
---|---|---|---|---|---|
캔자스 | 87771.2355000001 | 사법 기관 | 18744.823 | FT SCOTT | 264.858 |
캔자스 | 87771.2355000001 | 공용 | 22855.6206 | 버클린 () | 488.2457 |
캔자스 | 87771.2355000001 | 숙련된 관찰자 | 21279.7083 | 샤론 SPGS | 388.7404 |
텍사스 | 123400.5101 | 공용 | 13650.9079 | 애머릴로 | 246.2598 |
텍사스 | 123400.5101 | 사법 기관 | 37228.5966 | 페리턴 주 | 289.3178 |
텍사스 | 123400.5101 | 숙련된 관찰자 | 13997.7124 | 클로드 | 421.44 |
다른 열의 데이터를 사용하여 상위 중첩 결과 향상
다음 쿼리는 추가 top-nested
절을 도입하여 이전 예제를 기반으로 합니다. 이 새 절에서 숫자 사양이 없으므로 파티션 전체에서 의 모든 고유 값 EventType
이 추출됩니다. 집계 함수는 max(1)
단순히 자리 표시자일 뿐이며 결과와 무관하게 렌더링되므로 project-away 연산자는 열을 제거합니다 Ignore
. 결과는 이전에 집계된 데이터와 연결된 모든 이벤트 유형을 보여 줍니다.
StormEvents
| top-nested 2 of State by sum(BeginLat),
top-nested 3 of Source by sum(BeginLat),
top-nested 1 of EndLocation by sum(BeginLat),
top-nested of EventType by Ignore = max(1)
| project-away Ignore
출력
시스템 상태 | aggregated_State | Source | aggregated_Source | EndLocation | aggregated_EndLocation | EventType |
---|---|---|---|---|---|---|
텍사스 | 123400.51009999994 | 공용 | 13650.907900000002 | 애머릴로 | 246.25979999999998 | 우박 |
텍사스 | 123400.51009999994 | 공용 | 13650.907900000002 | 애머릴로 | 246.25979999999998 | 뇌우를 동반한 바람 |
캔자스 | 87771.235500000068 | 공용 | 22855.6206 | 버클린 () | 488.2457 | 홍수 |
캔자스 | 87771.235500000068 | 공용 | 22855.6206 | 버클린 () | 488.2457 | 뇌우를 동반한 바람 |
캔자스 | 87771.235500000068 | 공용 | 22855.6206 | 버클린 () | 488.2457 | 우박 |
텍사스 | 123400.51009999994 | 숙련된 관찰자 | 13997.712400000009 | 클로드 | 421.44 | 우박 |
캔자스 | 87771.235500000068 | 사법 기관 | 18744.823000000004 | FT SCOTT | 264.858 | 갑작스러운 홍수 |
캔자스 | 87771.235500000068 | 사법 기관 | 18744.823000000004 | FT SCOTT | 264.858 | 뇌우를 동반한 바람 |
캔자스 | 87771.235500000068 | 사법 기관 | 18744.823000000004 | FT SCOTT | 264.858 | 홍수 |
텍사스 | 123400.51009999994 | 사법 기관 | 37228.596599999961 | 페리턴 주 | 289.3178 | 우박 |
... | ... | ... | ... | ... | ... |
를 사용하여 with
others
제외된 데이터 탐색
절 내에 top-nested
통합된 경우 사양은 with
others
상위 결과에서 제외된 데이터를 집계하는 추가 레코드를 도입합니다. 다음 쿼리에서는 및 열에 State
캔자스와 aggregated_State
텍사스를 제외한 모든 주의 집합적 위도를 나타내는 추가 레코드가 만들어집니다. 또한 및 aggregated_EndLocation
열에는 EndLocation
9개의 레코드가 추가로 있습니다. 이러한 레코드는 각 상태 및 원본 내에서 상위 위치로 한정되지 않는 끝 위치의 결합된 위도를 보여 드립니다.
StormEvents
| top-nested 2 of State with others = "All Other States" by sum(BeginLat),
top-nested 3 of Source by sum(BeginLat),
top-nested 1 of EndLocation with others = "All Other End Locations" by sum(BeginLat)
출력
시스템 상태 | aggregated_State | Source | aggregated_Source | EndLocation | aggregated_EndLocation |
---|---|---|---|---|---|
캔자스 | 87771.2355000001 | 사법 기관 | 18744.823 | FT SCOTT | 264.858 |
캔자스 | 87771.2355000001 | 공용 | 22855.6206 | 버클린 () | 488.2457 |
캔자스 | 87771.2355000001 | 숙련된 관찰자 | 21279.7083 | 샤론 SPGS | 388.7404 |
텍사스 | 123400.5101 | 공용 | 13650.9079 | 애머릴로 | 246.2598 |
텍사스 | 123400.5101 | 사법 기관 | 37228.5966 | 페리턴 주 | 289.3178 |
텍사스 | 123400.5101 | 숙련된 관찰자 | 13997.7124 | 클로드 | 421.44 |
캔자스 | 87771.2355000001 | 사법 기관 | 18744.823 | 다른 모든 끝 위치 | 18479.965 |
캔자스 | 87771.2355000001 | 공용 | 22855.6206 | 다른 모든 끝 위치 | 22367.3749 |
캔자스 | 87771.2355000001 | 숙련된 관찰자 | 21279.7083 | 다른 모든 끝 위치 | 20890.9679 |
텍사스 | 123400.5101 | 공용 | 13650.9079 | 다른 모든 끝 위치 | 13404.6481 |
텍사스 | 123400.5101 | 사법 기관 | 37228.5966 | 다른 모든 끝 위치 | 36939.2788 |
텍사스 | 123400.5101 | 숙련된 관찰자 | 13997.7124 | 다른 모든 끝 위치 | 13576.2724 |
캔자스 | 87771.2355000001 | 다른 모든 끝 위치 | 24891.0836 | ||
텍사스 | 123400.5101 | 다른 모든 끝 위치 | 58523.2932000001 | ||
기타 모든 상태 | 1149279.5923 | 다른 모든 끝 위치 | 1149279.5923 |
다음 쿼리는 이전 예제에서 사용된 첫 번째 수준에 대해 동일한 결과를 보여줍니다.
StormEvents
| where State !in ('TEXAS', 'KANSAS')
| summarize sum(BeginLat)
출력
sum_BeginLat |
---|
1149279.5923 |
계층적 결과 정렬
포괄적인 정렬 순서를 달성하기 위해 다음 쿼리는 그룹별로 현재 계층 수준 내의 각 값에 대해 인덱스 기반 정렬을 사용합니다. 이 정렬은 궁극의 중첩 수준에 따라 결과를 정렬하는 데 맞춰집니다. 이 경우 입니다 EndLocation
.
StormEvents
| top-nested 2 of State by sum(BeginLat),
top-nested 2 of Source by sum(BeginLat),
top-nested 4 of EndLocation by sum(BeginLat)
| sort by State, Source, aggregated_EndLocation
| summarize
EndLocations = make_list(EndLocation, 10000),
endLocationSums = make_list(aggregated_EndLocation, 10000)
by State, Source
| extend indicies = range(0, array_length(EndLocations) - 1, 1)
| mv-expand EndLocations, endLocationSums, indicies
출력
시스템 상태 | Source | EndLocations | endLocationSums | 인덱스 |
---|---|---|---|---|
텍사스 | 숙련된 관찰자 | 클로드 | 421.44 | 0 |
텍사스 | 숙련된 관찰자 | 애머릴로 | 316.8892 | 1 |
텍사스 | 숙련된 관찰자 | 달하트 주 | 252.6186 | 2 |
텍사스 | 숙련된 관찰자 | 페리턴 주 | 216.7826 | 3 |
텍사스 | 사법 기관 | 페리턴 주 | 289.3178 | 0 |
텍사스 | 사법 기관 | Leakey | 267.9825 | 1 |
텍사스 | 사법 기관 | 브래킷빌 | 264.3483 | 2 |
텍사스 | 사법 기관 | 길머 () | 261.9068 | 3 |
캔자스 | 숙련된 관찰자 | 샤론 SPGS | 388.7404 | 0 |
캔자스 | 숙련된 관찰자 | ATWOOD | 358.6136 | 1 |
캔자스 | 숙련된 관찰자 | 레노라 (LENORA) | 317.0718 | 2 |
캔자스 | 숙련된 관찰자 | 스콧 시티 | 307.84 | 3 |
캔자스 | 공용 | 버클린 () | 488.2457 | 0 |
캔자스 | 공용 | 애 슐 랜드 | 446.4218 | 1 |
캔자스 | 공용 | 보호 | 446.11 | 2 |
캔자스 | 공용 | 미드 주립 공원 | 371.1 | 3 |
다른 열의 추가 데이터를 사용하여 상태당 가장 최근 이벤트 가져오기
다음 쿼리는 관련 이벤트 세부 정보와 함께 각 미국 주에 대해 가장 최근의 두 이벤트를 검색하는 방법을 보여 줍니다. 로 식별되는 Ignore*
특정 열 내에서 를 max(1)
사용하면 선택 논리를 적용하지 않고 쿼리를 통해 데이터를 전파하는 데 도움이 됩니다.
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당 최신 레코드 가져오기
다음 쿼리는 ID당 최신 레코드를 추출하는 방법을 보여 줍니다. 이전 예제에서 도입된 개념을 기반으로 합니다. 첫 번째 top-nested
절은 의 고유 값 id
으로 데이터를 분할합니다. 후속 절은 각 id
에 대한 를 기반으로 가장 최근의 두 레코드를 timestamp
식별합니다. 다른 정보는 지정되지 않은 개수 및 임 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 |
관련 콘텐츠
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기