다음을 통해 공유


Python을 사용하여 의미 체계 모델에서 데이터를 읽고 Power BI에서 사용할 수 있는 데이터 작성

이 문서에서는 Microsoft Fabric의 SemPy Python 라이브러리를 사용하여 데이터 및 메타데이터를 읽고 의미 체계 모델에서 측정값을 평가하는 방법을 알아봅니다. 의미 체계 모델에서 사용할 수 있는 데이터를 작성하는 방법도 알아봅니다.

필수 조건

작업 영역에 의미 체계 모델 업로드

이 문서에서는 Customer Profitability Sample.pbix 의미 체계 모델을 사용합니다. 이 의미 체계 모델은 회사 제조 마케팅 자료를 참조하며 다양한 사업부의 제품, 고객 및 해당 매출에 대한 데이터를 포함하고 있습니다.

  1. Fabric 데이터 과학에서 작업 영역을 엽니다.
  2. 업로드 > 찾아보기선택하고 Customer Profitability Sample.pbix 의미 체계 모델을 선택합니다.

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

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

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

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

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

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
    

    이제 고객 테이블이 관심 테이블임을 확인했습니다.

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

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

    참고 항목

    • 데이터는 XMLA를 사용하여 검색되므로 최소한 XMLA 읽기 전용을 사용하도록 설정해야 합니다.
    • 검색 가능한 데이터의 양은 의미 체계 모델을 호스팅하는 용량 SKU의 쿼리당 최대 메모리 및 Notebook을 실행하는 Spark 드라이버 노드(노드 크기 참조)에 의해 제한됩니다.
    • 모든 요청은 낮은 우선 순위를 사용하여 Microsoft Azure Analysis Services 성능에 미치는 영향을 최소화하며 대화형 요청으로 청구됩니다.
  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 함수의 작업 영역 매개 변수와 동일한 규칙을 따릅니다. 또한 셀 매직은 {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()
    
  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’이면 결과 DataFrame의 열이 Pandas convert_dtypes를 사용하여 가장 적합한 dtype으로 캐스팅됩니다. 이 매개 변수를 비활성화하면 DAX 암시적 형식 변환으로 인해 Power BI 모델에서 감지되지 않았을 수 있는 관련 테이블의 열 간에 형식 비호환성 문제가 발생할 수 있습니다.

또한 SemPy read_table은 Power BI에서 제공하는 모델 정보를 사용합니다.

의미 체계 모델에서 사용할 수 있는 데이터 쓰기

레이크하우스에 추가된 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 테이블을 복합 의미 체계 모델에 추가할 수 있습니다.