확장 가능한 계산 디자인

완료됨

모델은 구조화되어 있습니다. 이제 데이터와 팀이 성장함에 따라 성능과 유지 관리를 유지하는 계산을 디자인합니다. 작은 규모로 중복 측정값과 일관되지 않은 명명이 있는 모델은 이상적이지 않더라도 여전히 작동합니다. 규모가 커지면 고장납니다. 수백 개의 측정값이 있는 모델에는 중복된 논리를 방지하고, 큰 데이터 세트에 대한 쿼리 시간을 줄이고, 새 팀 구성원이 오류를 발생시키지 않고 모델을 이해하고 확장할 수 있도록 하는 구조적 디자인 결정이 필요합니다.

이 단원에서는 측정값 확산을 줄이기 위한 계산 그룹, 팀 유지 관리를 위한 DAX 가독성 분야, 대규모 팩트 테이블의 쿼리 성능 집계 등 세 가지 패턴을 다룹니다.

계산 그룹

계산 그룹은 여러 측정값에 동일한 계산 패턴을 적용하는 모델 개체입니다. 각 변형에 대해 별도의 측정값을 만드는 대신 패턴을 한 번 정의하고 동적으로 적용합니다.

계산 그룹이 해결하는 문제

50개의 기본 측정값(예: 총 판매액, 총 비용, 수익 및 판매 단위)이 있는 조직을 고려합니다. 각 측정값에는 연도별, 분기별 및 월별 계산이 필요합니다. 계산 그룹이 없으면 50개 × 3 = 150개의 추가 측정값입니다. 이전 연도 비교를 추가하면 유지 관리할 250개 이상의 측정값을 살펴봅니다.

계산 그룹을 사용하면 각 시간 인텔리전스 패턴에 대한 계산 항목이 있는 하나의 그룹을 만듭니다. 이러한 항목은 모델의 모든 측정값에 자동으로 적용됩니다.

계산 그룹의 작동 방식

계산 그룹에는 계산 항목이 포함되며, 각각은 을 사용하여 SELECTEDMEASURE()현재 측정값을 수정하는 DAX 식을 정의합니다. 시간 인텔리전스 계산 그룹은 다음과 같습니다.

// Year-to-Date
CALCULATE(
    SELECTEDMEASURE(),
    DATESYTD('Date'[Date])
)
// Quarter-to-Date
CALCULATE(
    SELECTEDMEASURE(),
    DATESQTD('Date'[Date])
)
// Month-to-Date
CALCULATE(
    SELECTEDMEASURE(),
    DATESMTD('Date'[Date])
)

사용자가 시각적 개체에 계산 그룹을 추가하는 경우 각 조합에 대해 별도의 측정값 없이 모든 측정값(예: 총 판매액, 수익 또는 판매 단위)에 대해 YTD, QTD 및 MTD 간에 전환할 수 있습니다.

동적 형식 문자열

동적 형식 문자열은 계산 항목 컨텍스트에 따라 표시 형식을 변경합니다. 예를 들어 백분율 계산은 백분율로 표시되어야 하며 통화 계산은 동일한 기본 측정값에 적용된 경우에도 통화로 표시되어야 합니다.

// In the format string expression for a YoY % calculation item:
"0.0%"

동적 서식 문자열은 별도의 서식이 지정된 측정값의 필요성을 줄이고 모델 전체에서 서식을 일관되게 유지합니다.

Tip

Power BI 계산 그룹을 만드는 방법에 대해 자세히 알아봅니다.

계산 그룹을 사용하는 경우

동일한 계산 패턴을 적용해야 하는 세 개 이상의 측정값이 있는 경우 계산 그룹을 사용합니다. 일반적인 사용 사례로는 시간 인텔리전스(YTD, QTD, MTD), 통화 변환 및 분산 계산(실제 및 예산)이 포함됩니다.

DAX 가독성 분야

팀이 200개 이상의 측정값을 유지 관리하는 대규모로 가독성은 개인적인 선호도가 아닌 디자인 결정입니다. 일관되고 읽기 쉬운 DAX는 유지 관리 오류를 줄이고 새 팀 구성원이 모델을 더 쉽게 이해할 수 있도록 합니다.

변수

변수는 중간 결과를 저장하고, 가독성을 향상시키며, 엔진이 동일한 식을 여러 번 평가하지 못하도록 합니다.

Profit Margin =
VAR TotalRevenue = SUM(Sales[Revenue])
VAR TotalCost = SUM(Sales[Cost])
VAR ProfitAmount = TotalRevenue - TotalCost
RETURN
    DIVIDE(ProfitAmount, TotalRevenue)

변수가 없으면 동일한 SUM(Sales[Revenue]) 식이 복합 측정값에 세 번 나타날 수 있습니다. 변수는 식을 한 번 평가하고 결과를 다시 사용합니다.

Tip

