Power BI のセマンティック リンクとの接続

Power BI 接続は Microsoft Fabric のセマンティック リンクの中核をなします。 この記事では、セマンティック リンクにより、Python Pandas エコシステムと Apache Spark エコシステムのユーザーに対して、セマンティック モデルへの接続が提供される方法について説明します。

セマンティック モデルは通常、アップストリームのデータ処理と絞り込みの結果である高いデータ基準を表します。 ビジネス アナリストは、以下を行えます。

  • ドメイン ナレッジとビジネス ロジックを Power BI メジャーにエンコードする。
  • Power BI を セマンティック モデルを使用して作成する。
  • これらのレポートを使用して、ビジネス上の意思決定を促進する。

データ サイエンティストが同じセマンティック モデルを使用して、異なるコード環境または言語でビジネス ロジックを複製しようとすると、重大なエラーが発生する可能性があります。 セマンティック リンクは、セマンティック モデルと Microsoft Fabric の Synapse Data Science エクスペリエンスのギャップを埋め、ビジネス アナリストとデータ サイエンティストがシームレスに共同作業を行い、データの不一致を減らすための方法を提供します。

セマンティック リンクは、次の機能への接続を提供します。

  • SemPy Python ライブラリ を介した Python Pandas エコシステム。
  • PySpark、Spark SQL、R、Scala をサポートする Spark ネイティブ コネクタを介したセマンティック モデル。

Pandas ユーザー向けの SemPy Python ライブラリを介したデータ接続

SemPy Python ライブラリはセマンティック リンク機能の一部であり、pandas ユーザーにサービスを提供します。 SemPy の機能には、テーブルからのデータ取得、メジャーの評価、メタデータと Data Analysis Expressions (DAX) クエリの実行などが用意されています。

  • Spark 3.4 以降では、Fabric を使用する場合、セマンティック リンクは既定のランタイムで使用でき、インストールする必要はありません。

  • Spark 3.3 以前では、またはセマンティック リンクの最新バージョンに更新するには、次のコマンドを実行します。

    %pip install -U semantic-link
    

SemPy は、Power BI データ ソースから伝達された追加メタデータを使用して Pandas DataFrame も拡張します。 このメタデータには次のものが含まれます。

  • Power BI データ カテゴリ:
    • 地域: 住所、場所、市区町村
    • URL: Web URL、画像 URL
    • バーコード
  • テーブル間のリレーションシップ
  • 階層

セマンティック リンク Spark ネイティブ コネクタを使用することで、Spark ユーザーは Power BI のテーブルとメジャーにアクセスできます。 コネクタは言語に依存せず、PySpark、Spark SQL、R、Scala をサポートしています。

Spark ネイティブ コネクタを使用するため、セマンティック モデルを Spark 名前空間として表現し、Power BI テーブルは Spark テーブルとして透過的に公開します。

次のコマンドは、Spark SQL 用の Power BI Spark ネイティブ コネクタを使用するように Spark を構成します。

spark.conf.set("spark.sql.catalog.pbi", "com.microsoft.azure.synapse.ml.powerbi.PowerBICatalog")

# Optionally, configure the workspace using its ID
# Resolve workspace name to ID using fabric.resolve_workspace_id("My workspace")
# Replace 00000000-0000-0000-0000-000000000000 with your own workspace ID
# spark.conf.set("spark.sql.catalog.pbi.workspace, "00000000-0000-0000-0000-000000000000")

次のコマンドは、Sales Dataset と呼ばれるセマンティック モデル内のすべてのテーブルを一覧表示します。

%%sql
SHOW TABLES FROM pbi.`Sales Dataset`

次のコマンドは、セマンティック モデル Sales DatasetCustomer テーブルのデータを表示します。

%%sql
SELECT * FROM pbi.`Sales Dataset`.Customer

Power BI メジャーには、仮想 _Metrics テーブルを介してアクセスして、リレーショナル Spark SQL と多次元 Power BI をブリッジできます。 次の例では、Total RevenueRevenue BudgetSales Dataset セマンティック モデルで定義されているメジャーであり、その他の列はディメンションです。 AVG のような集計関数はメジャーでは無視され、SQL との一貫性を提供するためにのみ存在します。

コネクタでは、Spark 式から Power BI エンジンへの Customer[State] in ('CA', 'WA') のような計算の述語プッシュダウンがサポートされ、Power BI 最適化エンジンの使用が可能になります。

SELECT
    `Customer[Country/Region]`,
    `Industry[Industry]`,
    AVG(`Total Revenue`),
    AVG(`Revenue Budget`)
FROM
    pbi.`Sales Dataset`.`_Metrics`
WHERE
    `Customer[State]` in ('CA', 'WA')
GROUP BY
    `Customer[Country/Region]`,
    `Industry[Industry]`

Power BI メジャーを使用したデータの拡張

add_measure 操作は、セマンティック モデルのメジャーを使用してデータを拡張できる、セマンティック リンクの強力な機能です。 操作は、SemPy Python ライブラリでのみ使用でき、Spark ネイティブ コネクタではサポートされていません。 add_measure メソッドの詳細については、FabricDataFrame クラスのドキュメントの add_measure を参照してください。

SemPy Python ライブラリを使用するには、ノートブック のセルで次のコードを実行して、ノートブック カーネルに SemPy Python ライブラリをインストールします。

# %pip and import only needs to be done once per notebook
%pip install semantic-link
from sempy.fabric import FabricDataFrame

次のコード例は、セマンティック モデルのメジャーを使用して、拡張するデータが含まれる既存の 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", "Total Budget"], dataset="Sales Dataset")

add_measure メソッドは以下の手順を実行します。

  1. FabricDataFrame 内の列名は Power BI ディメンションに分割します。 この操作では、指定されたセマンティック モデル内で分割できない列名は無視されます。 詳細については、サポートされた DAX 構文を参照してください。
  2. 分割された列名を使用して、group by 列を定義します。
  3. group by レベルで 1 つ以上のメジャーを計算します。
  4. FabricDataFrame 内の既存の行で結果をフィルターします。