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에 Lakehouse 추가
- 패브릭 샘플 리포지토리의 데이터 세트 폴더에서 고객 수익성 Sample.pbix 의미 체계 모델을 다운로드하고 의미 체계 모델을 로컬로 저장합니다.
작업 영역에 의미 체계 모델 업로드
이 문서에서는 고객 수익성 Sample.pbix 의미 체계 모델을 사용합니다. 이 의미 체계 모델은 회사 제조 마케팅 자료를 참조합니다. 여기에는 다양한 사업부에 대한 제품, 고객 및 해당 수익 데이터가 포함됩니다.
- 패브릭 데이터 과학 작업 영역 열기
- 찾아보기 업로드 > 를 선택하고 고객 수익성 Sample.pbix 의미 체계 모델을 선택합니다.
업로드가 완료되면 작업 영역에는 Power BI 보고서, 대시보드 및 고객 수익성 샘플이라는 의미 체계 모델의 세 가지 새로운 아티팩트가 있습니다. 이 문서의 단계에서는 해당 의미 체계 모델을 사용합니다.
Python을 사용하여 의미 체계 모델에서 데이터 읽기
SemPy Python API는 Microsoft Fabric 작업 영역에 있는 의미 체계 모델에서 데이터 및 메타데이터를 검색할 수 있습니다. API는 쿼리를 실행할 수도 있습니다.
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
여기서는 Customer 테이블이 관심 있는 테이블임을 확인했습니다.
고객 수익성 샘플 의미 체계 모델에서 고객 테이블을 읽습니다.
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
와 동일한 규칙을 따릅니다.셀 매직은 구문을 사용하여 Python 변수에
{variable_name}
대한 액세스도 지원합니다. 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" 값의 경우 pandas는 결과 DataFrame 열을 최상의 dtypeconvert_dtypes 캐스팅합니다. 이 매개 변수를 해제하면 관련 테이블의 열 간에 비호환성 문제가 발생할 수 있습니다. POWER BI 모델은 DAX 암시적 형식 변환으로 인해 이러한 문제를 검색하지 못할 수 있습니다.
또한 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를 사용하면 Lakehouse 의미 체계 모델을 사용하여 ForecastTable 테이블을 복합 의미 체계 모델에 추가할 수 있습니다.