Power BI Desktop에서 집계 사용Use aggregations in Power BI Desktop

Power BI의 집계를 사용하면 테이블 크기를 줄여 중요한 데이터에 집중하고 쿼리 성능을 향상할 수 있습니다.Aggregations in Power BI let you reduce table sizes so you can focus on important data and improve query performance. 집계를 사용하면 다른 방법으로는 불가능한 방식으로 빅 데이터에 대한 대화형 분석을 수행할 수 있으며, 의사 결정을 위해 빅 데이터 세트를 잠금 해제하는 비용을 크게 줄일 수 있습니다.Aggregations enable interactive analysis over big data in ways that aren't possible otherwise, and can dramatically reduce the cost of unlocking large datasets for decision making.

집계를 사용하면 다음과 같은 이점이 있습니다.Some advantages of using aggregations include:

  • 빅 데이터에 대한 쿼리 성능 향상.Better query performance over big data. Power BI 시각적 개체와의 모든 상호 작용은 DAX 쿼리를 데이터 세트에 제출합니다.Every interaction with Power BI visuals submits DAX queries to the dataset. 캐시된 집계 데이터는 세부 데이터에 필요한 리소스의 일부를 사용하므로, 다른 방법으로는 액세스할 수 없는 빅 데이터의 잠금을 해제할 수 있습니다.Cached aggregated data uses a fraction of the resources required for detail data, so you can unlock big data that would otherwise be inaccessible.
  • 최적화된 데이터 새로 고침.Optimized data refresh. 캐시 크기가 작을수록 새로 고침 시간이 줄어들고 데이터가 사용자에게 빠르게 전달됩니다.Smaller cache sizes reduce refresh times, so data gets to users faster.
  • 균형 잡힌 아키텍처.Balanced architectures. Power BI의 메모리 내 캐시는 집계된 쿼리를 처리할 수 있으며 DirectQuery 모드에서 전송된 쿼리를 제한하여 동시성 제한을 충족하는 데 도움이 됩니다.The Power BI in-memory cache can handle aggregated queries, limiting queries sent in DirectQuery mode and helping you meet concurrency limits. 나머지 세부 수준 쿼리는 데이터 웨어하우스 및 빅 데이터 시스템에서 일반적으로 잘 처리하는 트랜잭션 수준 쿼리로 필터링되는 경향이 있습니다.The remaining detail-level queries tend to be filtered, transactional-level queries, which data warehouses and big-data systems normally handle well.

Microsoft Power BI Desktop의 집계

데이터 웨어하우스와 데이터 마트 같은 차원 데이터 원본은 관계 기반 집계를 사용할 수 있습니다.Dimensional data sources, like data warehouses and data marts, can use relationship-based aggregations. Hadoop 기반 빅 데이터 원본은 종종 GroupBy 열에 대한 기본 집계를 수행하기도 합니다.Hadoop-based big-data sources often base aggregations on GroupBy columns. 이 문서에서는 각 유형의 데이터 원본에 대한 일반적인 Power BI 모델링 차이점에 대해 설명합니다.This article describes typical Power BI modeling differences for each type of data source.

집계 테이블 만들기Create an aggregated table

집계 테이블을 만들려면 다음을 수행해야 합니다.To create an aggregated table:

  1. 데이터 원본 및 모델에 따라 원하는 필드를 사용하여 새 테이블을 설정합니다.Set up a new table with the fields you want, depending on your data source and model.
  2. 집계 관리 대화 상자를 사용하여 집계를 정의합니다.Define the aggregations by using the Manage aggregations dialog.
  3. 해당하는 경우 집계된 테이블에 대한 스토리지 모드를 변경합니다.If applicable, change the storage mode for the aggregated table.

집계 관리Manage aggregations

원하는 필드를 포함하는 새 테이블을 만든 후 Power BI Desktop 보기의 필드 창에서 테이블을 마우스 오른쪽 단추로 클릭하고 집계 관리를 선택합니다.After you create the new table that has the fields you want, in the Fields pane of any Power BI Desktop view, right-click the table, and select Manage aggregations.

집계 관리 선택

집계 관리 대화 상자에는 테이블의 각 열에 대한 행이 표시되며, 여기서 집계 동작을 지정할 수 있습니다.The Manage aggregations dialog shows a row for each column in the table, where you can specify the aggregation behavior. 다음 예에서는 판매 세부 정보 테이블에 대한 쿼리가 내부적으로 판매 집계 집계 테이블로 리디렉션됩니다.In the following example, queries to the Sales detail table are internally redirected to the Sales Agg aggregation table.

집계 관리 대화 상자의 요약 드롭다운은 다음 값을 제공합니다.The Summarization drop-down in the Manage aggregations dialog offers the following values:

  • 개수Count
  • GroupByGroupBy
  • MaxMax
  • MinMin
  • SumSum
  • 테이블 행 수 계산Count table rows

집계 관리 대화 상자를 보여 주는 스크린샷.

