Čtení ze sémantických modelů a zápis dat využitých v Power BI

V tomto článku se dozvíte, jak číst data a metadata a vyhodnocovat míry v sémantických modelech pomocí knihovny SemPy Python v Microsoft Fabric. Naučíte se také psát data, která můžou sémantické modely využívat.

Důležité

Tato funkce je ve verzi Preview.

Předpoklady

  • Přejděte do prostředí Datová Věda v Microsoft Fabric.
  • Vytvořte nový poznámkový blok pro zkopírování nebo vložení kódu do buněk.
  • Nainstalujte knihovnu Pythonu SemPy do jádra poznámkového bloku spuštěním tohoto kódu v buňce poznámkového bloku:
    %pip install semantic-link
    
  • Přidejte do poznámkového bloku Lakehouse.
  • Stáhněte si sémantický model Customer Profitability Sample.pbix ze složky datových sad úložiště ukázek prostředků infrastruktury a uložte sémantický model místně.

Nahrání sémantického modelu do pracovního prostoru

V tomto článku používáme sémantický model Customer Profitability Sample.pbix . Tento sémantický model odkazuje na marketingové materiály společnosti a obsahuje data o produktech, zákaznících a odpovídajících výnosech pro různé obchodní jednotky.

  1. Otevřete pracovní prostor v Datová Věda Fabric.
  2. Vyberte Nahrát > procházet a vyberte sémantický model Customer Profitability Sample.pbix .

Screenshot showing the interface for uploading a semantic model into the workspace.

Po dokončení nahrávání bude mít váš pracovní prostor tři nové artefakty: sestavu Power BI, řídicí panel a sémantický model s názvem Customer Profitability Sample. Tento sémantický model použijete pro kroky v tomto článku.

Screenshot showing the items from the Power BI file uploaded into the workspace.

Čtení dat z sémantických modelů pomocí Pythonu

Rozhraní API SemPy Pythonu může načítat data a metadata z sémantických modelů umístěných v pracovním prostoru Microsoft Fabric a spouštět na ně dotazy.

Poznámkový blok, sémantický model (datová sada Power BI) a Lakehouse se dají nacházet ve stejném pracovním prostoru nebo v různých pracovních prostorech. Ve výchozím nastavení se SemPy pokusí o přístup k sémantickému modelu z:

  • pokud jste k poznámkovému bloku připojili lakehouse pracovní prostor Lakehouse.
  • pokud není připojený žádný lakehouse, pracovní prostor poznámkového bloku.

Pokud se váš sémantický model nenachází ve výchozím pracovním prostoru, ke kterému se SemPy pokouší získat přístup, musíte při volání metody SemPy zadat pracovní prostor sémantického modelu.

