Tabular Editor 2 Docs
こちらはTabular Editor 2 Docs Advent Calendar 2022への投稿記事です。
2022年11月下旬ごろのDocsを日本語訳しています。
最新情報は公式ページ・公式リポジトリをご確認ください。
ベストプラクティス・アナライザーの改善
Tabular Editor 2.8.1では、ベストプラクティスアナライザーが大きく見直されました。
最初に気づくのは、Tabular Editorがベストプラクティスの問題数をメインUI内で直接レポートするようになったことです。
モデルに変更が加えられると、Best Practice Analyzerはバックグラウンドでモデルの問題点をスキャンします。この機能は、[ファイル] > [環境設定]で無効にすることができます。
リンクをクリック(またはF10キーを押す)すると、新しく改良されたベストプラクティス・アナライザーのUIが表示されます。
以前のバージョンでベストプラクティス・アナライザーを使用されていた方は、まずUIが完全に再設計され、画面上の占有面積が小さくなっていることにお気づきでしょう。これにより、デスクトップの片側にウィンドウをドッキングさせ、もう片側にはメインウィンドウを表示させ、両方を同時に操作できます。
ベストプラクティス・アナライザー・ウィンドウは、モデル上のすべての有効なルールと、各ルールに違反しているオブジェクトを継続的にリストアップします。リスト内の任意の場所を右クリックするか、ウィンドウ上部のツールバーボタンを使用することで、以下のアクションを実行できます。
-
Manage rules...: 後述する「ルール管理」UIが表示されます。このUIは、メインUIの「ツール > BPAルールの管理...」メニューからもアクセス可能です。
-
Go to object...: このオプションを選択するか、リスト内のオブジェクトをダブルクリックすると、メインUIで同じオブジェクトに移動します。
-
Ignore item/items: リスト内の1つまたは複数のオブジェクトを選択し、このオプションを選択すると、選択したオブジェクトに、ベストプラクティス・アナライザーが今後そのオブジェクトを無視すべきことを示す注釈が適用されます。間違ってオブジェクトを無視した場合、画面上部の「無視を表示」ボタンをトグルしてください。これにより、以前に無視したオブジェクトの無視を解除できます。
-
Ignore rule: リスト内で1つ以上のルールを選択した場合、このオプションは、選択したルールを常に無視することを示す注釈をモデル・レベルに追加します。繰り返しになりますが、「無視を表示」ボタンをトグルすることで、ルールの無視を解除することもできます。
-
Generate fix script: 修正が簡単なルール(オブジェクトに1つのプロパティを設定するだけで問題が解決することを意味します)には、このオプションが有効になっています。クリックすると、C#スクリプトがクリップボードにコピーされます。このスクリプトをTabular EditorのAdvanced Scripting エリアに貼り付けて、実行する前に確認して、修正を適用できます。
-
Apply fix: このオプションは、簡単に修正できるルール以外でも利用できます。スクリプトをクリップボードにコピーしなくとも、即座に実行されます。
ベストプラクティスルールの管理
モデルに適用するルールを追加、削除、修正する必要がある場合、そのための新しいUIも用意されています。ベストプラクティス・アナライザーのウィンドウの左上のボタンをクリックするか、メインウィンドウの「ツール > BPAルールの管理」メニューで表示できます。
このUIには2つのリストがあります。上のリストは、現在ロードされているルールのコレクションを表します。このリストでコレクションを選択すると、そのコレクションで定義されているすべてのルールが下のリストに表示されます。デフォルトでは、3つのルール・コレクションが表示されます。
-
Rules within the current model: その名前が示すように、これは現在のモデル内で定義されたルールのコレクションです。ルールの定義は、モデルオブジェクトのアノテーションとして保存されます。
-
Rules for the local user: これらのルールは
%AppData%..\LocalTabularEditorBPARules.json
ファイルに保存されています。これらのルールは、現在ログインしているWindowsユーザーがTabular Editorでロードするすべてのモデルに適用されます。 -
Rules on the local machine: これらのルールは
%ProgramData%TabularEditor FilterBPARules.json
に格納されます。これらのルールは、現在のマシンで Tabular Editor にロードされるすべてのモデルに適用されます。
同じルール(IDによる)が複数のコレクションにある場合、優先順位は上から下へ、つまり、モデル内で定義されたルールは、ローカルマシンで定義された同じIDのルールよりも優先されます。これにより、例えば、モデル特有の慣習を考慮に入れて、既存のルールを上書きできます。
リストの上部には、**(Effective rules)**という特別なコレクションが表示されます。このコレクションを選択すると、現在ロードされているモデルに実際に適用されるルールのリストが表示され、前述のように、同一のIDを持つルールの優先順位が尊重されます。下のリストには、ルールがどのコレクションに属しているかが表示されます。また、より高い優先順位のコレクションに同じIDのルールが存在する場合、そのルールの名前が削除されることに気づくでしょう。
コレクションを追加する
Tabular Editor 2.8.1の新機能は、他のソースからのルールをモデルに含めることができるようになったことです。例えば、ネットワーク共有にあるルールファイルがある場合、そのファイルを現在のモデルのルールコレクションとして含めることができるようになりました。ファイルの場所への書き込み権限があれば、そのファイルからルールの追加、変更、削除を行うことも可能です。この方法で追加されたルール・コレクションは、モデル内で定義されたルールよりも優先されます。このようなコレクションを複数追加した場合、それらを上下に移動して、相互の優先順位を制御できます。
「Add...」ボタンをクリックして、新しいルールコレクションをモデルに追加します。これには、以下のオプションがあります。
- Create new Rule File: これにより、指定された場所に新しい空の.jsonファイルが作成され、その後、ルールを追加することができます。ファイルを選択するとき、相対的なファイルパスを使用するオプションがあることに注意してください。これは、現在のモデルと同じコードリポジトリにルールファイルを格納したい場合に便利です。ただし、相対的なルール・ファイルの参照は、モデルがディスクからロードされたときにのみ機能することに注意してください (Analysis Services のインスタンスからモデルをロードするときには作業ディレクトリが存在しないため)。
- Include local Rule File: ルールの入った.jsonファイルがすでにあり、それをモデルに含めたい場合、このオプションを使用します。ここでも、相対ファイル・パスを使用するオプションがあり、ファイルがモデル・メタデータの近い場所にある場合、有効です。ファイルがネットワーク共有(または、一般的には、現在ロードされているモデル・メタデータが存在する場所とは異なるドライブ)にある場合、絶対パスを使用してのみ、そのファイルをインクルードできます。
- Include Rule File from URL: このオプションを使用すると、有効なルール定義(json)を返すHTTP/HTTPS URLを指定できます。これは、例えばBestPracticeRules GitHub siteの標準BPAルールなど、オンラインソースからルールを含める場合に便利です。オンラインソースから追加されたルールコレクションは、読み取り専用になることを注意してください。
コレクション内のルールを変更する
画面下部では、コレクションが保存されている場所への書き込み権限があれば、現在選択されているコレクション内のルールを追加、編集、クローン、削除できます。また、「Move to...」ボタンにより、選択したルールを別のコレクションに移動またはコピーすることができ、複数のルールのコレクションを容易に管理できます。ルール定義を編集するUIは、以前のバージョンのTabular Editorと変わりませんので、その使い方は旧Best Practice Analyzerの記事を参照してください。
ルール説明のプレースホルダー
以前のバージョンと比較した小さな改良点として、ベストプラクティスルールの説明で次のプレースホルダー値を使用できるようになりました。これにより、ベストプラクティスUIにツールチップとして表示される説明文をよりカスタマイズできるようになりました。
-
%object%
現在のオブジェクトに対する完全修飾されたDAXリファレンス(該当する場合)を返します。 -
%objectname%
は、現在のオブジェクトの名前のみを返します。 -
%objecttype%
現在のオブジェクトの型を返します。