テクテク日記

テクテク=テクノロジー&一歩ずつ(テクテク)

セルフサービスBIユーザーのためのMicrosoft Fabric③

前回、Fabricにおける各種アイテム(ステージングアイテム、データフロー、Lakehouse等)やOneLakeの機能であるショートカットについて、M以外の言語(T-SQL, Spark SQL, pySpark)によるデータ変換を説明しました。下図で言うと「ロード先」のステップまで完了したことになります。

ローカル環境でBI構築する場合とは異なり、Fabricはウェブベースで操作することになるため、ブラウザ上の各機能について慣れておくことが重要となります。今回はモデリング・可視化の部分で注意すべき点について詳しく見ていきたいと思います。

※注意
データセットは別名「セマンティックモデル」に変更となっています。本記事にある「データセット(既定)」は現在、「セマンティックモデル(デフォルト)」になっています
Datasets renamed to semantic models | Microsoft Power BI Blog | Microsoft Power BI

Power BIモデリング

ここまでの話は長く感じるかもしれませんが、実は非常にシンプルなプロセスです。Fabricは現在パブリックプレビュー段階にあり、いくつかのワークロード*1には不安定な部分もありますが、慣れればセルフサービスBIユーザーはPower BIと同じレベルでデータ分析基盤を構築できるようになると思います。

前回のおさらいですが、Power BIのデータセットには下記①~⑤のテーブルを使用することになります。なお、①についてはOneLakeのショートカット機能をNotebookでDimCalendarに変換したものであり、CalendarMasterは使用しません。

ここからモデリングのためにデータセットをみていきますが、LH_ContosotというLakehouseを作った際、自動的にSQL エンドポイントデータセット (既定)も作られます。名前が全て同じですので、アイテムを区別するためには各アイテムの「型」、もしくは一番左の「アイコン」(正直、覚えるのが大変)から判断する必要があります。

SQLエンドポイントは、SQLに慣れた人やアナリストがデータ分析を行う際に使用できます。T-SQL*2でビュー*3を作ればPower BIデータセットで使用するテーブルにすることも可能ですし、データの中身をざっくり知りたい場合などにも便利です。そういう意味で、SQLエンドポイントはLakehouseで作られたデルタテーブルをクエリするために必要不可欠の機能となります。

データセット(既定)

まずは最も簡単な「データセット(既定)」について見ていきます。「データセット(既定)」はLakehouseにデータがロードされる予定となった場合、Fabricによって自動的に生成されます(上図の赤いハイライト部分)。

LH_Contosoをクリック(下記①)してみると、②の通り、「データモデルを開く」という項目がグレイアウトされた状態となり、データモデル(Power BI Desktopでいうモデルビュー)を開くことができません。

ここで覚えて頂きたいのは、

「データセット(既定)」は1つのLakehouseに1つだけ、そして1つのWarehouseにも1つだけ

存在することです。今回、Lakehouseから「データセット(既定)」が自動的に生成されていますが、なぜ「データモデルを開く」を選択できないのかにはいくつかの理由が考えられます。主な要因は以下の2つです。

  1. 「データセット(既定)」はFabric製品チームによって誤って削除されることを防ぐため
  2. 「データセット(既定)」はレポート開発者が手間をかけずにレポートを作成できるようにするため

これらの要因は関連しており、Power BIレポートを簡単に作成できることから、「データセット(既定)」が誤って削除や編集されるリスクを減らすために存在していると考えられます。

※ 2023年8月時点の最新情報ですが、「データセット(規定)」を今後どのように扱っていくべきか、Power BIのAnalysis ServicesチームとFabric Lakehouse / Warehouseチームは今後話を継続していく予定です。「データセット(規定)」がユーザーに見えるのに編集ができないというユーザー体験はあまり宜しくないという意見や、技術的に「データセット(規定)」をなくすことができない、オプトアウト形式にしていく、非表示にするためのアーキテクチャを考えていく、等について話し合われる予定です。

ここでLH_Contoso(データセット(既定))をクリックしてみます。

すると以下の詳細画面にナビゲートされますが、①~④について簡単に解説をします。

①についてですが、Importモードとは異なり、Direct Lakeモード(後述します)では通常のインポートモードとは異なり、pbixファイルをダウンロードすることはできません。これは制限事項の1つですが、将来的にはどのように変わるかはまだ分かっていません。

