チュートリアル: セマンティック リンクを使用してセマンティック モデル内のリレーションシップを検出する
[アーティクル] 2025/01/31
7 人の共同作成者
フィードバック
この記事の内容
前提条件
ノートブックを設定する
セマンティック モデルを探索する
定義済みのセマンティック モデルを使用してサンプル セマンティック モデルを抽出する
リレーションシップの検出を補完する
リレーションシップを検証する
関連コンテンツ
さらに 3 個を表示
このチュートリアルでは、Jupyter ノートブックから Power BI を操作し、SemPy ライブラリを使用してテーブル間のリレーションシップを検出する方法について説明します。
このチュートリアルでは、以下の内容を学習します。
セマンティック リンクの Python ライブラリ (SemPy ) を使用して、セマンティック モデル (Power BI データセット) 内のリレーションシップを検出します。
Power BI との統合をサポートし、データ品質分析の自動化に役立つ SemPy のコンポーネントを使用します。 コンポーネントには、次が含まれます。
FabricDataFrame - 追加のセマンティック情報で強化された pandas のような構造体。
Fabric ワークスペースからノートブックにセマンティック モデルをプルする関数。
機能依存関係に関する仮説の評価を自動化し、セマンティック モデル内のリレーションシップの違反を識別する関数。
左側のナビゲーション ペインから [ワークスペース] を選択して、お使いのワークスペースを見つけて選択します。 このワークスペースが現在のワークスペースになります。
Fabric-samples GitHub リポジトリ から Customer Profitability Sample.pbix と Customer Profitability Sample (auto).pbix セマンティック モデルをダウンロードし、ワークスペースにアップロードします。
このチュートリアルには、powerbi_relationships_tutorial.ipynb ノートブックが付属しています。
このセクションでは、必要なモジュールとデータを含むノートブック環境を設定します。
ノートブック内の %pip
インライン インストール機能を使用して PyPI から SemPy
をインストールします:
%pip install semantic-link
後で必要になる SemPy モジュールの必要なインポートを実行します:
import sempy.fabric as fabric
from sempy.relationships import plot_relationship_metadata
from sempy.relationships import find_relationships
from sempy.fabric import list_relationship_violations
出力の書式設定に役立つ構成オプションを適用するために pandas をインポートします:
import pandas as pd
pd.set_option('display.max_colwidth', None)
このチュートリアルでは、標準のサンプル セマンティック モデル Customer Profitability Sample.pbix を使用します。 セマンティック モデルの説明については、Power BI のお客様の収益性のサンプル に関する記事を参照してください。
このノートブックの残りの部分では、2 つのバージョンの Customer Profitability Sample セマンティック モデルを使用します:
顧客の収益性のサンプル : 定義済みのテーブル リレーションシップを持つ Power BI サンプルからのセマンティック モデル
顧客の収益性のサンプル (自動): 同じデータですが、リレーションシップは Power BI によって自動検出されるデータに限定されます。
SemPy の list_relationships
関数を使用して、"顧客収益性サンプル" セマンティック モデル内に事前に定義され、格納されているリレーションシップを読み込みます。 この関数は、表形式オブジェクトモデルから一覧を取得します。
dataset = "Customer Profitability Sample"
relationships = fabric.list_relationships(dataset)
relationships
SemPy の plot_relationship_metadata
関数を使用して、relationships
DataFrame をグラフとして視覚化します。
plot_relationship_metadata(relationships)
このグラフは、このセマンティック モデル内のテーブル間のリレーションシップに関する "グラウンド トゥルース" を示しています。これは、対象分野の専門家によって Power BI でどのように定義されたかを反映しています。
Power BI が自動検出したリレーションシップを使い始めた場合は、セットが小さくなります。
セマンティック モデルで Power BI によって自動検出されたリレーションシップを視覚化します:
dataset = "Customer Profitability Sample (auto)"
autodetected = fabric.list_relationships(dataset)
plot_relationship_metadata(autodetected)
Power BI の自動検出では、多くのリレーションシップが見逃されました。 さらに、自動検出された 2 つのリレーションシップは意味的に正しくありません:
Executive[ID]
->Industry[ID]
BU[Executive_id]
->Industry[ID]
リレーションシップをテーブルとして出力します:
autodetected
インデックス 3 と 4 の行に、Industry
テーブルとの間の誤ったリレーションシップが表示されます。 これらの行を削除するには、この情報を使用します。
誤って識別されたリレーションシップを破棄します。
autodetected.drop(index=[3,4], inplace=True)
autodetected
これで、正しいが不完全なリレーションシップが作成されました。
plot_relationship_metadata
を使用して、これらの不完全なリレーションシップを視覚化します:
plot_relationship_metadata(autodetected)
SemPy の list_tables
および read_table
関数を使用して、セマンティック モデルからすべてのテーブルを読み込みます:
tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']}
tables.keys()
find_relationships
を使用してテーブル間のリレーションシップを探し、ログ出力を確認して、この関数の動作のしくみを理解します。
suggested_relationships_all = find_relationships(
tables,
name_similarity_threshold=0.7,
coverage_threshold=0.7,
verbose=2
)
新しく検出されたリレーションシップを視覚化する:
plot_relationship_metadata(suggested_relationships_all)
SemPy はすべてのリレーションシップを検出できました。
exclude
パラメーターを使用して、以前に識別されなかった追加のリレーションシップに検索を制限します:
additional_relationships = find_relationships(
tables,
exclude=autodetected,
name_similarity_threshold=0.7,
coverage_threshold=0.7
)
additional_relationships
まず、"顧客の収益性のサンプル" セマンティック モデルからデータを読み込みます。
dataset = "Customer Profitability Sample"
tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']}
tables.keys()
list_relationship_violations
関数を使用して、主キー値と外部キー値の重複を確認します。 list_relationships
関数の出力を list_relationship_violations
入力として指定します:
list_relationship_violations(tables, fabric.list_relationships(dataset))
リレーションシップ違反は、興味深い分析情報を提供します。 たとえば、Fact[Product Key]
の 7 つの値のうち 1 つは Product[Product Key]
に存在せず、この不足しているキーは 50
です。
探索的データ分析は刺激的なプロセスであり、データ クリーニングも含まれます。 データの見方やデータに求めるものによって異なりますが、データには常に何かが隠れています。 セマンティック リンクによって、データを使用してより多くのことを実現するために使用できる新しいツールが提供されます。
セマンティック リンク や SemPy については、他のチュートリアルを確認してください。