이 관계 기반 집계 예제에서 GroupBy 항목은 선택 사항입니다.In this relationship-based aggregation example, the GroupBy entries are optional. DISTINCTCOUNT를 제외하고는 집계 동작에 영향을 주지 않으며 주로 가독성을 높이기 위한 것입니다.Except for DISTINCTCOUNT, they don't affect aggregation behavior, and are primarily for readability. GroupBy 항목이 없는 경우에도 집계는 관계를 기반으로 하여 계속 적중합니다.Without the GroupBy entries, the aggregations would still get hit, based on the relationships. 해당 내용은 이 문서 뒷부분에 있는 GroupBy 항목이 필요한 빅 데이터 예제와 다릅니다.This is different from the big data example later in this article, where the GroupBy entries are required.

원하는 집계를 정의한 후 모두 적용을 선택합니다.After defining the aggregations you want, select Apply All.

유효성 검사Validations

집계 관리 대화 상자는 다음과 같은 주목할 만한 유효성 검사를 시행합니다.The Manage aggregations dialog enforces the following notable validations:

  • 세부 정보 열에는 Count 및 Count 테이블 행 요약 함수를 제외하고는 집계 열과 동일한 데이터 형식이 있어야 합니다.The Detail Column must have the same datatype as the Aggregation Column, except for the Count and Count table rows Summarization functions. Count 및 테이블 행 수 계산은 정수 집계 열에 대해서만 사용할 수 있으며, 일치하는 데이터 형식은 필요하지 않습니다.Count and Count table rows are only available for integer aggregation columns, and don't require a matching datatype.
  • 셋 이상의 테이블이 포함된 연결 집계는 허용되지 않습니다.Chained aggregations covering three or more tables aren't allowed. 예를 들어 테이블 A에 대한 집계는 테이블 C를 참조하는 집계가 있는 테이블 B를 참조할 수 없습니다.For example, aggregations on Table A can't refer to a Table B that has aggregations referring to a Table C.
  • 두 항목에서 동일한 요약 함수를 사용하고 동일한 세부 정보 테이블세부 정보 열을 참조하는 중복 집계는 허용되지 않습니다.Duplicate aggregations, where two entries use the same Summarization function and refer to the same Detail Table and Detail Column, aren't allowed.
  • 정보 테이블은 가져오기가 아닌 DirectQuery 스토리지 모드를 사용해야 합니다.The Detail Table must use DirectQuery storage mode, not Import.
  • 비활성 관계에서 사용되는 외래 키 열로 그룹화하고 집계 적중에 USERELATIONSHIP 함수를 사용하는 기능은 지원되지 않습니다.Grouping by a foreign key column used by an inactive relationship, and relying on the USERELATIONSHIP function for aggregation hits, isn't supported.

대부분의 이러한 유효성 검사는 다음 이미지와 같이 드롭다운 값을 사용하지 않도록 설정하고 도구 설명에 설명 텍스트를 표시함으로써 적용됩니다.Most of the validations are enforced by disabling dropdown values and showing explanatory text in the tooltip, as shown in the following image.

도구 설명에서 보여 주는 유효성 검사

집계 테이블 숨김Aggregation tables are hidden

데이터 세트에 대한 읽기 전용 액세스 권한이 있는 사용자는 집계 테이블을 쿼리할 수 없습니다.Users with read-only access to the dataset can't query aggregation tables. 따라서 RLS(행 수준 보안) 와 함께 사용하는 경우 보안 문제가 방지됩니다.This avoids security concerns when used with row-level security (RLS). 소비자 및 쿼리는 집계 테이블이 아닌 세부 정보 테이블을 참조하며, 집계 테이블에 대해 알 필요가 없습니다.Consumers and queries refer to the detail table, not the aggregation table, and don't need to know about the aggregation table.

이러한 이유로 집계 테이블은 보고서 보기에서 숨겨집니다.For this reason, aggregation tables are hidden from Report view. 테이블이 아직 숨겨져 있지 않은 경우 모두 적용을 선택하면 집계 관리 대화 상자에서 이를 숨김으로 설정합니다.If the table isn't already hidden, the Manage aggregations dialog will set it to hidden when you select Apply all.

스토리지 모드Storage modes

집계 기능은 테이블 수준 스토리지 모드와 상호 작용합니다.The aggregation feature interacts with table-level storage modes. Power BI 테이블은 DirectQuery, 가져오기 또는 이중 스토리지 모드를 사용할 수 있습니다.Power BI tables can use DirectQuery, Import, or Dual storage modes. DirectQuery는 백엔드를 직접 쿼리하지만 가져오기는 메모리에 데이터를 캐시하고 캐시된 데이터로 쿼리를 보냅니다.DirectQuery queries the backend directly, while Import caches data in memory and sends queries to the cached data. 모든 Power BI 가져오기 및 다차원이 아닌 DirectQuery 데이터 원본은 집계와 함께 작동할 수 있습니다.All Power BI Import and non-multidimensional DirectQuery data sources can work with aggregations.

집계된 테이블의 스토리지 모드를 가져오기로 설정하여 쿼리 속도를 높이려면 모델 보기에서 Power BI Desktop의 집계 테이블을 선택합니다.To set the storage mode of an aggregated table to Import to speed up queries, select the aggregated table in Power BI Desktop Model view. 속성 창에서 고급을 확장하고 스토리지 모드에서 선택을 드롭다운한 다음 가져오기를 선택합니다.In the Properties pane, expand Advanced, drop down the selection under Storage mode, and select Import. 이 작업은 되돌릴 수 없습니다.Note that this action is irreversible.