변수를 사용하여 DAX 수식을 개선하는 방법에 대해 자세히 알아봅니다.

명명 규칙

모델에 여러 사람이 유지 관리하는 수백 개의 측정값이 있는 경우 일관된 명명이 중요합니다. 다음 사항에 대한 규칙을 설정합니다.

  • 측정값 이름: "Total Sales" 또는 "YoY Revenue Growth"와 같은 명확하고 설명적인 이름을 사용합니다. 원래 작성자만 이해하는 약어를 사용하지 마세요.
  • 변수 이름: 중간 값(예: TotalRevenue 대신 x 또는 temp)을 설명하는 설명이 포함된 이름을 사용합니다.
  • 계산 그룹 항목: 항목의 작동 방식이 아니라 항목의 이름을 지정합니다. 예를 들어, “DATESYTD 래퍼”가 아니라 “연도별”을 입력합니다.

설명이 포함된 명명은 AI 사용에도 중요합니다. Copilot 또는 데이터 에이전트가 모델을 쿼리할 때 측정값 이름 및 설명을 사용하여 포함할 계산을 결정합니다. "YoY Revenue Growth"라는 측정값은 "Calc7_v2"보다 더 나은 AI 결과를 생성합니다.

Tip

Power BI Copilot DAX 수식을 작성하고 설명하는 데 도움이 될 수 있습니다. 복잡한 측정값을 사용하는 경우 Copilot 사용하여 개선 사항을 제안하거나 기존 논리를 설명합니다.

반복기 및 집계 함수

반복기 함수(SUMX, AVERAGEX, MAXX)는 테이블에 대한 행 단위 식을 평가합니다. 집계 함수(SUM, AVERAGE, MAX)는 단일 열에서 작동합니다. 대용량 데이터 볼륨에서 선택은 다음과 같습니다.

  • 단일 열을 요약할 때 집계 함수를 사용합니다. 엔진이 미리 빌드된 데이터 구조를 사용할 수 있으므로 속도가 더 빠릅니다.
  • 계산에 행 수준 식(예: Quantity × UnitPrice 행 단위)이 필요한 경우 반복기를 사용합니다.

메모

반복기는 큰 팩트 테이블의 성능에 영향을 줄 수 있는 모든 행을 처리합니다.

방어 패턴에 대한 정보 함수

정보 함수는 ISBLANK, HASONEVALUE, ISINSCOPE와 같은 기능을 통해 필터 컨텍스트가 다른 여러 보고서에서 사용되는 측정값에 대한 방어 패턴을 만듭니다.

Sales per Customer =
IF(
    HASONEVALUE(Customer[CustomerID]),
    DIVIDE(SUM(Sales[Amount]), 1),
    DIVIDE(SUM(Sales[Amount]), DISTINCTCOUNT(Sales[CustomerID]))
)

이러한 패턴은 원래 작성자가 예상하지 못한 컨텍스트에서 측정값을 사용할 때 예기치 않은 결과를 방지합니다.

Aggregations

집계는 미리 계산된 합계를 세부 정보 데이터보다 더 높은 세분성으로 저장하는 요약 테이블입니다. 쿼리는 먼저 이러한 테이블에 도달하여 대규모 팩트 테이블의 성능을 향상시킵니다. 쿼리가 집계와 일치하면 엔진은 수백만 개의 세부 정보 행을 검색하는 대신 작은 요약 테이블의 결과를 반환합니다.

설계 결정으로서의 집계

집계를 추가할 시기세분성을 결정하는 것은 디자인 결정입니다. 성능 모니터링 및 튜닝은 별도의 운영 문제이지만 모델 디자인 중에 구조적 선택을 합니다.

다음과 같은 경우 집계를 고려합니다.

  • 팩트 테이블은 수백만 개의 행을 넘어서 존재하며, 일반적으로 사용되는 쿼리는 데이터를 더 높은 수준의 세분화된 수준(예: 지역별 월별 합계)으로 요약합니다.
  • 사용자는 요약 수준 시각적 개체에서 느린 쿼리 응답 시간을 경험합니다.
  • 대부분의 보고서 상호 작용에는 행 수준 세부 정보가 필요하지 않습니다.

집계 동작이 스토리지 모드와 어떻게 다른지

가져오기 모드에서 집계는 별도의 숨겨진 테이블로 저장됩니다. 엔진은 일치하는 쿼리를 집계 테이블로 자동으로 라우팅합니다.

Direct Lake 모드에서 델타 테이블 자체는 집계 원본으로 사용될 수 있습니다. Direct Lake는 열 형식 Parquet 파일을 읽기 때문에 엔진은 많은 시나리오에서 집계 없이 더 큰 데이터 볼륨을 처리할 수 있습니다. 쿼리 패턴이 필요를 확인하는 경우에만 집계를 추가합니다.

Tip

Power BI.