Sdílet prostřednictvím


Čtení ze sémantických modelů a zápis dat použitelných v Power BI pomocí Pythonu

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.

Požadavky

  • 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.
  • Pro Spark 3.4 a vyšší je sémantický odkaz dostupný ve výchozím modulu runtime při použití prostředků infrastruktury a není potřeba ho nainstalovat. Pokud používáte Spark 3.3 nebo novější nebo pokud chcete aktualizovat na nejnovější verzi sémantického odkazu, můžete tento příkaz spustit: python %pip install -U 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 .

Snímek obrazovky znázorňující rozhraní pro nahrání sémantického modelu do pracovního prostoru

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.

Snímek obrazovky znázorňující položky ze souboru Power BI nahraného do pracovního prostoru

Č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.

    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 .

    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át sémantický model do oddílu pracovního prostoru ).

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

    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.

    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.

    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.

    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.

    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. Pojďme spustit buňku níže, abychom načetli %%dax magii buněk.

    %load_ext sempy
    

    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).

    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
    

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.

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.