영어로 읽기

다음을 통해 공유


top-nested 연산자

적용 대상: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft 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 사용하면 더 넓은 데이터 집합에서 컨텍스트화된 상위 콘텐츠를 볼 수 있습니다. 이러한 방식으로 데이터를 평가하는 것은 데이터를 시각적으로 렌더링할 때 유용합니다.

다른 열의 데이터 포함

Exprtop-nested 지정된 열만 출력 테이블에 표시됩니다.

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

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

출력

가장 많은 속성이 손상된 상위 5개 상태와 다른 모든 상태가 개별적으로 원형 차트로 렌더링된 스크린샷.

다른 열 데이터가 있는 상태당 가장 최근 이벤트

다음 쿼리는 관련 이벤트 세부 정보를 사용하여 각 미국 주에 대한 두 개의 가장 최근 이벤트를 검색합니다. 특정 열 내에서 상위 중첩된 선택 논리를 사용하지 않고 데이터를 전파하는 데 사용됩니다 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 으로 데이터를 분할합니다. 각각idtimestamp에 대해 . 다른 정보는 개수를 지정하지 않고 자리 표시자로 사용하지 않고 연산자를 사용하여 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