Excel 範囲スライサーと同様に、SQL スライサーでもユーザーは使い慣れたツリー スタイルでアイテムを選択できます。
データベース スキーマに応じて四つの異なるクエリ レイアウトから選択できます。いずれの場合も、結果セットは最終的なツリーを表示したい順序になっている必要があります。以下のモードがあります。
- 深さ列
- 結果セットには、ノードのキー、説明z、深さに対応した三つの列があります。
- 親列
- 結果セットには、キー、説明、親キーに対応した三つの列があります。
- キーと親キーを null にすることはできず、最上位ノードには -1 を使用できます。
- レベルごとに 1 列
- 各列はツリー内のレベルです。上位ノードの値が各行で繰り返されます。
- レベルごとのキーとキャプション
- 各キーとキャプション列のペアがツリー内のレベルです。上位ノードの値が各行で繰り返されます。
例
この例では、Microsoft の Adventure Works デモ リレーショナル データベースと、Adventure Works キューブのユーザーには製品ディメンション ソースとして馴染みのある DimProduct、DimProductSubcategory、DimProductCategory の各テーブルを使用しています。
こちらでは深さ列クエリ スタイルを使用しています。重要なポイントは、SQL クエリによって次の三つの列が返されていることです。
- ID 列
- キャプション列
- ツリー レベル列
これら以外の列はすべて無視されます。
- Adventure Works リレーショナル データベースに接続した後、上記の三つの列を返すクエリを入力します。今回の例では次のクエリを使用できます。
SELECT
'c' + CONVERT(varchar(10), p3.ProductKey) AS Id
, p3.EnglishProductName AS Caption
, 3 AS TreeLevel
, p1.EnglishProductCategoryName + p2.EnglishProductSubcategoryName + p3.EnglishProductName AS Ordering
FROM dbo.DimProduct p3
JOIN dbo.DimProductSubcategory p2
ON p3.ProductSubcategoryKey = p2.ProductSubcategoryKey
JOIN dbo.DimProductCategory p1
ON p1.ProductCategoryKey = p2.ProductCategoryKey
UNION ALL
SELECT
'b' + CONVERT(varchar(10), p2.ProductSubcategoryKey) AS Id
, p2.EnglishProductSubcategoryName AS Caption
, 2 AS TreeLevel
, p1.EnglishProductCategoryName + p2.EnglishProductSubcategoryName AS Ordering
FROM dbo.DimProductSubcategory p2
JOIN dbo.DimProductCategory p1
ON p1.ProductCategoryKey = p2.ProductCategoryKey
UNION ALL
SELECT
'a' + CONVERT(varchar(10), p1.ProductCategoryKey) AS Id
, p1.EnglishProductCategoryName AS Caption
, 1 AS TreeLevel
, p1.EnglishProductCategoryName AS Ordering
FROM dbo.DimProductCategory p1
ORDER BY Ordering
この特定のクエリについては、注意すべき点がいくつかあります。- 上記の三つの列がクエリに表示される最初の三つの列になります。
- スライサーの出力には影響しないものの、クエリによって出力を順序付けるために使用される 4 番目の列があります。
- キー列には、選択されたレベルを示すイニシャル (a、b、又は c) と、それに続くキーを示す数字が表示されます。
- [Insert Slicer] ダイアログでツリー タイプを選択します。
- 次のような出力になります。

- [Update range with selection] プロパティと [First column] オプションが選択されている場合、複合キーがセルに出力されます。これを Excel 式で解析できます。たとえば、出力セルが A1 であると仮定すると次のようになります。
レベル:=IF(LEFT(A1,1)="a","Category",IF(LEFT(A1,1)="b","Subcategory",IF(LEFT(A1,1)="c","Product","Unknown")))
Id: =MID(A1,2,LEN(A1)-1)
さまざまなクエリ スタイルの結果セットの例
深さ列

親列

レベルごとに 1 列

レベルごとのキーとキャプションの列