스토리지 모드 설정

테이블 스토리지 모드에 대한 자세한 내용은 Power BI Desktop의 스토리지 모드 관리를 참조하세요.For more information about table storage modes, see Manage storage mode in Power BI Desktop.

집계에 대한 RLSRLS for aggregations

RLS(행 수준 보안) 식이 집계에 대해 올바르게 작동하려면 집계 테이블과 세부 정보 테이블을 둘 다 필터링해야 합니다.To work correctly for aggregations, RLS expressions should filter both the aggregation table and the detail table.

예제를 계속 살펴보면, Geography가 판매 테이블 및 판매 집계 테이블에 모두에 대한 관계의 필터링 쪽에 있으므로 Geography 테이블의 RLS 식은 집계에 사용됩니다.In the following example, the RLS expression on the Geography table works for aggregations, because Geography is on the filtering side of relationships to both the Sales table and the Sales Agg table. 집계 테이블에 도달하는 쿼리와 도달하지 않는 쿼리 모두에서 RLS가 성공적으로 적용됩니다.Queries that hit the aggregation table and those that don't will both have RLS successfully applied.

집계를 위한 성공적인 RLS

제품 테이블의 RLS 식은 집계된 판매 집계 테이블이 아니라 세부 판매 테이블만 필터링합니다.An RLS expression on the Product table filters only the detail Sales table, not the aggregated Sales Agg table. 집계 테이블은 세부 정보 테이블에 있는 동일한 데이터의 다른 표현이기 때문에 RLS 필터를 적용할 수 없다면 집계 테이블의 쿼리에 응답하는 것은 안전하지 않습니다.Since the aggregation table is another representation of the data in the detail table, it would be insecure to answer queries from the aggregation table if the RLS filter can't be applied. 이 역할의 사용자 쿼리는 집계 적중의 이점을 활용하지 않으므로 세부 정보 테이블만 필터링하지 않는 것이 좋습니다.Filtering only the detail table isn't recommended, because user queries from this role won't benefit from aggregation hits.

판매 집계 집계 테이블만 필터링하고 판매 세부 정보 테이블은 필터링하지 않는 RLS 식은 허용되지 않습니다.An RLS expression that filters only the Sales Agg aggregation table and not the Sales detail table isn't allowed.

집계 테이블에서만 RLS를 사용할 수 없습니다.

GroupBy 열을 기반으로 하는 집계의 경우, 집계 테이블의 모든 GroupBy 열이 세부 정보 테이블에서 처리되므로 세부 정보 테이블에 적용된 RLS 식을 사용하여 집계 테이블을 필터링할 수 있습니다.For aggregations based on GroupBy columns, an RLS expression applied to the detail table can be used to filter the aggregation table, because all the GroupBy columns in the aggregation table are covered by the detail table. 반면에 집계 테이블의 RLS 필터는 세부 정보 테이블에 적용할 수 없으므로, 허용되지 않습니다.On the other hand, an RLS filter on the aggregation table can't be applied to the detail table, so is disallowed.

관계 기반 집계Aggregation based on relationships

차원 모델은 일반적으로 관계에 따른 집계를 사용합니다.Dimensional models typically use aggregations based on relationships. 데이터 웨어하우스 및 데이터 마트의 Power BI 데이터 세트는 차원 테이블과 팩트 테이블 간의 관계가 있는 별모양 스키마 및 눈송이 스키마와 비슷합니다.Power BI datasets from data warehouses and data marts resemble star/snowflake schemas, with relationships between dimension tables and fact tables.

단일 데이터 원본의 다음 모델에서 테이블은 DirectQuery 스토리지 모드를 사용합니다.In the following model from a single data source, the tables are using DirectQuery storage mode. Sales(판매) 팩트 테이블에는 수십억 개의 행이 있습니다.The Sales fact table contains billions of rows. 캐싱을 위해 판매의 스토리지 모드를 가져오기로 설정하면 상당한 메모리 및 관리 오버헤드가 사용됩니다.Setting the storage mode of Sales to Import for caching would consume considerable memory and management overhead.

모델의 세부 정보 테이블

대신 판매 집계 집계 테이블을 만듭니다.Instead, create the Sales Agg aggregation table. 판매 집계 테이블에서 행 수는 CustomerKey, DateKeyProductSubcategoryKey별로 그룹화된 SalesAmount Amount의 합계와 같습니다.In the Sales Agg table, the number of rows equals the sum of SalesAmount grouped by CustomerKey, DateKey, and ProductSubcategoryKey. 판매 집계 테이블은 판매보다 높은 세분성을 가지므로 수십억 대신 수백만 행이 포함되어 관리하기가 훨씬 쉽습니다.The Sales Agg table is at a higher granularity than Sales, so instead of billions, it might contain millions of rows, which are much easier to manage.

