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

  • Navštivte Datová Věda prostředí v Microsoft Fabric.
  • Vytvoření nového poznámkového bloku 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řidání lakehouse do poznámkového bloku
  • 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

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

  1. Otevření pracovního prostoru 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í má váš pracovní prostor tři nové artefakty: sestavu Power BI, řídicí panel a sémantický model s názvem Customer Profitability Sample. Kroky v tomto článku se spoléhají na tento sémantický model.

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

Poznámkový blok, sémantický model datové sady 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 jezera.
  • Pokud není připojený žádný lakehouse, pracovní prostor poznámkového bloku

Pokud se váš sémantický model nenachází v některém z těchto pracovních prostorů, 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í ukázce kódu jsme zadali pracovní prostor pro SemPy, 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
    

    V této části jsme zjistili, že tabulka Customer (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. To vyžaduje, aby byla povolena alespoň funkce XMLA jen pro čtení.
    • Množství načítaných dat je omezené – maximální paměť na dotaz skladové položky kapacity, která hostuje sémantický model – uzel ovladače Sparku ( další informace najdete v velikostech 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 Total Revenue (Celkové výnosy ) pro stav a datum každého 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í.
    • Na data se nevztahujíomezení back-endu Power BI.
    • Množství načístelných dat je omezené – maximální paměť na dotaz skladové položky kapacity hostující sémantický model – uzel ovladače Sparku (další informace najdete v velikostech uzlů), na kterém je spuštěný poznámkový blok.
    • Všechny žádosti se účtují jako interaktivní žádosti.
  6. Pokud chcete do výpočtu míry přidat filtry, zadejte seznam povolených hodnot pro určitý sloupec.

    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í.
    • Množství načístelných dat je omezené dostupnou pamětí ve službě Microsoft Azure Analysis Services a uzlem ovladače Spark (další informace najdete v velikostech 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. %%dax Pomocí magic buňky vyhodnoťte stejný dotaz DAX, aniž byste museli knihovnu importovat. Spusťte tuto buňku pro načtení %%dax magie buněk:

    %load_ext sempy
    

    Parametr pracovního prostoru je volitelný. Ří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 (příklad: 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é. Tato proměnná zachycuje výstup poslední spuštěné buňky.

    df_dax = _
    
    df_dax.head()
    
  9. Míry můžete přidat k datům načteným z externích zdrojů. Tento přístup kombinuje tři úkoly:

    • Překládá názvy sloupců na dimenze Power BI.
    • Definuje seskupení podle sloupců.
    • Filtruje míru Všechny názvy sloupců, které nelze vyřešit v rámci daného sémantického modelu, jsou ignorovány (další informace najdete v podporovaném prostředku 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: Pro hodnotu 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: U hodnoty True přetypuje knihovna pandas výsledné sloupce datového rámce na nejlepší možný typ dtypeconvert_dtypes. Pokud je tento parametr vypnutý, může dojít k problémům s nekompatibilitou typu mezi sloupci souvisejících tabulek; Model Power BI nemusí tyto problémy rozpoznat kvůli implicitní převodu typu DAX

SemPy read_table také používá informace o modelu, které Power BI poskytuje.

  • multiindex_hierarchies: Pokud má hodnotu 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")

V Power BI je možné tabulku ForecastTable přidat do složeného sémantického modelu sémantickým modelem Lakehouse.