top-nested 연산자

top-nested 연산자는 계층적 집계 및 값 선택을 수행합니다.

지역, 영업 사원 및 판매 금액과 같은 판매 정보가 포함된 테이블이 있다고 상상해 보십시오. 운영자는 top-nested "판매 기준 상위 5개 지역은 무엇이며 각 지역에서 상위 3명의 영업 사원은 누구인가요?"와 같은 복잡한 질문에 대답하는 데 도움을 줄 수 있습니다.

원본 데이터는 지역과 같은 첫 번째 top-nested 절에 설정된 조건에 따라 분할됩니다. 다음으로 연산자는 판매 금액 추가와 같은 집계를 사용하여 각 파티션의 상위 레코드를 선택합니다. 각 후속 top-nested 절은 이전 절에서 만든 파티션을 구체화하여 보다 정확한 그룹의 계층 구조를 만듭니다.

결과는 절당 두 개의 열이 있는 테이블입니다. 한 열에는 지역과 같은 분할 값이 저장되며, 다른 열에는 판매 합계와 같은 집계 계산 결과가 있습니다.

Syntax

T|top-nested [ N ] ofExpr [withothers=ConstExpr] by집계 [asc | desc] [,
  top-nested ... ]

구문 규칙에 대해 자세히 알아보세요.

매개 변수

이름 형식 필수 설명
T string ✔️ 입력 테이블 형식 식입니다.
N int 이 계층 수준에 대해 반환할 상위 값의 수입니다. 생략하면 모든 고유 값이 반환됩니다.
Expr string ✔️ 이 계층 수준에 대해 반환할 값을 나타내는 입력 레코드에 대한 식입니다. 일반적으로 T 의 열을 참조하거나 열의 bin() 과 같은 계산을 포함합니다. 필요에 따라 출력 열 이름을 이름=Expr로 설정합니다.
ConstExpr string 지정된 경우 각 계층 수준에 대해 하나의 레코드가 상위에 오르지 않은 모든 레코드에 대한 집계 값과 함께 추가됩니다.
집계 string Expr 값이 동일한 레코드에 적용된 집계 함수입니다. 결과는 상위 레코드를 결정합니다. 지원되는 집계 함수를 참조하세요. 필요에 따라 출력 열 이름을 이름=집계로 설정합니다.

지원되는 집계 함수

지원되는 집계 함수는 다음과 같습니다.

참고

집계의 모든 대수 조합도 지원됩니다.

반환

각 절에 대해 두 개의 열이 있는 테이블입니다. 한 열에는 Expr을 사용하여 계산된 고유 값이 포함되고 다른 열은 집계 계산에서 얻은 결과를 보여 줍니다.

다른 열의 데이터 포함

Expr 절로 top-nested 지정된 열만 출력 테이블에 표시됩니다.

특정 수준에서 열의 모든 값을 포함하려면 다음을 수행합니다.

  1. N 값을 지정하지 마세요.
  2. 열 이름을 Expr 값으로 사용합니다.
  3. 집계 값으로 사용합니다Ignore=max(1).
  4. 프로젝트 어웨이를 사용하여 불필요한 Ignore 열을 제거합니다.

예를 들어 다른 열의 추가 데이터를 사용하여 상태당 가장 최근 이벤트 가져오기를 참조하세요.

성능 고려 사항

레코드 수는 절 수 top-nested 와 함께 기하급수적으로 증가할 수 있으며 N 제한이 지정되지 않은 경우 레코드 증가 속도가 더 빨라집니다. 이 연산자는 상당한 양의 리소스를 사용할 수 있습니다.

집계 분포가 상당히 균일하지 않은 경우 N을 지정하여 반환할 고유 값의 수를 제한합니다. 그런 다음 ConstExpr 사양을 사용하여 withothers= 다른 모든 사례의 가중치에 대한 표시를 가져옵니다.

예제

연산자 top-nested 시작

다음 쿼리는 열을 기준으로 StormEventsState 테이블을 분할하고 각 상태에 대한 총 위도를 계산합니다. 쿼리는 위도 합계가 가장 높은 상위 두 상태를 선택합니다. 이러한 상위 두 상태 내에서 쿼리는 데이터를 기준으로 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 우박
... ... ... ... ... ...

를 사용하여 withothers 제외된 데이터 탐색

절 내에 top-nested 통합된 경우 사양은 withothers 상위 결과에서 제외된 데이터를 집계하는 추가 레코드를 도입합니다. 다음 쿼리에서는 및 열에 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