②はデータセット(既定)と関連するアイテムの関係(Relation)を表しており、Upstreamは当該データセット(既定)が参照しているアイテムを示し、Downstreamは同じく参照して作成されたアイテム(例: Power BIレポート)を示します。今回の例ではまだPower BIレポートを作成していないため、すべてがUpstream(上流)になっています。もし系列図で確認したい場合は、ページ上部の「系列」>「系列ビューを開く」から以下のように確認できます。

③は「ページ分割されたレポート」を作るための機能ですが、これにより帳票ベースのデータを作り、データをエクスポートすることが可能となります。

④は先述の通り、Microsoftが自動的に作成されたデータセットを無駄に変更できないよう、当該の「データセット(既定)」への恣意的なアクセスを最小限に抑える意図が込められています。

データセット(既定)の編集

「データセット(既定)」を編集するためには以下2つの方法があります。

どちらも「SQLエンドポイント」を開くものですが、開いたページの左下の「モデル」をクリックすると、下図のような画面となります。ここから必要なテーブルと不要なテーブルを確認していきます。

不要となったテーブルは左のエクスプローラーから右クリック > 既定のデータセットから削除。なお、ここで削除したものは、Lakehouseのデルタテーブルではなく、あくまでPower BIのデータセットに必要かどうかということになりますので、Power Queryで言えば、クエリをテーブルとして読み込まない作業になります。

※2023年7月時点、「既定のデータセットから削除」を行うと、モデルビューのレイアウトがリセットされてしまうので、作業効率が少々下がる可能性があります

これでウェブ、そしてPower BI Desktopでライブ接続*4を行った場合にテーブルが表示されなくなります。同じく、テーブルを非表示にした場合でもPower BI Desktop上からは表示されなくなります。なお、非表示の良いところは、上述したレイアウトが崩れることなく作業を進めることができるところにあります。

既定のデータセットを元に戻す場合は同じように右クリック > 「既定のデータセットに追加」で戻せるようになります。

ここからリレーションシップを作っていきます。


※上記の「参照整合性を想定」に関する詳細は、こちらをご参照ください。一般的には、DirectQueryを使用する場合には「参照整合性を想定」にチェックを入れることでパフォーマンスの向上が期待できますが、Direct Lakeの場合については具体的な影響はまだ明確ではありません

ウェブ上でリレーションシップを作ったりすることを「ウェブオーサリング」と言いますが、2023年4月以降にパブリックプレビューとなった機能です。
powerbi.microsoft.com

お気づきの方もいるかもしれませんが、ここまでの操作ではPower BI Desktopを一切使用しておらず、MacBookでも分析モデルを作成することができるようになりました。また、自動保存機能が有効になっているため、誤ってブラウザのタブを閉じてしまっても設定に問題はありません。

その他自動生成アイテム

「データセット(既定)」が削除できないという部分に加えて、「SQL エンドポイント」も単体で削除することはできません。実際には、「レイクハウス」を削除することで、それらのアイテムが自動的に削除されます。

上図はLH_ContosoのLakehouseを示していますが、「...」から「系列の表示」をクリックすると、リネージ情報を確認することができます。系列は以下の通りですが、使用中のLakehouseを削除すると、その右側に自動的に生成されたアイテムも削除されることが想像できるかと思います。

上図の左から2番目の「使用中のLakehouse」には、Dataflow Gen2からのリネージ情報も表示されると良いですが、現時点ではその情報は提供されていないようです(今後、ユーザーリクエストに応じて改善される可能性もあります)。

また、Dataflow Gen2を作成すると、以下のように将来的に非表示になる予定のステージングアイテムであるDataflowStagingLakehouse1が自動的に作成されますが、これらを削除しないように注意が必要です。

"ノイズ"に思えるかもしれないステージングアイテムですが、デルタ形式のデータを扱う際には概念的に非常に重要です。もし興味がある方は、以下のブログを詳しく読むことを強くおすすめします。

blog.fabric.microsoft.com

Direct Lakeモード

これまで、Power BIにはさまざまなストレージモードが存在しました。

  • インポートモード
  • DirectQueryモード
  • ハイブリッド(Mixed)モード

Fabricの登場により、Direct Lakeと呼ばれる新しいモードが追加されました。モデルビューでは、これに対応するモデルが点線のヘッダーで表示されます。このストレージモードを確認する方法は、モデルビューから次の手順で行います。

  1. テーブルをクリック(どのテーブルでも構いません)
  2. プロパティを選択
  3. 詳細タブに移動&ストレージモードを確認

