본문 바로가기
데이터 분석 및 업무 자동화

파워비아이 DAX 함수, TABLE과 FILTER를 알아보자

by 공부머리 2022. 1. 19.
반응형

오늘은 파워비아이 DAX 함수 중에서 TABLE과 FILTER 기능에 대해서 살펴보겠습니다. DAX측정값 내에서 새로운 데이터를 만들거나 새로운 테이블을 생성화여 활용합니다. 이번 포스팅에서 다룰 내용은 Calculated Tables, Filtering Tables, Manipulating Tables, Generating Data입니다. 일반적인 유즈 케이스는 기존의 데이터 소스에서 새로운 열이나 테이블을 반환, 기존의 테이블에서 새로운 열 추가, 측정값에서 테이블을 필터링하여 활용, 테이블에서 조건에 맞는 열을 필터링, 처음부터 새로운 데이터 생성 등입니다.

 

일반적인 테이블과 필터 기능은 아래 세 가지로 분류할 수 있습니다.

  • 데이터 필터링 (Filter Data) : 필터링된 테이블을 반환
    • ALL
    • FILTER
    • DISTINCT
    • VALUES
    • ALLEXCEPT
    • ALLSELECTED
  • 데이터 추가 (ADD Data) : 기존의 데이터에서 새로운 열을 추가
    • SELECTEDCOLUMNS
    • ADDCOLUMNS
    • SUMMARIZE
  • 데이터 생성 (Create Data) : 새로운 열, 행, 테이블을 처음부터 생성
    • ROW
    • DATATABLE
    • GENERATESERIES
    • { } Table Constructor

Calculated Tables

DAX 기능에서 테이블은 물리적인 테이블 (예시1 : 'Sales by Store') 이나 계산된 테이블 또는 가상의 테이블 (예시2 : FILTER) 모두를 받아들입니다.

 

<예시 1>

Total Sales = 

SUMX(

     'Sales by store',

     'Sales by store'[quantity_sold]

)

 

<예시 2>

Total Sales =

SUMX(

     FILTER(

          'Sales by Store',

          'Sales by Store'[quantity_sold] > 3

     ),

     'Sales by store'[quantity_sold]

)

 

■ FILTER

FILTER()는 하나 또는 여러개의 필터 표현식에 의해서 하나의 필터 테이블을 반환합니다. 필터는 테이블 기능이고 반복 특성을 가지고 있습니다. 필터는 각 행을 스캔하여 행의 개수를 줄입니다. 필터의 구문은 다음과 같습니다.

=FILTER(Expression, [Filter1], [Filter2],...)

 

ALL

ALL()은 필터를 무시하고 테이블의 모든 열, 모든열의 값을 반환합니다. ALL은 테이블 필터이자 CALCULATE modifier입니다. 초기 필터 컨텍스트를 제거하고 테이블 표현을 무시합니다. 즉, 물리적인 테이블 자체를 참조합니다. ALL의 구문은 아래와 같습니다.

=ALL(Table or ColumnName, [ColumnName1], ...)

 

DISTINCT

DISTINCT()은 괄호 안에 열 이름이 사용되었을 때는 유니크한 값들을 추출하여 한개의 열 테이블을 반환합니다. 괄호안에 테이블이 사용되었을 때는 값들의 유니크한 조합으로 구성된 테이블을 반환합니다. DISTINCT는 모델링에서 lookup table을 추출할때 많이 사용됩니다. DISTINCT의 구문은 아래와 같습니다.

=DISTINCT(ColumnName or TableExpression)

 

VALUES

VALUES()는 괄호안에 열 이름이 사용되었을 때는 유니크한 값들을 추출하여 한개의 열 테이블을 반환합니다. 괄호안에 테이블이 사용되었을 때는 전체 테이블에 blank행이 추가된 테이블을 반환합니다. 만약 lookup 테이블에서 누락된 값이 있다면 VALUES를 사용하면 유용합니다. VALUES의 구문은 아래와 같습니다.

=VALUES(TableName or ColumnName)


Filtering Tables

 SELECTEDVALUE

SELECTEDVALUE()는 특정 열에 유니크한 값일 있을 때 필터링된 한 가지 값을 반환합니다. 아닐 경우는 대체 결과를 반환합니다. SELECTEDVALUE의 구문은 아래와 같습니다. 앞의 ColumnName에는 한 개의 값을 반환하고자 하는 열이 오고 뒤의 AlternateResult에는 "-"또는 "NA"등 대체 값이 옵니다.

=SELECTEDVALUE(ColumnName, [AlternateResult])

 

ALLEXCEPT