다음 차원 테이블이 비즈니스 가치가 높은 쿼리에 가장 일반적으로 사용되는 경우에는 일 대 다 또는 다 대 일 관계를 사용하여 판매 집계를 필터링할 수 있습니다.If the following dimension tables are the most commonly used for the queries with high business value, they can filter Sales Agg, using one-to-many or many-to-one relationships.

  • 지리Geography
  • CustomerCustomer
  • DateDate
  • 제품 하위 범주Product Subcategory
  • 제품 범주Product Category

다음 이미지에서는 이 모델을 보여 줍니다.The following image shows this model.

모델의 집계 테이블

다음 표에는 Sales Agg 테이블에 대한 집계가 나와 있습니다.The following table shows the aggregations for the Sales Agg table.

판매 집계 테이블의 집계

참고

판매 집계 테이블은 다른 테이블과 마찬가지로 다양한 방식으로 유연하게 로드할 수 있습니다.The Sales Agg table, like any table, has the flexibility of being loaded in a variety of ways. 집계는 ETL/ELT 프로세스를 사용하거나 테이블에 대한 M 식을 통해 원본 데이터베이스에서 수행할 수 있습니다.The aggregation can be performed in the source database using ETL/ELT processes, or by the M expression for the table. 집계 테이블은 Power BI Premium에서 증분 새로 고침을 사용하는지 여부와 관계없이 가져오기 스토리지 모드를 사용하거나, DirectQuery를 사용할 수 있고 columnstore 인덱스를 사용하여 빠르게 쿼리하도록 최적화될 수 있습니다.The aggregated table can use Import storage mode, with or without incremental refresh in Power BI Premium, or it can use DirectQuery and be optimized for fast queries using columnstore indexes. 이러한 유연성 덕분에 쿼리 로드를 분산시키는 분산된 아키텍처를 가능하게 하여 병목 현상을 방지할 수 있습니다.This flexibility enables balanced architectures that can spread query load to avoid bottlenecks.

집계된 판매 집계 테이블의 스토리지 모드를 가져오기로 변경하면 관련 차원 테이블을 스토리지 모드 이중으로 설정할 수 있는 대화 상자가 열립니다.Changing the storage mode of the aggregated Sales Agg table to Import opens a dialog box saying that the related dimension tables can be set to storage mode Dual.

스토리지 모드 대화 상자

관련 차원 테이블을 이중으로 설정하면 하위 쿼리에 따라 [가져오기] 또는 DirectQuery로 작동할 수 있습니다.Setting the related dimension tables to Dual lets them act as either Import or DirectQuery, depending on the subquery. 예제:In the example:

  • 가져오기 모드의 판매 집계 테이블에서 메트릭을 집계하고 관련 이중 테이블의 특성별로 그룹화하는 쿼리는 메모리 내 캐시에서 반환될 수 있습니다.Queries that aggregate metrics from the Import-mode Sales Agg table, and group by attribute(s) from the related Dual tables, can be returned from the in-memory cache.
  • DirectQuery의 판매 테이블에서 집계 메트릭을 쿼리하고 관련 이중 테이블의 특성별로 그룹화하는 쿼리는 DirectQuery 모드에서 반환할 수 있습니다.Queries that aggregate metrics from the DirectQuery Sales table, and group by attribute(s) from the related Dual tables, can be returned in DirectQuery mode. 그룹화 작업이 포함된 쿼리 논리는 원본 데이터베이스로 전달됩니다.The query logic, including the GroupBy operation, is passed down to the source database.

이중 스토리지 모드에 대한 자세한 내용은 Power BI Desktop의 스토리지 모드 관리를 참조하세요.For more information about Dual storage mode, see Manage storage mode in Power BI Desktop.

일반 관계 및 제한된 관계 비교Regular vs. limited relationships

관계를 기반으로 하는 집계 적중은 일반 관계가 필요합니다.Aggregation hits based on relationships require regular relationships.

일반 관계에는 두 테이블이 모두 단일 원본에 있는 다음과 같은 스토리지 모드 조합이 포함됩니다.Regular relationships include the following storage mode combinations, where both tables are from a single source:

쪽의 테이블Table on the many sides ‘일’ 쪽의 테이블 Table on the 1 side
이중Dual 이중Dual
가져오기Import 가져오기 또는 이중Import or Dual
DirectQueryDirectQuery DirectQuery 또는 이중DirectQuery or Dual

cross-source 관계를 일반적인 것으로 간주하는 유일한 경우는 두 테이블이 모두 가져오기로 설정된 경우입니다.The only case where a cross-source relationship is considered regular is if both tables are set to Import. 다 대 다 관계는 항상 제한된 관계로 간주합니다.Many-to-many relationships are always considered limited.

관계에 의존하지 않는 cross-source 집계 적중의 경우 GroupBy 열 기반 집계를 참조하세요.For cross-source aggregation hits that don't depend on relationships, see Aggregations based on GroupBy columns.

관계 기반 집계 쿼리 예제Relationship-based aggregation query examples

Date 테이블의 열이 집계에 도달할 수 있는 세분성을 가지기 때문에 다음 쿼리는 집계에 도달합니다.The following query hits the aggregation, because columns in the Date table are at the granularity that can hit the aggregation. SalesAmount 열은 Sum 집계를 사용합니다.The SalesAmount column uses the Sum aggregation.

성공적인 관계 기반 집계 쿼리

