今回は、クエリビルダのフィルター検索において、データを階層表示する方法をご紹介します。
階層データセットの準備
あるテーブルにGroup
というフィールドが存在し、そのデータが階層構造をもっているとします。例えば住所などがいい例かな。
例)東京都/世田谷区/豪徳寺...
そのようなデータをSELECT文等を使用して下記の形式のデータセットに加工します。Viewにしてもいいですし、新たなテーブルを作成してもいいです。
本来は、基データが動的データでしょうからViewがいいでしょうね。
Viewが完成したら、対象データモデルに新しいViewを定義し、Sharperlightエンジンがアクセスできるようにします。
フィルター属性への階層の設定
Sharperlightアプリケーションメニューからスタジオを起動し、対象データモデルを開きます。
次に、階層検索を設定するフィールド、つまりGroup
フィールドのあるテーブル定義を参照します。
Group
フィールドは、オリジナルもそのまま保存しておきたいので、先ずクローンを作成します。
Group
フィールドを選択し、右クリックメニューからCopy
を選択します。そして再度右クリックメニューからPaste
を選択するとクローンフィールドが挿入されます。
クローンフィールドを選択し、右側の領域に属性一覧を表示し、更新を行います。
Code
属性には、GroupHierarchyと入力。
Description
属性には、Group Hierarchyと入力。
下方に移動して...、
Lookup
属性で、オプションボタンをクリックしてLooup属性ダイアログを開きます。
Type
には、Hierarchyを選択します。
Select The Hierarchy Table
ボタンで、先に準備した階層データセットを返すViewもしくはTableを指定します。
Selection
領域にフィールド一覧が表示されます。その一覧から順序に注意しながらフィールドを右側に移動させます。
1番目のフィールドは、階層パスをもつフィールド、2番目は一意のIDやコード、3番目は、階層のレベルを表現するフィールド、その後は順に摘要フィールドを指定していきます。
OK
ボタンで保存します。
次に、Validation Method
属性に移動します。オプションボタンをクリックしてValidation Method属性ダイアログを開きます。
Method
ドロップダウンメニューからHierarchyを選択します。
OK
ボタンで保存します。
以上で完了。
検証
では早速検証してみましょう。
データモデルを保存します。
クエリビルダを実行します。(メインアプリケーションメニューからでもいいですよ)
クエリビルダが起動しら、製品に対象データモデル、つまり今回変更を加えたデータモデルを選択します。
テーブルには、今回更新を加えたテーブルを選択します。
下部の選択領域に先ほど追加したGroup Hierarchy
フィールドが拝見できます。
ドラッグ&ドロップでフィルター領域に設定しましょう。
フィルター領域に設定したGroup Hierarchy
の検索ボタンをクリックします。
検索ウインドウが開き、先ほど設定した階層構造が拝見できます。
<ALL>
を選択し閉じます。
下部の選択領域で右クリックメニューからすべてを出力
を選択し、全フィールドを出力領域に設定します。
プレビュー
ボタンでクエリを実行してみます。
全データが返ってきます。
クエリに戻る
ボタンでクエリ定義に戻ります。
今度は、Group Hierachy
フィルターで特定の値を選択し、階層検索が正常に動作しているか確認します。
<ALL>
のチェックをはずし、東北地方
にチェックを入れます。すると上記テキストフィールドに階層パス\Japan\Tohoku\%
が表示されます。
OK
を押して確定します。
プレビューボタンでクエリを再度実行してみます。青森と八戸市のデータが表示されます。
Sharperlightエンジンで動的に作成されたSQL SELECT文は、このようになっています。
SELECT
J001.[ID]
,J001.[Group]
,J001.[Group]
,J001.[GroupDescription]
,J001.[Amount]
FROM
[dbo].[SampleJPTransaction] J001
WHERE
J001.[Group] IN (
SELECT J001.[UniqueID] FROM [dbo].[SampleJPHierarchy] J001
WHERE J001.[Path] LIKE N'\Japan\Tohoku\%'
)
ORDER BY
1,2,3
いかがでしたか?是非ためしてみてくださいね。