Python을 사용하여 의미 체계 모델에서 데이터를 읽고 Power BI에서 사용할 수 있는 데이터 작성
이 문서에서는 Microsoft Fabric의 SemPy Python 라이브러리를 사용하여 데이터 및 메타데이터를 읽고 의미 체계 모델에서 측정값을 평가하는 방법을 알아봅니다. 의미 체계 모델에서 사용할 수 있는 데이터를 작성하는 방법도 알아봅니다.
필수 조건
Microsoft Fabric 구독을 구매합니다. 또는 무료 Microsoft Fabric 평가판에 등록합니다.
Microsoft Fabric에 로그인합니다.
홈페이지 왼쪽의 환경 전환기를 사용하여 Synapse 데이터 과학 환경으로 전환합니다.
- Microsoft Fabric의 데이터 과학 환경으로 이동합니다.
- 코드를 셀에 복사하여 붙여넣을 새 Notebook을 만듭니다.
- Spark 3.4 이상 버전의 경우 Fabric을 사용할 때 기본 런타임에서 의미 체계 링크를 사용할 수 있으므로 설치할 필요가 없습니다. Spark 3.3 이하 버전을 사용 중이거나 최신 버전의 의미 체계 링크로 업데이트하려는 경우
python %pip install -U semantic-link
- Notebook에 레이크하우스를 추가합니다.
- Fabric 샘플 리포지토리의 데이터 세트 폴더에서 Customer Profitability Sample.pbix 의미 체계 모델을 다운로드하고 의미 체계 모델을 로컬로 저장합니다.
작업 영역에 의미 체계 모델 업로드
이 문서에서는 Customer Profitability Sample.pbix 의미 체계 모델을 사용합니다. 이 의미 체계 모델은 회사 제조 마케팅 자료를 참조하며 다양한 사업부의 제품, 고객 및 해당 매출에 대한 데이터를 포함하고 있습니다.
- Fabric 데이터 과학에서 작업 영역을 엽니다.
- 업로드 > 찾아보기를 선택하고 Customer Profitability Sample.pbix 의미 체계 모델을 선택합니다.
업로드가 완료되면 작업 영역에 Power BI 보고서, 대시보드 및 고객 수익성 샘플이라는 의미 체계 모델의 세 가지 새로운 아티팩트가 생성됩니다. 이 문서의 단계에서는 이 의미 체계 모델을 사용합니다.
Python을 사용하여 의미 체계 모델에서 데이터 읽기
SemPy Python API는 Microsoft Fabric 작업 영역에 있는 의미 체계 모델에서 데이터 및 메타데이터를 검색하고 쿼리를 실행할 수 있습니다.
Notebook, Power BI 데이터 세트 의미 체계 모델 및 레이크하우스는 동일한 작업 영역 또는 다른 작업 영역에 위치할 수 있습니다. 기본적으로 SemPy는 다음에서 의미 체계 모델에 액세스하려고 합니다.
- Notebook에 레이크하우스를 연결한 경우 레이크하우스의 작업 영역
- 연결된 레이크하우스가 없는 경우 Notebook의 작업 영역
의미 체계 모델이 이러한 두 작업 영역 중 어디에도 없는 경우 SemPy 메서드를 호출할 때 의미 체계 모델의 작업 영역을 지정해야 합니다.
의미 체계 모델에서 데이터를 읽으려면 다음을 수행합니다.
작업 영역에서 사용 가능한 의미 체계 모델을 나열합니다.
import sempy.fabric as fabric df_datasets = fabric.list_datasets() df_datasets
고객 수익성 샘플 의미 체계 모델에서 사용할 수 있는 테이블을 나열합니다.
df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True) df_tables
고객 수익성 샘플 의미 체계 모델에 정의된 측정값을 나열합니다.
팁
다음 코드에서는 SemPy가 의미 체계 모델에 액세스하는 데 사용할 작업 영역을 지정했습니다.
Your Workspace
을 의미 체계 모델을 업로드한 작업 영역의 이름으로 바꿀 수 있습니다(작업 영역에 의미 체계 모델 업로드 섹션).df_measures = fabric.list_measures("Customer Profitability Sample", workspace="Your Workspace") df_measures
이제 고객 테이블이 관심 테이블임을 확인했습니다.
고객 수익성 샘플 의미 체계 모델에서 고객 테이블을 읽습니다.
df_table = fabric.read_table("Customer Profitability Sample", "Customer") df_table
참고 항목
- 데이터는 XMLA를 사용하여 검색되므로 최소한 XMLA 읽기 전용을 사용하도록 설정해야 합니다.
- 검색 가능한 데이터의 양은 의미 체계 모델을 호스팅하는 용량 SKU의 쿼리당 최대 메모리 및 Notebook을 실행하는 Spark 드라이버 노드(노드 크기 참조)에 의해 제한됩니다.
- 모든 요청은 낮은 우선 순위를 사용하여 Microsoft Azure Analysis Services 성능에 미치는 영향을 최소화하며 대화형 요청으로 청구됩니다.
고객의 상태별 및 날짜별 총 매출 측정값을 평가합니다.
df_measure = fabric.evaluate_measure( "Customer Profitability Sample", "Total Revenue", ["'Customer'[State]", "Calendar[Date]"]) df_measure
참고 항목
- 기본적으로 데이터는 XMLA를 사용하여 검색되지 않으므로 XMLA 읽기 전용을 사용하도록 설정할 필요가 없습니다.
- 더욱이, 데이터에는 Power BI 백 엔드 제한이 적용되지 않습니다.
- 검색 가능한 데이터의 양은 의미 체계 모델을 호스팅하는 용량 SKU의 쿼리당 최대 메모리 및 Notebook을 실행하는 Spark 드라이버 노드(노드 크기 참조)에 의해 제한됩니다.
- 모든 요청은 대화형 요청으로 청구됩니다.
특정 열에 포함될 수 있는 값 목록을 지정하여 측정값 계산에 필터를 추가할 수 있습니다.
filters = { "State[Region]": ["East", "Central"], "State[State]": ["FLORIDA", "NEW YORK"] } df_measure = fabric.evaluate_measure( "Customer Profitability Sample", "Total Revenue", ["Customer[State]", "Calendar[Date]"], filters=filters) df_measure
DAX 쿼리를 사용하여 고객의 상태별 및 날짜별 총 매출 측정값을 평가할 수도 있습니다.
df_dax = fabric.evaluate_dax( "Customer Profitability Sample", """ EVALUATE SUMMARIZECOLUMNS( 'State'[Region], 'Calendar'[Date].[Year], 'Calendar'[Date].[Month], "Total Revenue", CALCULATE([Total Revenue])) """)
참고 항목
- 데이터는 XMLA를 사용하여 검색되므로 최소한 XMLA 읽기 전용을 사용하도록 설정해야 합니다.
- 검색 가능한 데이터 양은 Microsoft Azure Analysis Services 및 Spark 드라이버 노드에서 사용 가능한 메모리에 의해 제한됩니다(노드 크기 참조).
- 모든 요청은 낮은 우선 순위를 사용하여 Analysis Services 성능에 미치는 영향을 최소화하며 대화형 요청으로 청구됩니다.
%%dax
셀 매직을 사용하면 라이브러리를 가져오지 않고도 동일한 DAX 쿼리를 평가할 수 있습니다. 아래 셀을 실행하여%%dax
셀 매직을 로드해 보겠습니다.%load_ext sempy
작업 영역 매개 변수는 선택 사항이며
evaluate_dax
함수의 작업 영역 매개 변수와 동일한 규칙을 따릅니다. 또한 셀 매직은{variable_name}
구문을 사용하여 Python 변수에 액세스하는 것을 지원합니다. DAX 쿼리에서 중괄호를 사용하려면 다른 중괄호(예:EVALUATE {{1}}
)로 이스케이프합니다.%%dax "Customer Profitability Sample" -w "Your Workspace" EVALUATE SUMMARIZECOLUMNS( 'State'[Region], 'Calendar'[Date].[Year], 'Calendar'[Date].[Month], "Total Revenue", CALCULATE([Total Revenue]))
결과 FabricDataFrame은 마지막으로 실행된 셀의 출력을 캡처하는
_
변수를 통해 사용할 수 있습니다.df_dax = _ df_dax.head()
또는 외부 원본에서 검색된 데이터에 측정값을 추가할 수 있습니다. 이 방법은 세 가지 작업을 결합합니다. 열 이름을 Power BI 차원으로 확인하고, 열별로 그룹을 정의하고, 측정값을 필터링합니다. 주어진 의미 체계 모델 내에서 확인할 수 없는 열 이름은 무시됩니다(지원되는 DAX 구문 참조).
from sempy.fabric import FabricDataFrame df = FabricDataFrame({ "Sales Agent": ["Agent 1", "Agent 1", "Agent 2"], "Customer[Country/Region]": ["US", "GB", "US"], "Industry[Industry]": ["Services", "CPG", "Manufacturing"], } ) joined_df = df.add_measure("Total Revenue", dataset="Customer Profitability Sample") joined_df
특수 매개 변수
SemPy read_table
및 evaluate_measure
메서드에는 출력을 조작하는 데 유용한 매개 변수가 더 많이 있습니다. 해당 매개 변수는 다음과 같습니다.
fully_qualified_columns
: 값이 ‘True’이면 메서드는TableName[ColumnName]
형식으로 열 이름을 반환합니다.num_rows
: 결과에서 출력할 행 수입니다.pandas_convert_dtypes
: 값이 ‘True’이면 결과 DataFrame의 열이 Pandas convert_dtypes를 사용하여 가장 적합한 dtype으로 캐스팅됩니다. 이 매개 변수를 비활성화하면 DAX 암시적 형식 변환으로 인해 Power BI 모델에서 감지되지 않았을 수 있는 관련 테이블의 열 간에 형식 비호환성 문제가 발생할 수 있습니다.
또한 SemPy read_table
은 Power BI에서 제공하는 모델 정보를 사용합니다.
multiindex_hierarchies
: True이면 Power BI 계층 구조를 Pandas MultiIndex 구조로 변환합니다.
의미 체계 모델에서 사용할 수 있는 데이터 쓰기
레이크하우스에 추가된 Spark 테이블은 해당 기본 의미 체계 모델에 자동으로 추가됩니다. 이 예시에서는 연결된 레이크하우스에 데이터를 쓰는 방법을 보여 줍니다. FabricDataFrame은 Pandas DataFrame과 동일한 입력 데이터를 수락합니다.
from sempy.fabric import FabricDataFrame
df_forecast = FabricDataFrame({'ForecastedRevenue': [1, 2, 3]})
df_forecast.to_lakehouse_table("ForecastTable")
Power BI를 사용하면 레이크하우스 의미 체계 모델을 사용하여 ForecastTable 테이블을 복합 의미 체계 모델에 추가할 수 있습니다.