ALLEXCEPT()는 테이블 내에서 지정된 열 외에 모든 필터 컨텍스트를 지웁니다. ALLEXCEPT는 일반적으로 CALCULATE와 함께 쓰입니다. ALLEXCEPT의 구문은 아래와 같습니다. 여기서 TableName에는 물리적 테이블만 허용됩니다.

=ALLEXCEPT(TableName, [ColumnName],[ColumnName], [...])

 

 ALLSELECTED

ALLSELECTED()는 쿼리 안에서 지정된 테이블 또는 칼럼은 필터가 무시되고 나머지 필터 컨텍스트는 필터링된 행들을 반환합니다. ALLSELECTED는 시각화된 부분의 Total 또는 sub total을 구할 때 사용됩니다. ALLEXCEPT의 구문은 아래와 같습니다.

=ALLSELECTED(TableNameOrColumnName, [ColumnName],[ColumnName], [...])


Manipulating Tables

SELECTCOLUMNS

SELECTCOLUMNS()는 선택된 열이나 DAX 표현식에 의해 구성된 열들로 구성된 테이블을 반환합니다. SELECTCOLUMNS()는 빈 테이블에서 시작합니다. SELECTCOLUMNS()의 구문은 아래와 같습니다. Table자리에는 'Sales by Store'또는 FILTER('Employees', 'Employees'[ID] IN {2,5,7,9,10} 등의 테이블이 옵니다. 두 번째 Name 자리에는 "Employee Name & ID"등 새로운 열 이름이 옵니다. 세 번째 Expression 자리에는 [First Name] & " " & [Last Name]등 표현식이 옵니다.

=SELECTCOLUMNS(Table, Name, Expression, [...])

 

 ADDCOLUMNS

ADDCOLUMNS()는 선택된 열이나 DAX 표현식에의해 구성된 열들로 구성된 테이블을 반환합니다. ADDCOLUMNS는 오리지널 테이블에서 시작합니다. 오리지널 테이블에서 새로운 열을 추가할 때 사용합니다. ADDCOLUMNS()의 구문은 아래와 같습니다. Table자리에는 'Sales by Store'또는 FILTER('Employees', 'Employees'[ID] IN {2,5,7,9,10} 등의 테이블이 옵니다. 두번째 Name 자리에는 "Employee Name & ID"등 새로운 열 이름이 옵니다. 세번째 Expression 자리에는 [First Name] & " " & [Last Name]등 표현식이 옵니다.

=ADDCOLUMNS(Table, Name, Expression, [...])

 

 SUMMARIZE

SUMMARIZE()는 선택된 열의 유니크한 값의 조합으로 이루어진 요약 테이블을 만듭니다. SUMMARIZE()의 구문은 아래와 같습니다. Table자리에는 물리적 테이블이나 DAX 식에 의한 테이블이 옵니다. 두 번째 GroupBy_ColumnName 자리에는 테이블에 존재하는 열 이름이 옵니다.

=SUMMARIZE(Table, GroupBy_ColumnName)


Generating Data

Generating Data는 아무것도 없는 상태에서 데이터를 생성하는 경우입니다.

 

ROW

ROW()는 표현식에 의한 하나의 값을 가진 하나의 행을 생성합니다. ROW()의 구문은 아래와 같습니다. Name자리에는 새로운 열 이름이 옵니다. 따옴표로 쌓아야 합니다. 두 번째 Expression 자리에는 한개의 값을 가진 표현식이 옵니다.

=ROW(Name, Expression, [Name, Expression, [...]])

 

<예시>

ROW Example =

ROW(

     "Customer Sales", [Customer Sales],

     "Items Ordered", [Quantity Sold]

)

 

DATATABLE

DATATABLE()은 고정된 값을 가진 테이블을 생성합니다. DATATABLE()의 구문은 아래와 같습니다. Name자리에는 새로운 열 이름이 옵니다. 두번째 Type 자리에는 STRING, DOUBLE, INT, CURRENCY 등의 타입이 옵니다. 세 번째 Data 자리에는 {"First", 1} 과 같이 중괄호 안에 데이터가 옵니다.

=DATATABLE(Name, Type, [Name, Type], [...], Data)

 

GENERATESERIES

GENERATESERIES()은 순차 값을 가진 한 개의 열이 생성됩니다. GENERATESERIES()의 구문은 아래와 같습니다.

=GENERATESERIES(StartValue, EndValue, [IncrementValue])


이상으로 파워비아이 DAX 함수 TABLE과 FILTER 기능에 대해서 알아보았습니다.

읽어주셔서 감사합니다. 오늘도 성장하는 하루 되세요!

반응형

댓글