Dynamic Named Set (AS2008 新機能) を試してみました。

Dynamic Named Set (AS2008 新機能) を試してみました。

まず、 AS2005 での Named Set(名前付きセット)の振る舞いを確認します。


(1-0) AS2005 のサンプルデータベース [Adventure Works DW] に接続


(1-1) CREATE SET コマンドで、[Adventure Works] キューブに 名前付きセット [Top 5 Resellers] を作成

CREATE SET [Adventure Works].[Top 5 Resellers] AS 
    TopCount
    (
      [Reseller].[Reseller].[Reseller].MEMBERS
     ,5
     ,[Measures].[Reseller Sales Amount]
    );

(1-2) 名前付きセット [Top 5 Resellers] を使ったクエリを発行

SELECT 
  [Date].[(All)] ON COLUMNS
 ,[Top 5 Resellers] ON ROWS
FROM [Adventure Works]
WHERE 
  [Measures].[Reseller Sales Amount];

Brakes and Gears  \877,107
Excellent Riding Supplies \853,849
Vigorous Exercise Company \841,909
Totes & Baskets Company  \816,756
Retail Mall   \799,278

[Reseller Sales Amount] のトップ 5(売上成績の良い再販業者上位 5 社とその売上金額)が表示されます。


(1-3) 名前付きセット [Top 5 Resellers] を使ったクエリを発行([Product].[Category] を [Accessories] に限定)

SELECT 
  [Date].[(All)] ON COLUMNS
 ,[Top 5 Resellers] ON ROWS
FROM [Adventure Works]
WHERE 
  [Measures].[Reseller Sales Amount] * {[Product].[Category].[Accessories]};

Brakes and Gears  \486
Excellent Riding Supplies \227
Vigorous Exercise Company \8,420
Totes & Baskets Company  \3,736
Retail Mall   \2,346

期待としては、[Product].[Category] を [Accessories] に限定した状態での [Reseller Sales Amount] のトップ 5 ("付属品"に関する売上成績の良い再販業者上位 5 社とその売上金額)を表示したいのですが、実際にはそうはなりません。事前に [Top 5 Resellers] のセットが決まってしまうため、(1-2) でのセットと同一(Brakes and Gears、Excellent Riding Supplies、Vigorous Exercise Company...)になってしまいます。


(1-4) 名前付きセット [Top 5 Resellers] を削除

DROP SET [Adventure Works].[Top 5 Resellers];


(1-5) WITH 句で(クエリスコープで)セットを指定してクエリを発行([Product].[Category] を [Accessories] に限定)

WITH
  SET [Top 5 Resellers] AS 
    TopCount
    (
      [Reseller].[Reseller].[Reseller].MEMBERS
     ,5
     ,[Measures].[Reseller Sales Amount]
    )
SELECT 
  [Date].[(All)] ON COLUMNS
 ,[Top 5 Resellers] ON ROWS
FROM [Adventure Works]
WHERE 
  [Measures].[Reseller Sales Amount] * {[Product].[Category].[Accessories]};

Eastside Department Store \9,870
Registered Cycle Store  \9,341
Bike Dealers Association \9,060
Larger Cycle Shop  \8,950
Advanced Bike Components \8,765

WITH 句で(クエリスコープで)セットを指定した場合は、[Product].[Category] を [Accessories] に限定した状態での [Reseller Sales Amount] のトップ 5 ("付属品"に関する売上成績の良い再販業者上位 5 社とその売上金額) が表示されます。

このように、(セッションスコープ以上での)Named Set(名前付きセット)は事前に静的にセットに含まれる組が決まってしまい、動的ではありません。WITH 句で書けば回避できますが、事前に定義しておくことのできる名前付きセットの方が便利です。そこで、AS2008 では Dynamic Named Set がサポートされました。

(2-0) AS2008 のサンプルデータベース [Adventure Works DW 2008] に接続

ここで、(1-1) 〜(1-4) と同一のクエリを発行すると、AS2005 と同じ結果になることが確認できます(通貨記号や小数点以下の表示桁数など、FORMAT_STRING 関連の部分が変わっていますが今回の主題と関係無いため無視します)。CREATE [Dynamic|Static] SET の 既定値は Dynamic ではなく Static のようです。


(2-1) CREATE SET コマンドで、[Adventure Works] キューブに動的な(Dynamic)名前付きセット [Top 5 Resellers] を作成

CREATE DYNAMIC SET [Adventure Works].[Top 5 Resellers] AS 
    TopCount
    (
      [Reseller].[Reseller].[Reseller].MEMBERS
     ,5
     ,[Measures].[Reseller Sales Amount]
    )

ここで、(1-3) と同一のクエリを発行すると、(1-5) と同じ結果になることが確認できます(通貨記号や小数点以下の表示桁数など、FORMAT_STRING 関連の部分が変わっていますが今回の主題と関係無いため無視します)。動的な名前付きセット(Dynamic Named Set)に含まれる組は、実行時に動的に決定するわけです。

Eastside Department Store $9,869.92
Registered Cycle Store  $9,340.86
Bike Dealers Association $9,060.41
Larger Cycle Shop  $8,949.71
Advanced Bike Components $8,764.77

以上、Dynamic Named Set (AS2008 新機能) を試してみました。