다음 쿼리는 집계에 적중하지 않습니다.The following query doesn't hit the aggregation. SalesAmount의 합계를 요청했지만 쿼리가 제품 테이블의 열에 대해 그룹화 작업을 수행하고 있으며, 이는 집계에 영향을 줄 수 있는 세분성이 아닙니다.Despite requesting the sum of SalesAmount, the query is performing a GroupBy operation on a column in the Product table, which isn't at the granularity that can hit the aggregation. 모델에서 관계를 관찰하는 경우 제품 하위 범주에는 여러 제품 행이 있을 수 있습니다.If you observe the relationships in the model, a product subcategory can have multiple Product rows. 쿼리에서 집계할 제품을 확인할 수 없습니다.The query wouldn't be able to determine which product to aggregate to. 이 경우 쿼리는 DirectQuery로 되돌아가고 SQL 쿼리를 데이터 원본에 제출합니다.In this case, the query reverts to DirectQuery and submits a SQL query to the data source.

집계를 사용할 수 없는 쿼리

집계는 단순 합계를 수행하는 간단한 계산만을 위한 것이 아닙니다.Aggregations aren't just for simple calculations that perform a straightforward sum. 복잡한 계산에도 활용할 수 있습니다.Complex calculations can also benefit. 개념적으로 복잡한 계산은 각 SUM, MIN, MAX 및 COUNT에 대한 하위 쿼리로 분할되고, 집계에 적중할 수 있는지 판단하기 위해 각 하위 쿼리가 평가됩니다.Conceptually, a complex calculation is broken down into subqueries for each SUM, MIN, MAX, and COUNT, and each subquery is evaluated to determine if it can hit the aggregation. 이 논리는 쿼리 계획 최적화로 인해 모든 경우에 적용되는 것은 아니지만 일반적으로 적용해야 합니다.This logic doesn't hold true in all cases due to query-plan optimization, but in general it should apply. 다음 예제는 집계에 적중합니다.The following example hits the aggregation:

복합 집계 쿼리

COUNTROWS 함수는 집계를 통해 이점을 얻을 수 있습니다.The COUNTROWS function can benefit from aggregations. Sales 테이블에 대해 정의된 테이블 행 수 계산 집계가 있으므로 다음 쿼리는 집계에 적중합니다.The following query hits the aggregation because there is a Count table rows aggregation defined for the Sales table.

COUNTROWS 집계 쿼리

AVERAGE 함수는 집계를 통해 이점을 얻을 수 있습니다.The AVERAGE function can benefit from aggregations. AVERAGE가 내부적으로 COUNT로 나눈 SUM으로 접혀 있으므로 다음 쿼리는 집계에 적중합니다.The following query hits the aggregation because AVERAGE internally gets folded to a SUM divided by a COUNT. UnitPrice 열에 SUM 및 COUNT에 대해 정의된 집계가 있으므로 집계에 적중합니다.Since the UnitPrice column has aggregations defined for both SUM and COUNT, the aggregation is hit.

평균 집계 쿼리

경우에 따라 DISTINCTCOUNT 함수는 집계를 통해 이점을 얻을 수 있습니다.In some cases, the DISTINCTCOUNT function can benefit from aggregations. 집계 테이블에서 CustomerKey의 고유성을 유지하는 CustomerKey에 대한 GroupBy 항목이 있으므로 다음 쿼리는 집계에 적중합니다.The following query hits the aggregation because there is a GroupBy entry for CustomerKey, which maintains the distinctness of CustomerKey in the aggregation table. 이 기술은 200만~500만 개 이상의 고유 값이 쿼리 성능에 영향을 줄 수 있는 성능 임계값에 여전히 도달할 수 있습니다.This technique might still hit the performance threshold where more than two to five million distinct values can affect query performance. 그러나 세부 정보 테이블에 수십억 개의 행이 있지만 열에 200만~500만 개의 고유 값이 있는 시나리오에서 유용할 수 있습니다.However, it can be useful in scenarios where there are billions of rows in the detail table, but two to five million distinct values in the column. 이 경우 메모리에 캐시된 경우에도 수십억 개의 행이 있는 테이블을 검사하는 것보다 DISTINCTCOUNT가 더 빨리 수행될 수 있습니다.In this case, the DISTINCTCOUNT can perform faster than scanning the table with billions of rows, even if it were cached into memory.

DISTINCTCOUNT 집계 쿼리

DAX 시간 인텔리전스 함수는 집계를 인식합니다.DAX time-intelligence functions are aggregation aware. DATESYTD 함수가 CalendarDay 값의 테이블을 생성하고 집계 테이블이 Date 테이블의 group-by 열에 적용되는 세분성을 가지기 때문에 다음 쿼리는 집계에 도달합니다.The following query hits the aggregation because the DATESYTD function generates a table of CalendarDay values, and the aggregation table is at a granularity that is covered for group-by columns in the Date table. 이것은 집계를 사용할 수 있는 CALCULATE 함수에 대한 테이블 반환 필터의 예입니다.This is an example of a table-valued filter to the CALCULATE function, which can work with aggregations.

SUMMARIZECOLUMNS 집계 쿼리

GroupBy 열을 기반으로 하는 집계Aggregation based on GroupBy columns

