다음을 통해 공유


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 의미 체계 모델을 사용합니다. 이 의미 체계 모델은 회사 제조 마케팅 자료를 참조합니다. 여기에는 다양한 사업부에 대한 제품, 고객 및 해당 수익 데이터가 포함됩니다.

  1. 패브릭 데이터 과학 작업 영역 열기
  2. 찾아보기 업로드 > 를 선택하고 고객 수익성 Sample.pbix 의미 체계 모델을 선택합니다.

의미 체계 모델을 작업 영역에 업로드하기 위한 인터페이스를 보여 주는 스크린샷.

업로드가 완료되면 작업 영역에는 Power BI 보고서, 대시보드 및 고객 수익성 샘플이라는 의미 체계 모델의 세 가지 새로운 아티팩트가 있습니다. 이 문서의 단계에서는 해당 의미 체계 모델을 사용합니다.

작업 영역에 업로드된 Power BI 파일의 항목을 보여 주는 스크린샷.

Python을 사용하여 의미 체계 모델에서 데이터 읽기

SemPy Python API는 Microsoft Fabric 작업 영역에 있는 의미 체계 모델에서 데이터 및 메타데이터를 검색할 수 있습니다. API는 쿼리를 실행할 수도 있습니다.

Notebook, Power BI 데이터 세트 의미 체계 모델 및 레이크하우스는 동일한 작업 영역 또는 다른 작업 영역에 위치할 수 있습니다. 기본적으로 SemPy는 다음에서 의미 체계 모델에 액세스하려고 합니다.

  • Notebook에 레이크하우스를 연결한 경우 레이크하우스의 작업 영역
  • 연결된 레이크하우스가 없는 경우 Notebook의 작업 영역

의미 체계 모델이 이러한 두 작업 영역 중 어디에도 없는 경우 SemPy 메서드를 호출할 때 의미 체계 모델의 작업 영역을 지정해야 합니다.

의미 체계 모델에서 데이터를 읽으려면 다음을 수행합니다.

  1. 작업 영역에서 사용 가능한 의미 체계 모델을 나열합니다.

    import sempy.fabric as fabric
    
    df_datasets = fabric.list_datasets()
    df_datasets
    
  2. 고객 수익성 샘플 의미 체계 모델에서 사용할 수 있는 테이블을 나열합니다.

    df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True)
    df_tables
    
  3. 고객 수익성 샘플 의미 체계 모델에 정의된 측정값을 나열합니다.

    다음 코드 샘플에서는 의미 체계 모델에 액세스하는 데 사용할 SemPy의 작업 영역을 지정했습니다. Your Workspace을 의미 체계 모델을 업로드한 작업 영역의 이름으로 바꿀 수 있습니다(작업 영역에 의미 체계 모델 업로드 섹션).

    df_measures = fabric.list_measures("Customer Profitability Sample", workspace="Your Workspace")
    df_measures
    

    여기서는 Customer 테이블이 관심 있는 테이블임을 확인했습니다.

  4. 고객 수익성 샘플 의미 체계 모델에서 고객 테이블을 읽습니다.

    df_table = fabric.read_table("Customer Profitability Sample", "Customer")
    df_table
    

    참고 항목

  5. 각 고객의 상태 및 날짜에 대한 총 수익 측정값을 평가합니다.

    df_measure = fabric.evaluate_measure(
        "Customer Profitability Sample",
        "Total Revenue",
        ["'Customer'[State]", "Calendar[Date]"])
    df_measure
    

    참고 항목

  6. 측정값 계산에 필터를 추가하려면 특정 열에 허용되는 값 목록을 지정합니다.

    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
    
  7. 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 성능에 미치는 영향을 최소화하고 대화형 요청으로 청구됩니다.
  8. 셀 매직을 %%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()
    
  9. 외부 원본에서 검색된 데이터에 측정값을 추가할 수 있습니다. 이 방법은 다음 세 가지 작업을 결합합니다.

    • 열 이름을 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_tableevaluate_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 테이블을 복합 의미 체계 모델에 추가할 수 있습니다.