※細かいですが、上図ではDirectLake(スペースなし)ですが、公式DocsではDirect Lake(スペースあり)となっています(恐らく後者が正しい)

Direct Lakeの特徴は前回記事の通り、DirectQueryとImportモードの各弱点を行いつつ、得意とする部分を持ってきています。Direct Lakeを一言で言えば

Importモードのクエリパフォーマンス + DirectQueryのレイテンシー(データ鮮度)

が併せ持ったストレージモードとなります。

デルタテーブルは既にDelta Parquet形式で圧縮された状態ですので、敢えてPower BI Analysis Services側でキャッシュとして持っておく必要はありません。Power BIレポートから発行されたDAXクエリはAnalysis Servicesを通して、OneLakeにあるDelta Parquetファイルを直接クエリできるため、データモデルのサイズが大きすぎてDirectQueryを使わざるを得なかった場合*5やImportモードでデータセットの更新に時間が掛かっていた場合*6の悩みを解消してくれるでしょう。

レイテンシーとクエリパフォーマンス別にまとめた結果を以下の表に示しています。Direct Lakeは両方の良い側面を活用するようにデザインされていることが分かります。

Direct LakeはVertipaqエンジンとDelta Parquetの親和性により誕生したテクノロジーですが、テクノロジーのディープダイブについては今後様々な記事が出てくるでしょう。興味ある方はまずはChrisさんのブログを参考にすると良いと思います。

Webモデリング

リレーションシップも作れたことですし、さっそくレポートを!と言いたいところですが、Power BI Desktopの使用感と若干異なりますので、モデルビューの「プロパティ」に関する留意点のみ記載しておきます。

  1. 桁区切り等の単位設定
    こちらは数値列、もしくはメジャーの書式を設定する際、プロパティ > 書式設定 > 書式(整数、10進数等)> 桁区切り記号という順番で設定を行います
  2. 列で並べ替え
    「列での並び替え」の事例についてはここをご参考して頂くとして、この機能を使用するためには以下①~④まで設定を行います。

    最終的には⑤の形となって、並べ替えの設定が完了します。

    Power BI Desktopでのやり方と異なるのは、テーブルビューではなく、モデルビューのプロパティから並べ替えを行う必要があることです。なお、ウェブモデリングのUIは今後もいろいろ変わってくると思います。記事を書いていて気付いたのですが、以下のステップで「列で並べ替え」を行うことも可能のようです。
  3. メジャーと計算列・計算テーブルの記述

    2023年7月時点では、計算列や計算テーブルをウェブから作成することはまだサポートされていません。しかし、DAXメジャーの記述は可能です。ただし、「データセット(既定)」と「カスタムデータセット」のUIにはわずかな違いがあります。

    「データセット(既定)」でメジャーを作成する場合、2つの方法(下図aとb)があります。個人的なおすすめとしては、bの対象テーブルを右クリックし、「新しいメジャー」を選択する方法です。これにより、メジャーが存在するテーブルが確実に指定されるため、混乱を避けることができます。

    しかし、実際には「データセット(既定)」でメジャーを作成することは避ける方が良いかもしれません。なぜなら、2023年7月時点では次のような問題が発生しているようです。メジャーを記述してしているとエラーメッセージが出現することがありますが、下記2と3が起こる可能性があります。
    1. メジャーを記述している最中にブラウザページが自動的に更新され、書いている途中のDAX式がすべてリセットされてしまうことがある
    2. メジャーでの記述後には桁区切りの設定ができない
    3. 時折、不明なエラーが発生することがある(例: オートコンプリート機能の突然の利用不能など)」

      Fabricはまだプレビュー段階にあり、このようなエラーは既に多くの場合において報告済みであり、修正されることが期待されています。

カスタムデータセット

「カスタムデータセット」は自分で定義したデータセットであり、使い勝手や機能制約等の面で「データセット(既定)」よりも優れていると言われています。作り方はシンプルで、SQLエンドポイントからLakehouseへ戻り、「新しいPower BI データセット」をクリックします。

冒頭で述べた5つのテーブルだけを選択します。

しばらくすると、下記のように新しいデータセットを作ってくれます。念の為、名前も変更しておきます。