Hadoop 기반 빅 데이터 모델에는 차원 모델과 다른 특징이 있습니다.Hadoop-based big data models have different characteristics than dimensional models. 큰 테이블 간의 조인을 방지하기 위해 빅 데이터 모델은 대개 관계를 사용하지 않지만 팩트 테이블에 차원 특성을 비정규화합니다.To avoid joins between large tables, big data models often don't use relationships, but denormalize dimension attributes to fact tables. GroupBy 열 기반 집계를 사용하여 대화형 분석을 위해 이러한 빅 데이터 모델의 잠금을 해제할 수 있습니다.You can unlock such big data models for interactive analysis by using aggregations based on GroupBy columns.

다음 표에는 집계할 Movement(이동) 숫자 열이 있습니다.The following table contains the Movement numeric column to be aggregated. 다른 모든 열은 그룹화할 특성입니다.All the other columns are attributes to group by. 테이블에는 IoT 데이터와 엄청난 수의 행이 포함됩니다.The table contains IoT data and a massive number of rows. 스토리지 모드는 DirectQuery입니다.The storage mode is DirectQuery. 전체 데이터 세트에 걸쳐 집계되는 데이터 원본에 대한 쿼리의 경우 엄청난 양으로 인해 속도가 느립니다.Queries on the data source that aggregate across the whole dataset are slow because of the sheer volume.

IoT 테이블

이 데이터 세트에서 대화형 분석을 사용하려면 대부분의 특성을 그룹화하지만 경도 및 위도와 같은 높은 카디널리티 특성은 제외하는 집계 테이블을 추가할 수 있습니다.To enable interactive analysis on this dataset, you can add an aggregation table that groups by most of the attributes, but excludes the high-cardinality attributes like longitude and latitude. 이렇게 하면 행 수가 크게 줄어들고 메모리 내 캐시에 쉽게 맞출 수 있을 만큼 작습니다.This dramatically reduces the number of rows, and is small enough to comfortably fit into an in-memory cache.

Driver Activity Agg 테이블

집계 관리 대화 상자에서 드라이버 작업 집계 테이블에 대한 집계 매핑을 정의하세요.You define the aggregation mappings for the Driver Activity Agg table in the Manage aggregations dialog.

Driver Activity Agg 테이블에 대한 집계 관리 대화 상자

GroupBy 열을 기반으로 하는 집계에서 GroupBy 항목은 선택 사항이 아닙니다.In aggregations based on GroupBy columns, the GroupBy entries aren't optional. 해당 항목이 없으면 집계가 적중되지 않습니다.Without them, the aggregations won't get hit. GroupBy 항목을 선택할 수 있을 때 관계 기반 집계를 사용하는 것과는 다릅니다.This is different from using aggregations based on relationships, where the GroupBy entries are optional.

다음 표에는 Driver Activity Agg 테이블에 대한 집계가 나와 있습니다.The following table shows the aggregations for the Driver Activity Agg table.

Driver Activity Agg 집계 테이블

집계된 드라이버 작업 집계 테이블의 스토리지 모드를 설정하여 가져올 수 있습니다.You can set the storage mode of the aggregated Driver Activity Agg table to Import.

GroupBy 집계 쿼리 예제GroupBy aggregation query example

활동 날짜 열이 집계 테이블에 포함되어 있으므로 다음 쿼리는 집계에 적중합니다.The following query hits the aggregation, because the Activity Date column is covered by the aggregation table. 테이블 행 수 계산 집계는 COUNTROWS 함수에서 사용됩니다.The COUNTROWS function uses the Count table rows aggregation.

성공적인 GroupBy 집계 쿼리

특히 팩트 테이블에 필터 특성이 포함된 모델의 경우 테이블 행 수 계산 집계를 사용하는 것이 좋습니다.Especially for models that contain filter attributes in fact tables, it's a good idea to use Count table rows aggregations. 사용자가 명시적으로 요청하지 않은 경우 Power BI에서 COUNTROWS를 사용하여 데이터 세트에 쿼리를 제출할 수 있습니다.Power BI may submit queries to the dataset using COUNTROWS in cases where it is not explicitly requested by the user. 예를 들어 필터 대화 상자에서는 각 값에 대한 행 수를 표시합니다.For example, the filter dialog shows the count of rows for each value.

필터 대화 상자

결합된 집계 기술Combined aggregation techniques

집계에 대한 관계 및 GroupBy 열 기법을 결합할 수 있습니다.You can combine the relationships and GroupBy columns techniques for aggregations. 관계를 기반으로 하는 집계에서는 비정규화된 차원 테이블을 여러 테이블로 분할해야 할 수 있습니다.Aggregations based on relationships may require the denormalized dimension tables to be split into multiple tables. 특정 차원 테이블이 비용이 많이 들고 실용적이지 않은 경우에는 해당 차원에 대한 집계 테이블에서 필요한 특성을 복제하고 다른 차원에 대한 관계를 사용할 수 있습니다.If this is costly or impractical for certain dimension tables, you can replicate the necessary attributes in the aggregation table for those dimensions, and use relationships for others.