Čtení dat z sémantických modelů:

  1. Vypište dostupné sémantické modely v pracovním prostoru.

    # %pip and import only needs to be done once per notebook
    %pip install semantic-link
    import sempy.fabric as fabric
    
    df_datasets = fabric.list_datasets()
    df_datasets
    
  2. Zobrazí seznam tabulek dostupných v sémantickém modelu Customer Profitability Sample .

    # %pip and import only needs to be done once per notebook
    %pip install semantic-link
    import sempy.fabric as fabric
    
    df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True)
    df_tables
    
  3. Uveďte míry definované v sémantickém modelu Ukázka ziskovosti zákazníků.

    Tip

    V následujícím kódu jsme pro SemPy zadali pracovní prostor, který se má použít pro přístup k sémantickému modelu. Můžete nahradit Your Workspace názvem pracovního prostoru, do kterého jste nahráli sémantický model (z části [Nahrání sémantického modelu do pracovního prostoru](#upload-the-sémantický model-into-your-workspace).

    # %pip and import only needs to be done once per notebook
    %pip install semantic-link
    import sempy.fabric as fabric
    
    df_measures = fabric.list_measures("Customer Profitability Sample", workspace="Your Workspace")
    

    Teď jsme zjistili, že tabulka Zákazník je tabulka zájmu.

  4. Přečtěte si tabulku Customer z sémantického modelu Customer Profitability Sample.

    # %pip and import only needs to be done once per notebook
    %pip install semantic-link
    import sempy.fabric as fabric
    
    df_table = fabric.read_table("Customer Profitability Sample", "Customer")
    df_table
    

    Poznámka:

    Data se načítají pomocí XMLA, a proto vyžadují, aby byla povolena alespoň funkce XMLA jen pro čtení. Množství dat, která se dají načíst, je omezené maximální pamětí na dotaz skladové položky kapacity hostující sémantický model a uzlem ovladače Sparku (viz velikosti uzlů), na kterém je spuštěný poznámkový blok. Všechny požadavky používají nízkou prioritu k minimalizaci dopadu na výkon služby Microsoft Azure Analysis Services a účtují se jako interaktivní požadavky.

  5. Vyhodnoťte míru Celkové výnosy podle stavu a data zákazníka.

    # %pip and import only needs to be done once per notebook
    %pip install semantic-link
    import sempy.fabric as fabric
    
    df_measure = fabric.evaluate_measure(
        "Customer Profitability Sample",
        "Total Revenue",
        ["'Customer'[State]", "Calendar[Date]"])
    df_measure
    

    Poznámka:

    Ve výchozím nastavení se data nenačítají pomocí XMLA, a proto nevyžadují povolení XMLA jen pro čtení. Data navíc nejsou předmětem omezení back-endu Power BI. Množství dat, která se dají načíst, je omezené maximální pamětí na dotaz skladové položky kapacity hostující sémantický model a uzlem ovladače Sparku (viz velikosti uzlů), na kterém je spuštěný poznámkový blok. Všechny žádosti se účtují jako interaktivní žádosti.

  6. Filtry můžete do výpočtu míry přidat zadáním seznamu hodnot, které můžou být v určitém sloupci.

    # %pip and import only needs to be done once per notebook
    %pip install semantic-link
    import sempy.fabric as fabric
    
    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. Pomocí dotazu DAX můžete také vyhodnotit míru Celkové výnosy podle stavu a data zákazníka.

    # %pip and import only needs to be done once per notebook
    %pip install semantic-link
    import sempy.fabric as fabric
    
    df_dax = fabric.evaluate_dax(
        "Customer Profitability Sample",
        """
        EVALUATE SUMMARIZECOLUMNS(
            'State'[Region],
            'Calendar'[Date].[Year],
            'Calendar'[Date].[Month],
            "Total Revenue",
            CALCULATE([Total Revenue]))
        """)
    

    Poznámka:

    Data se načítají pomocí XMLA, a proto vyžadují, aby byla povolena alespoň funkce XMLA jen pro čtení. Objem načítání dat je omezený dostupnou pamětí ve službě Microsoft Azure Analysis Services a uzlem ovladače Sparku (viz velikosti uzlů). Všechny požadavky používají nízkou prioritu k minimalizaci dopadu na výkon služby Analysis Services a účtují se jako interaktivní požadavky.

  8. Stejný dotaz DAX můžete vyhodnotit bez nutnosti importovat knihovnu %%dax pomocí magie buňky. Parametr pracovního prostoru je volitelný a řídí se stejnými pravidly jako parametr evaluate_dax pracovního prostoru funkce. Magie buňky také podporuje přístup k proměnným Pythonu {variable_name} pomocí syntaxe. Pokud chcete v dotazu DAX použít složenou závorku, uchytáte ji jinou složenou závorkou (např. EVALUATE {{1}}).

    %%dax "Customer Profitability Sample" -w "Your Workspace"
    EVALUATE SUMMARIZECOLUMNS(
        'State'[Region],
        'Calendar'[Date].[Year],
        'Calendar'[Date].[Month],
        "Total Revenue",
        CALCULATE([Total Revenue]))
    

    Výsledný objekt FabricDataFrame je k dispozici prostřednictvím _ proměnné, která zachycuje výstup poslední spuštěné buňky.

    df_dax = _
    
    df_dax.head()
    
  9. Případně můžete přidat míry k datům načteným z externích zdrojů. Tento přístup kombinuje tři úlohy: překládá názvy sloupců na dimenze Power BI, definuje seskupení podle sloupců a filtruje míru. Všechny názvy sloupců, které nelze vyřešit v rámci daného sémantického modelu, se ignorují (viz podporovaná syntaxe jazyka DAX).

    # %pip and import only needs to be done once per notebook
    %pip install semantic-link
    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")
    

Čtení dat pomocí Sparku v Pythonu, R, SQL a Scala

Stejně jako u rozhraní SemPy python API ve výchozím nastavení je pracovní prostor používaný pro přístup k sémantickým modelům následující:

  • pracovní prostor připojeného lakehouse nebo
  • pokud není připojený žádný lakehouse, pracovní prostor poznámkového bloku.

Microsoft Fabric zveřejňuje všechny tabulky ze všech sémantických modelů v pracovním prostoru jako tabulky Sparku. Všechny příkazy Spark SQL je možné spouštět v Pythonu, R a Scala. Sémantický odkaz (Preview) Nativní konektor Sparku podporuje nabízení změn predikátů Sparku do modulu Power BI.

Tip

Vzhledem k tomu, že tabulky a míry Power BI jsou vystavené jako běžné tabulky Sparku, je možné je spojit s jinými zdroji dat Sparku v jednom dotazu.

  1. Nakonfigurujte Spark tak, aby používal nativní konektor Power BI Spark:

    spark.conf.set("spark.sql.catalog.pbi", "com.microsoft.azure.synapse.ml.powerbi.PowerBICatalog")
    
    # Optionally, configure the workspace ID for the Power BI catalog
    # spark.conf.set("spark.sql.catalog.pbi.workspace", "212598c9-a3bf-441e-a6f2-2034281e7f18")
    

    Tip

    Sémantický odkaz (Preview) Nativní konektor Sparku je předinstalovaný v prostředcích infrastruktury a nevyžaduje instalaci knihovny PythonuSemPy. Několik pracovních prostorů Power BI můžete nakonfigurovat přidáním více položek katalogu (např. spark.sql.catalog.my_pbi).

  2. Vypíše tabulky všech sémantických modelů v pracovním prostoru pomocí PySparku.

    df = spark.sql("SHOW TABLES FROM pbi")
    df
    
  3. Načtěte data z tabulky Customer (Zákazník) v sémantickém modelu Ukázka ziskovosti zákazníků pomocí SparkR.

    Poznámka:

    Načítání tabulek podléhá striktním omezením (viz Omezení čtení) a výsledky můžou být neúplné. Pomocí agregovaného odsdílení změn snižte objem přenášených dat. Mezi podporované agregace patří: COUNT, SUM, AVG, MIN a MAX.

    %%sparkr
    
    df = sql("SELECT * FROM pbi.`Customer Profitability Sample`.Customer")
    df
    
  4. Míry Power BI jsou dostupné prostřednictvím virtuální tabulky _Metrics. Následující dotaz vypočítá celkový výnos a rozpočet výnosů podle oblastí a odvětví.

    %%sql
    
    SELECT
        `Customer[Country/Region]`,
        `Industry[Industry]`,
        AVG(`Total Revenue`),
        AVG(`Revenue Budget`)
    FROM
        pbi.`Customer Profitability Sample`.`_Metrics`
    WHERE
        `Customer[State]` in ('CA', 'WA')
    GROUP BY
        `Customer[Country/Region]`,
        `Industry[Industry]`
    
  5. Zkontrolujte dostupné míry a dimenze pomocí schématu Sparku.

    spark.table("pbi.`Customer Profitability Sample`._Metrics").printSchema()
    

Speciální parametry

SemPy read_table a evaluate_measure metody mají více parametrů, které jsou užitečné pro manipulaci s výstupem. Mezi tyto parametry patří:

  • fully_qualified_columns: Pokud je hodnota True, vrátí metody názvy sloupců ve formuláři TableName[ColumnName].
  • num_rows: Počet řádků pro výstup ve výsledku.
  • pandas_convert_dtypes: Pokud je hodnota True, výsledné sloupce datového rámce se přetypují na nejlepší možný typ dtype pomocí knihovny pandas convert_dtypes. Pokud je tento parametr vypnutý, problémy s nekompatibilitou typu můžou mít za následek mezi sloupci souvisejících tabulek, které v modelu Power BI nebyly zjištěny kvůli implicitní převodu typu DAX.

SemPy read_table také používá informace o modelu poskytované Power BI.

  • multiindex_hierarchies: Pokud je hodnota True, převede hierarchie Power BI na strukturu pandas MultiIndex.

Omezení přístupu pro čtení

Rozhraní API pro čtení mají následující omezení:

  • Přístup k tabulce Power BI pomocí Spark SQL podléhá omezením back-endu Power BI.
  • Predikát pushdownu pro dotazy Sparku _Metrics je omezený na jeden výraz IN . Výrazy IN a nepodporované predikáty se po přenosu dat vyhodnocují ve Sparku.
  • Predikát pro tabulky Power BI, ke které se přistupuje pomocí Spark SQL, nepodporuje následující výrazy:
  • Relace Sparku se musí restartovat, aby byly nové sémantické modely přístupné ve Spark SQL.

Zápis dat použitelných pomocí sémantických modelů

Tabulky Sparku přidané do Lakehouse se automaticky přidají do odpovídajícího výchozího sémantického modelu. Tento příklad ukazuje, jak zapisovat data do připojeného Lakehouse. FabricDataFrame přijímá stejná vstupní data jako datové rámce Pandas.

from sempy.fabric import FabricDataFrame

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

df_forecast.to_lakehouse_table("ForecastTable")

Pomocí Power BI lze tabulku ForecastTable přidat do složeného sémantického modelu pomocí sémantického modelu Lakehouse.

Další kroky