カスタムデータセットが良いところは以下の通り。

A) ワークスペース > データセット > 「データモデルを開く」をクリックすることが可能

なお、データモデルを開くが有効になるためには、以下のように「ユーザーはPower BI サービスでデータ モデルを編集できます (プレビュー)」を✅にしておく必要があります。

B) データセットの共有が可能になります。

C) 「データセット(既定)」で既にモデリング(リレーションシップ、DAXメジャーの記述)が完了している場合、その成果は「カスタムデータモデル」でも引き継がれます。今回の例では、既に構築されたリレーションシップや[SalesAmount]というメジャーが「DS_Contoso」モデルで事前に準備されていました。したがって、「データセット(既定)」の使い勝手が改善されれば、次のような使い方ができるかもしれません。

  1. 「データセット(既定)」を中心としたモデルを構築し、セントラルなモデルとする
  2. 他のユーザーがそのモデルを基にして派生したモデルを作成する
  3. 1で構築したモデルの利点を享受しながら、2で独自のDAXロジックを構築する

また、1で作成したメジャーは2の「カスタムデータモデル」で削除することも可能であり、不要なメジャーは削除することができます。

D) 「データモデルを開く」をクリックすると、Power BIのモデルビューに移動します。ここでDAXを記述する場合、通常「データセット(既定)」で発生するようなエラーは起こりません。さらに、データビューも提供されているため、Power BI Desktopのモデルビューと同じ感覚で使用することができます。

メジャーを記述した後、説明を入れておくと後からメジャーにカーソルを持っていった際、説明がポップアップで表示されるようになりますので、便利です(下記参照)。

ウェブオーサリング時

Power BI Desktopでライブ接続時

可視化

可視化まで非常に長い説明となりましたが、最後にこのDS_Contosoという「カスタムデータセット」をベースに、さくっと可視化してみます。

  1. ワークスペースDemo_Fabric
  2. DS_Contosoデータセットを選択
  3. レポートの作成 > 自動作成
  4. 下記のメッセージが出てきた場合、「データを事前に選択する」をクリック
  5. メジャーSalesQtyすると、メッセージは以下のように変わります

しばらくすると、下図のようなダッシュボードが作られます。自動作成であるため、高い確率で必要なパターンを提示してくれないと思いますが、ざっくり見る分には良いでしょう。

なお、残念ながらメジャーを複数選択すると、以下のようなエラーが発生する可能性がありますが、何が原因であるかは判別できません。少し時間を置いてから再度試して頂くことになりそうです。

可視化についてはこれ以上語りませんが、ビジュアルデザインの観点から、下記3つの要素を入れると多くの質問に回答できるようになるでしょう。

まとめ

  • Microsoft Fabricはウィークリーベースでのアップデートが行われており、今後も機能の改善やUIの変更が多く見られるでしょう
  • 全てウェブベースで完結する可能性があるため、自動生成や非表示予定など、各アイテムの概要を把握しておくことが重要
  • 「データセット(既定)」と「カスタムデータセット」の違いをよく理解しておくことも重要です。前者はLakehouseを削除しない限り削除できず、Power BIデータマートのような使い勝手(SQL文の記述やモデリング)があります。後者はPower BIサービスにおけるウェブオーサリング体験になる
  • 系列ビューを使用することで、リネージ情報を把握することが可能
  • Direct Lakeは新しいストレージモードであり、今後の研究での活用が期待されている
  • Fabricによって分析手法が多様化したことは素晴らしいことですが、「シンプルに複雑」になる場面もあるため、注意が必要

 

*1:Data Factory, Data Engineering, Data Science, Data Warehousing, Real Time Analytics, Power BI等のエクスペリエンス

*2:Transact-SQLの略、SQL Serverデータベース管理システムで使用されるプログラミング言語

*3:クエリの結果セットを表す仮想テーブル。データの更新は基になるテーブルに対して行われるため、ビューを介してデータ変更を行うことは基本的にできない

*4:データセットを作成することなく、Power BI Desktop でレポートを作成できる。1) Power BI サービスに既に存在するデータセット、2) Azure Analysis Services (AAS) データベース、3) SQL Server Analysis Services (SSAS) のオンプレミス インスタンスのいずれかのデータソースに接続可能

*5:例: クエリパフォーマンスが最大のボトルネック

*6:例: データ鮮度の担保がボトルネック