예를 들어 다음 모델은 Sales Agg 테이블에서 , 분기, 학기연도를 복제합니다.For example, the following model replicates Month, Quarter, Semester, and Year in the Sales Agg table. 판매 집계날짜 테이블 간에는 관계가 없지만 고객제품 하위 범주에 대한 관계가 있습니다.There is no relationship between Sales Agg and the Date table, but there are relationships to Customer and Product Subcategory. Sales Agg의 스토리지 모드는 [가져오기]입니다.The storage mode of Sales Agg is Import.

결합된 집계 기술

다음 표에는 Sales Agg 테이블에 대한 집계 관리 대화 상자에 설정된 항목이 나와 있습니다.The following table shows the entries set in the Manage aggregations dialog for the Sales Agg table. Date가 세부 정보 테이블인 GroupBy 항목은 Date 특성별로 그룹화된 쿼리에 대한 집계에 강제로 적중해야 합니다.The GroupBy entries where Date is the detail table are mandatory, to hit aggregations for queries that group by the Date attributes. 앞의 예제와 같이 관계가 있으므로 CustomerKeyProductSubcategoryKey에 대한 GroupBy 항목은 DISTINCTCOUNT를 제외하고 집계 적중 횟수에 영향을 주지 않습니다.As in the previous example, the GroupBy entries for CustomerKey and ProductSubcategoryKey don't affect aggregation hits, except for DISTINCTCOUNT, because of the presence of relationships.

판매 집계의 집계 테이블 항목

결합된 집계 쿼리 예제Combined aggregation query examples

집계 테이블에서 일 대 다 관계를 통해 CalendarMonthCategoryName에 액세스할 수 있으므로 다음 쿼리는 집계에 적중합니다.The following query hits the aggregation, because the aggregation table covers CalendarMonth, and CategoryName is accessible via one-to-many relationships. SalesAmountSUM 집계를 사용합니다.SalesAmount uses the SUM aggregation.

집계를 적중하는 쿼리 예제

집계 테이블에서 CalendarDay를 포함하지 않으므로 다음 쿼리는 집계에 적중하지 않습니다.The following query doesn't hit the aggregation, because the aggregation table doesn't cover CalendarDay.

CalendarDay를 포함하는 쿼리 텍스트를 보여 주는 스크린샷.

DATESYTD 함수가 CalendarDay 값의 테이블을 생성하고 집계 테이블이 CalendarDay를 포함하지 않으므로 다음 시간 인텔리전스 쿼리는 집계에 적중하지 않습니다.The following time-intelligence query doesn't hit the aggregation, because the DATESYTD function generates a table of CalendarDay values, and the aggregation table doesn't cover CalendarDay.

DATESYTD 함수를 포함하는 쿼리 텍스트를 보여 주는 스크린샷.

집계 우선 순위Aggregation precedence

집계 우선 순위를 사용하면 단일 하위 쿼리에서 여러 집계 테이블을 고려할 수 있습니다.Aggregation precedence allows multiple aggregation tables to be considered by a single subquery.

다음 예는 여러 소스를 포함하는 복합 모델입니다.The following example is a composite model containing multiple sources:

  • 드라이버 작업 DirectQuery 테이블은 빅 데이터 시스템에서 제공하는 1조 개가 넘는 IoT 데이터 행을 포함합니다.The Driver Activity DirectQuery table contains over a trillion rows of IoT data sourced from a big-data system. 제어된 필터 컨텍스트에서 개별 IoT 판독 값을 볼 수 있도록 드릴스루 쿼리를 제공합니다.It serves drillthrough queries to view individual IoT readings in controlled filter contexts.
  • Driver Activity Agg 테이블은 DirectQuery 모드의 중간 집계 테이블입니다.The Driver Activity Agg table is an intermediate aggregation table in DirectQuery mode. Azure SQL Data Warehouse에 10억 개가 넘는 행이 포함되며, columnstore 인덱스를 사용하여 원본에서 최적화됩니다.It contains over a billion rows in Azure SQL Data Warehouse and is optimized at the source using columnstore indexes.
  • 그룹화 특성이 적고 낮은 카디널리티이므로 드라이버 작업 Agg2 가져오기 테이블의 세분성은 높습니다.The Driver Activity Agg2 Import table is at a high granularity, because the group-by attributes are few and low cardinality. 행 수는 수천 개만큼 적을 수 있으므로 메모리 내 캐시에 쉽게 맞출 수 있습니다.The number of rows could be as low as thousands, so it can easily fit into an in-memory cache. 이러한 특성은 고급 프로필의 경영진 대시보드에서 사용되므로 이러한 특성을 참조하는 쿼리는 최대한 빨리 처리해야 합니다.These attributes happen to be used by a high-profile executive dashboard, so queries referring to them should be as fast as possible.

참고

세부 정보 테이블에서 다른 데이터 원본을 사용하는 DirectQuery 집계 테이블은 집계 테이블이 SQL Server, Azure SQL 또는 Azure SQL Data Warehouse 원본에서 가져온 경우에만 지원됩니다.DirectQuery aggregation tables that use a different data source from the detail table are only supported if the aggregation table is from a SQL Server, Azure SQL, or Azure SQL Data Warehouse source.

