다음을 통해 공유


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

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

필수 조건

  • Microsoft Fabric 구독을 구매합니다. 또는 무료 Microsoft Fabric 평가판에 등록합니다.

  • Microsoft Fabric에 로그인합니다.

  • 홈페이지 왼쪽 아래에 있는 환경 전환기를 사용하여 패브릭으로 전환합니다.

    데이터 과학을 선택할 위치를 보여 주는 환경 전환기 메뉴의 스크린샷.

  • Microsoft Fabric의 데이터 과학 환경으로 이동합니다.
  • Notebook을 만들어 코드를 복사하여 셀에 붙여넣습니다.
  • Spark 3.4 이상 버전의 경우 Fabric을 사용할 때 기본 런타임에서 의미 체계 링크를 사용할 수 있으므로 설치할 필요가 없습니다. Spark 3.3 이하 버전을 사용 중이거나 최신 버전의 의미 체계 링크로 업데이트하려는 경우 python %pip install -U semantic-link 명령을 실행할 수 있습니다.
  • Notebook에 Lakehouse 추가
  • 패브릭 샘플 리포지토리의 데이터 세트 폴더에서 고객 수익성 Sample.pbix 의미 체계 모델을 다운로드하고 로컬로 저장합니다.

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

이 문서에서는 고객 수익성 Sample.pbix 의미 체계 모델을 사용합니다. 의미 체계 모델은 마케팅 자료를 제조하는 회사를 참조합니다. 여기에는 다양한 사업부에 대한 제품, 고객 및 수익 데이터가 포함됩니다.

  1. 패브릭 데이터 과학에서 작업 영역을 엽니다.
  2. 이 컴퓨터에서 보고서 가져오기>, 페이지를 매긴 보고서 또는 통합 문서를 >선택하고 고객 수익성 샘플.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
    

    참고 항목

    • XMLA를 사용하여 데이터를 검색합니다. 이 경우 최소한 XMLA 읽기 전용 을 사용하도록 설정해야 합니다.
    • 검색 가능한 데이터의 양은 다음으로 제한됩니다. - 의미 체계 모델을 호스팅하는 용량 SKU의 쿼리당 최대 메모리 입니다. - 노트북을 실행하는 Spark 드라이버 노드입니다. 보다 자세한 내용은 노드 크기를 참조하세요.
    • 모든 요청은 낮은 우선 순위를 사용하여 Microsoft Azure Analysis Services 성능에 미치는 영향을 최소화하며 대화형 요청으로 청구됩니다.
  5. 각 고객의 상태 및 날짜에 대한 총 수익 측정값을 평가합니다.

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

    참고 항목

    • 기본적으로 XMLA를 사용하여 데이터를 검색 하지 않으므로 XMLA 읽기 전용을 사용하도록 설정할 필요가 없습니다.
    • 데이터에는 Power BI 백 엔드 제한 사항이 적용되지 않습니다.
    • 검색 가능한 데이터의 양은 다음으로 제한됩니다. - 의미 체계 모델을 호스팅하는 용량 SKU의 쿼리당 최대 메모리 입니다. - 노트북을 실행하는 Spark 드라이버 노드에 대한 자세한 내용은 노드 크기를 방문하세요.
    • 모든 요청은 대화형 요청으로 청구됩니다.
    • 함수는 evaluate_dax 의미 체계 모델을 자동으로 새로 고치지 않습니다. 자세한 내용은 이 페이지를 방문하세요.
  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 메서드에는 출력을 조작하는 데 유용한 매개 변수가 더 많이 있습니다. 해당 매개 변수는 다음과 같습니다.

  • pandas_convert_dtypes: 로 True설정하면 pandas는 결과 DataFrame 열을 최상의 dtype로 캐스팅합니다. convert_dtypes 자세히 알아보세요. 이 매개 변수를 해제하면 관련 테이블의 열 간에 형식 비호환성 문제가 발생할 수 있습니다. Power BI 모델은 DAX 암시적 형식 변환으로 인해 이러한 문제를 감지하지 못할 수 있습니다.

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

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

레이크하우스에 추가된 Spark 테이블은 해당 기본 의미 체계 모델에 자동으로 추가됩니다. 이 문서에서는 연결된 Lakehouse에 데이터를 쓰는 방법을 보여 줍니다. Pandas FabricDataFrame 데이터 프레임과 동일한 입력 데이터를 허용합니다.

from sempy.fabric import FabricDataFrame

df_forecast = FabricDataFrame({'ForecastedRevenue': [1, 2, 3]})

df_forecast.to_lakehouse_table("ForecastTable")

Power BI를 사용하면 ForecastTable 테이블을 Lakehouse 의미 체계 모델을 포함하는 복합 의미 체계 모델에 추가할 수 있습니다.