이 모델의 메모리 공간은 비교적 작지만 큰 데이터 세트의 잠금을 해제합니다.The memory footprint of this model is relatively small, but it unlocks a huge dataset. 강점을 기반으로 하여 활용하는 아키텍처의 여러 구성 요소에 걸쳐 쿼리 로드를 분산시키므로 분산된 아키텍처를 나타냅니다.It represents a balanced architecture because it spreads the query load across components of the architecture, utilizing them based on their strengths.

큰 데이터 세트의 잠금을 해제하는 작은 공간 모델용 테이블

드라이버 작업 Agg2에 대한 집계 관리 대화 상자가 우선 순위 필드를 드라이버 작업 집계보다 높은 10으로 설정합니다.The Manage aggregations dialog for Driver Activity Agg2 sets the Precedence field to 10, which is higher than for Driver Activity Agg. 우선 순위가 높은 설정은 집계를 사용하는 쿼리가 드라이버 작업 Agg2를 먼저 고려함을 의미합니다.The higher precedence setting means queries that use aggregations will consider Driver Activity Agg2 first. 드라이버 작업 Agg2에서 응답할 수 있는 세분성이 아닌 하위 쿼리는 드라이버 작업 집계를 대신 고려합니다.Subqueries that aren't at the granularity that can be answered by Driver Activity Agg2 will consider Driver Activity Agg instead. 집계 테이블 중 하나에서 응답할 수 없는 세부 정보 쿼리는 Driver Activity로 지정됩니다.Detail queries that cannot be answered by either aggregation table will be directed to Driver Activity.

연결된 집계가 허용되지 않으므로 세부 정보 테이블 열에 지정된 테이블은 드라이버 작업 집계가 아니라 드라이버 작업입니다.The table specified in the Detail Table column is Driver Activity, not Driver Activity Agg, because chained aggregations are not allowed.

우선 순위가 호출된 집계 관리 대화 상자를 보여 주는 스크린샷.

다음 표에는 Driver Activity Agg2 테이블에 대한 집계가 나와 있습니다.The following table shows the aggregations for the Driver Activity Agg2 table.

Driver Activity Agg2 집계 테이블

쿼리가 집계에 적중했는지 아니면 무시했는지 검색Detect whether queries hit or miss aggregations

SQL 프로파일러는 메모리 내 캐시 스토리지 엔진에서 쿼리가 반환되는지 또는 DirectQuery를 통해 데이터 원본에 푸시되는지를 검색할 수 있습니다.SQL Profiler can detect whether queries are returned from the in-memory cache storage engine, or pushed to the data source by DirectQuery. 동일한 프로세스를 사용하여 집계가 적중되는지를 검색할 수 있습니다.You can use the same process to detect whether aggregations are being hit. 자세한 내용은 캐시를 적중 또는 무시하는 쿼리를 참조하세요.For more information, see Queries that hit or miss the cache.

SQL 프로파일러는 Query Processing\Aggregate Table Rewrite Query 확장 이벤트도 제공합니다.SQL Profiler also provides the Query Processing\Aggregate Table Rewrite Query extended event.

다음 JSON 코드 조각에서는 집계가 사용될 때의 이벤트 출력 예를 보여 줍니다.The following JSON snippet shows an example of the output of the event when an aggregation is used.

  • matchingResult는 하위 쿼리가 집계를 사용했음을 나타냅니다.matchingResult shows that the subquery used an aggregation.
  • dataRequest는 하위 쿼리에서 사용된 GroupBy 열과 집계된 열을 보여줍니다.dataRequest shows the GroupBy column(s) and aggregated column(s) the subquery used.
  • mapping은 매핑된 집계 테이블의 열을 보여 줍니다.mapping shows the columns in the aggregation table that were mapped to.

집계가 사용될 때의 이벤트 출력

캐시를 동기화 상태로 유지Keep caches in sync

메모리 내 캐시가 원본 데이터와 동기화된 상태로 유지되지 않으면 DirectQuery와 가져오기 및/또는 이중 스토리지 모드를 결합한 집계에서 다른 데이터가 반환될 수 있습니다.Aggregations that combine DirectQuery, Import, and/or Dual storage modes may return different data unless the in-memory cache is kept in sync with the source data. 예를 들어 쿼리 실행은 캐시된 값과 일치하도록 DirectQuery 결과를 필터링하여 데이터 문제를 마스크하려고 시도하지 않습니다.For example, query execution won't attempt to mask data issues by filtering DirectQuery results to match cached values. 필요한 경우 원본에서 이러한 문제를 처리하는 기술이 확립되어 있습니다.There are established techniques to handle such issues at the source, if necessary. 성능 최적화는 비즈니스 요구 사항을 충족시키는 능력을 손상하지 않는 방식으로만 사용해야 합니다.Performance optimizations should be used only in ways that don't compromise your ability to meet business requirements. 사용자는 데이터 흐름을 알고 있어야 하므로 이에 맞게 적절하게 설계해야 합니다.It's your responsibility to know your data flows and design accordingly.

다음 단계Next steps

복합 모델에 대한 자세한 내용은 다음을 참조하세요.For more information about composite models, see:

DirectQuery에 대한 자세한 내용은 다음을 참조하세요.For more information about DirectQuery, see: