26 分析ビュー・オブジェクト

分析ビューは、スター・スキーマやスノーフレーク・スキーマ、または集計データ、メジャー計算および説明的なメタデータを持つフラット(非正規化)ファクト表のコンテンツを簡単に拡張できるようにするため、およびデータにアクセスするのに必要なSQLを簡略化するために使用できるビューのタイプです。

分析ビューについては、次のトピックで説明しています。

26.1 分析ビューについて

分析ビューでは、データに対して階層/ディメンション・モデルを重ねて表示します。

分析ビューは、ディメンション表およびスター・スキーマまたはスノーフレーク・スキーマのファクト表で定義されています。ディメンション属性とファクト・データが同じ表にある非正規化表で分析ビューを定義することもできます。階層はディメンション表で定義されています。分析ビューは階層およびファクト表を参照します。

分析ビューはスター・スキーマとしてモデル化されたデータで定義されますが、データがスター・スキーマに格納されている必要はありません。ビューを使用して、他の形式で格納されたデータを分析ビューに示すことができます。一般に、スター・スタイル問合せで適切に動作する表またはビューは、分析ビューでも適切に機能します。ビューにおいてはデータ・セットが小さいほうが適切に動作します。データ・セットが大きい場合は、スター・スキーマの表においてより適切に動作します。パフォーマンスが最も良好なスキーマは、Oracle Database In-Memoryオプションを使用してインメモリー列ストアにロードされたスター・スキーマです。

インメモリー列ストアとともに使用した場合、分析ビューはSQL実行計画を最適化してインメモリー集計(つまり、ベクトル変換実行計画)を利用します。分析ビューでは、集計レベルの問合せをさらに高速化するために、マテリアライズド・ビューを利用できます(マテリアライズド・ビューはインメモリー列ストアにロードできます)。

分析ビューの最小要件は次のとおりです。

  • ディメンション表(またはビュー)。この表には、値の一意のリストを提供し、ファクト表に結合される主キーが必要です。

  • 少なくとも1つのファクト(メジャー)列およびディメンション表の主キーに結合されるキー列があるファクト表。

通常、分析ビューには次の特性があります。

  • 複数のディメンション表により定義され、これによりデータのスライスおよびダイスが可能になります。

  • 1つまたは複数のディメンション表に、異なるレベルの集計のデータが含まれています(例: 日、月、四半期および年)。

分析ビューは、属性ディメンション、階層および分析ビューの3種類のオブジェクトで構成されます。

属性ディメンションは、表またはビューを参照し、列を属性やレベルなどの高レベルのオブジェクトに編成するメタデータ・オブジェクトです。ディメンションおよび階層に関連するメタデータの多くは、属性ディメンション・オブジェクトで定義されます。

階層は、ビューのタイプです。階層は、属性ディメンション・オブジェクトを参照します。階層は、階層メンバー間の階層関係を使用してデータを編成します。階層の問合せは、詳細および集計レベルのキー(階層値)およびそれらの値の属性を返します。

分析ビューは、ファクト・データを返すビューのタイプです。分析ビューは、ファクト表と階層の両方を参照します。階層とメジャー・データのいずれも、分析ビューから選択されます。

26.2 分析ビューのメジャー

分析ビューのメジャーには、ファクト・データと計算、またはデータに対して実行する他の操作を指定します。

分析ビューの定義では、1つ以上のベース・メジャーおよび計算済メジャーを指定できます。

ベース・メジャー

ベース・メジャーはファクト表の列への参照です。オプションで分析ビューのデフォルトの集計方法をオーバーライドするmeas_aggregate_clauseを指定できます。各ベース・メジャーにはデフォルトの集計を指定できます。集計には、SUMAVGなどの単純な操作、または属性ディメンションによって異なる複雑にネストした操作を使用できます。

default_aggregate_clauseを使用すると、meas_aggregate_clauseがないベース・メジャーにデフォルトの集計方法を指定できます。default_aggregate_clauseのデフォルト値はSUMです。

計算済メジャー

計算済メジャーは式であり、ユーザー定義の式、または多くの事前定義済のアナリティック計算のうちの1つを使用できます。計算済メジャーの式には、他のメジャー、行関数および階層関数を含めることができます。階層関数では、階層内の関連するメンバーの識別および処理に基づいて計算できます。式は分析ビューの他のメジャーを参照することもありますが、ファクト列を参照しないこともあります。計算では他のメジャーを参照できるため、ネストを使用して複雑な計算を簡単に作成できます。

計算済メジャーの式の定義では、分析ビューのメジャーを定義した順序に関係なく、分析ビューの他のメジャーを使用できます。唯一の制限は、計算に循環を使用できないことです。

分析ビューの定義において計算済メジャーを使用する以外に、分析ビューを問い合せるSELECT文に計算済メジャーを追加できます。これを行うには、文のWITHまたはFROM句でADD MEASURESキーワードを使用します。計算済メジャーの構文は、分析ビューの定義においてであれSELECT文内であれ同じです。

計算済メジャーの式のカテゴリを次に示します。

  • 分析ビューのメジャー式

  • 分析ビューの階層式

  • 単純式

  • 単一行関数式

  • 複合式

  • 日時式

  • 期間式

分析ビューのメジャーの式には、次のような操作があります。

  • LEADおよびLAG

  • 修飾データ参照(QDR)

  • ランク

  • 関連するメンバー

  • シェア

  • ウィンドウの計算

26.3 分析ビューの作成

分析ビューを作成する場合は、1つ以上の階層、および各階層に結合できる少なくとも1つのメジャー列を持つファクト表を指定します。

単純な分析ビューの作成

分析ビューには、ファクト表への参照、および階層に結合できるメジャーがある必要があります。

例26-1 単純な分析ビューの作成

この分析ビューでは、TIME_HIER階層およびSALE_FACT表が使用されています。単一のメジャーSALESが含まれています。

CREATE OR REPLACE ANALYTIC VIEW sales_av
USING sales_fact                      -- Refers to the SALES_FACT table
DIMENSION BY                          -- List of attribute dimensions
  (time_attr_dim                      -- TIME_ATTR_DIM attribute dimension
    KEY month_id REFERENCES month_id  -- Dimension key joins to fact column
    HIERARCHIES (                     -- List of hierarchies that use 
      time_hier DEFAULT))             -- the attribute dimension
MEASURES                              -- List of measures
 (sales FACT sales)                   -- SALES measure references SALES column
DEFAULT MEASURE SALES;                -- Default measure of the analytic view

分析ビューから選択する問合せにフィルタがない場合は、大量の行が返される可能性があります。ただし、この問合せでは、SALES_AV分析ビューには86行のみを返す単一の階層が含まれています。

SELECT *
  FROM sales_av HIERARCHIES(time_hier)
  ORDER BY time_hier.hier_order;

返される値の一部を次に示します。

simple_av_sel.pngの説明が続きます
図simple_av_sel.pngの説明

別のベース・メジャーの追加

分析ビューに別のベース・メジャーを追加するには、MEASURESリストにそのメジャーを含めます。

例26-2 分析ビューへのベース・メジャーの追加

CREATE OR REPLACE ANALYTIC VIEW sales_av
USING sales_fact
DIMENSION BY
  (time_attr_dim
    KEY month_id REFERENCES month_id
    HIERARCHIES (
      time_hier DEFAULT))
MEASURES
 (sales FACT sales,
  units FACT units)                   -- Add the UNITS base measure
DEFAULT MEASURE SALES;

分析ビューの問合せでは大量の行が返されることがあるため、通常、問合せではフィルタを使用して結果を制限します。この問合せは、WHERE句で期間をYEARレベルにフィルタ処理し、そのレベルのSALESおよびUNITSのデータのみが返されるようにしています。

SELECT time_hier.member_name as TIME,
 sales,
 units
FROM
 sales_av HIERARCHIES(time_hier)
WHERE time_hier.level_name = 'YEAR'
ORDER BY time_hier.hier_order;

返される値は次のとおりです。

av_sel_2measures.pngの説明が続きます
図av_sel_2measures.pngの説明

分析ビューへの階層の追加

通常、分析ビューには1つ以上の属性ディメンションを使用する複数の階層があります。

例26-3 分析ビューへの階層の追加

この例は、属性ディメンションおよび階層を分析ビューのDIMENSION BYリストに追加しています。

CREATE OR REPLACE ANALYTIC VIEW sales_av
USING sales_fact
DIMENSION BY
  (time_attr_dim
    KEY month_id REFERENCES month_id
    HIERARCHIES (
      time_hier DEFAULT),
   product_attr_dim
    KEY category_id REFERENCES category_id
    HIERARCHIES (
      product_hier DEFAULT),
   geography_attr_dim
    KEY state_province_id 
    REFERENCES state_province_id
    HIERARCHIES (
      geography_hier DEFAULT)
   )
MEASURES
 (sales FACT sales,
  units FACT units
  )
DEFAULT MEASURE sales;

次の問合せは、PRODUCT_HIER階層およびGEOGRAPHY_HIER階層をFROM句のHIERARCHIESフェーズに追加しています。

SELECT time_hier.member_name AS Time,
 product_hier.member_name AS Product,
 geography_hier.member_name AS Geography,
 sales,
 units
FROM
 sales_av HIERARCHIES (time_hier, product_hier, geography_hier)
WHERE time_hier.level_name in ('YEAR')
  AND product_hier.level_name in ('DEPARTMENT')
  AND geography_hier.level_name in ('REGION')
ORDER BY time_hier.hier_order,
  product_hier.hier_order,
  geography_hier.hier_order;

問合せは50行を戻します。次の図は、最初の20行のみを示しています。

av_sel_all_hiers.pngの説明が続きます
図av_sel_all_hiers.pngの説明

例に使用されている表、分析ビュー・コンポーネント・オブジェクトおよび問合せを作成するSQLスクリプトは、Oracle Live SQL Webサイト(https://livesql.oracle.com/apex/livesql/file/index.html)で表示および実行できます。

26.4 計算済メジャーの例

計算済メジャーは、分析ビューのMEASURES句にmeasure_name AS ()の形式で追加する式です。

LAG式の追加

この例は、LAG操作を使用する計算済メジャーをSALES_AV分析ビューに追加しています。

例26-4 LAG式の追加

CREATE OR REPLACE ANALYTIC VIEW sales_av
USING sales_fact
DIMENSION BY
  (time_attr_dim
    KEY month_id REFERENCES month_id
    HIERARCHIES (
      time_hier DEFAULT),
   product_attr_dim
    KEY category_id REFERENCES category_id
    HIERARCHIES (
      product_hier DEFAULT),
   geography_attr_dim
    KEY state_province_id REFERENCES state_province_id
    HIERARCHIES (
      geography_hier DEFAULT)
   )
MEASURES
 (sales FACT sales,
  units FACT units,
  sales_prior_period AS       -- Add a calculated measure.
    (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1))
  )
DEFAULT MEASURE SALES;

YEARレベルとQUARTERレベルでSALESメジャーとSALES_PRIOR_PERIODメジャーを選択します。

SELECT time_hier.member_name as TIME,
 sales,
 sales_prior_period
FROM
 sales_av HIERARCHIES(time_hier)
WHERE time_hier.level_name IN ('YEAR','QUARTER')
ORDER BY time_hier.hier_order;

この問合せ結果の一部では、LAG式によって同じレベル内の前の期間が返されています。

av_calc_meas_lag.pngの説明が続きます
図av_calc_meas_lag.pngの説明

SHARE OF式

シェアのメジャーは、親の行、祖先の行または現在のレベルのすべての行と現在の行の比率を計算します。たとえば、地理的メンバーとそのメンバーの親の比率です。シェアのメジャーは、SHARE OF式を使用して指定します。

例26-5 SHARE OF式の使用

この例は、SHARE OF操作を使用する計算済メジャーをSALES_AV分析ビューに追加しています。

CREATE OR REPLACE ANALYTIC VIEW sales_av
USING sales_fact
DIMENSION BY
  (time_attr_dim
    KEY month_id REFERENCES month_id
    HIERARCHIES (
      time_hier DEFAULT),
   product_attr_dim
    KEY category_id REFERENCES category_id
    HIERARCHIES (
      product_hier DEFAULT),
   geography_attr_dim
    KEY state_province_id REFERENCES state_province_id
    HIERARCHIES (
      geography_hier DEFAULT)
   )
MEASURES
 (sales FACT sales,
  units FACT units,
  -- Share of calculations
 sales_shr_parent_prod AS
   (SHARE_OF(sales HIERARCHY product_hier PARENT)),
 sales_shr_parent_geog AS
   (SHARE_OF(sales HIERARCHY geography_hier PARENT)),
 sales_shr_region AS
   (SHARE_OF(sales HIERARCHY geography_hier LEVEL REGION)) 
  )
DEFAULT MEASURE SALES;

SALES_SHR_PARENT_PRODメジャーは、CATEGORYレベルまたはDEPARTMENTレベルのSALES値とPRODUCT_HIER階層内の親のSALES値の比率を計算します(Total Server ComputersとComputersのSALESの比率など)。

この問合せは、PRODUCT_HIER階層の各レベルのCY2014のSALESメジャーおよびSALES_SHR_PARENT_PRODメジャーを選択しています。

SELECT time_hier.member_name AS Time,
 product_hier.member_name    AS Product,
 product_hier.level_name     AS Prod_Level,
 sales,
 ROUND(sales_shr_parent_prod,2) AS sales_shr_parent_prod 
FROM
 sales_av HIERARCHIES (time_hier, product_hier)
WHERE time_hier.year_name = 'CY2014'
AND time_hier.level_name = 'YEAR'
ORDER BY product_hier.hier_order;

問合せの結果は次のとおりです。

av_calc_meas_share.pngの説明が続きます
図av_calc_meas_share.pngの説明

SALE_SHR_REGIONメジャーは、REGIONレベルのSALESに対するSTATEレベルまたはCOUNTRYレベルのSALESのシェアを計算します(たとえば、北米のSALESに対する米国カリフォルニア州のSALESの比率です)。

この問合せは、CY2014年の米国の州のSALESメジャーとSALES_SHR_REGIONメジャーの値を返します。

SELECT time_hier.member_name AS Time,
 geography_hier.member_name  AS Geography,
 geography_hier.level_name   AS Geog_Level,
 sales,
 ROUND(sales_shr_region,2)   AS sales_shr_region 
FROM
 sales_av HIERARCHIES (time_hier, geography_hier)
WHERE time_hier.year_name = 'CY2014'
AND time_hier.level_name = 'YEAR'
AND geography_hier.country_name = 'United States'
AND geography_hier.level_name = 'STATE_PROVINCE'
ORDER BY geography_hier.hier_order;

問合せの結果は次のとおりです。

av_calc_meas_share_region.pngの説明が続きます
図av_calc_meas_share_region.pngの説明

QDR式

qdr_expressionは、QUALIFYキーワードを使用して、メジャーの値を単一のディメンション・メンバーに制限します。例としては、CY2011年の売上、または現在の期間とCY2011の売上の相違率があります。QUALIFY式はKEY属性値を参照します。

例26-6 QUALIFY式の使用

SALES_2011メジャーおよびSALES_PCT_CHG_2011メジャーを使用してSALES_AV分析ビューを作成します。

CREATE OR REPLACE ANALYTIC VIEW sales_av
USING sales_fact
DIMENSION BY
  (time_attr_dim
    KEY month_id REFERENCES month_id
    HIERARCHIES (
      time_hier DEFAULT),
   product_attr_dim
    KEY category_id REFERENCES category_id
    HIERARCHIES (
      product_hier DEFAULT),
   geography_attr_dim
    KEY state_province_id REFERENCES state_province_id
    HIERARCHIES (
      geography_hier DEFAULT)
   )
MEASURES
 (sales FACT sales,
  units FACT units,
 -- Sales for CY2011
 sales_2011 AS
    (QUALIFY (sales, time_hier = year['11'])),
  -- Sales percent change from 2011.
  sales_pct_chg_2011 AS
    ((sales - (QUALIFY (sales, time_hier = year['11']))) /
    (QUALIFY (sales, time_hier = year['11'])))
  )
DEFAULT MEASURE SALES;

問合せのフィルタに関係なく、SALES_2011は常にCY2011年のデータを返します。SALES_PCT_CHG_2011メジャーは、現在の期間とCY2011の相違率を計算します。

この問合せは、YEARレベルおよびREGIONレベルでSALES、SALES_2011およびSALES_PCT_CHG_2011を選択します。

SELECT time_hier.member_name   AS Time,
 geography_hier.member_name    AS Geography,
 sales,
 sales_2011,
 ROUND(sales_pct_chg_2011,2) as sales_pct_chg_2011
FROM
 sales_av HIERARCHIES (time_hier, geography_hier)
WHERE time_hier.level_name = 'YEAR'
AND geography_hier.level_name = 'REGION'
ORDER BY geography_hier.hier_order,
 time_hier.hier_order;

問合せ結果の一部を示します。各行のSALES_2011には、CY2011のSALESが返されています。

av_calc_meas_qualify.pngの説明が続きます
図av_calc_meas_qualify.pngの説明

26.5 属性のレポート

階層の属性ディメンションの属性を使用し、分析ビューでそのデータを集計できます。

属性を使用して、データをフィルタ処理したり、レポートで表示したりできます。属性ごとにデータを取得(集計)することもできます。属性を使用して分析ビューに計算済メジャーを作成できます。分析ビューにはその属性の集計行が示されます。

例26-7 SEASON属性の使用

この例は、SEASONおよびSEASON_ORDERを属性として持つ属性ディメンションを最初に作成しています。これにより、階層および分析ビューでそれらの属性のメタデータを再使用して、属性を他のレベルに関連付けることができます。たとえば、SEASONはMONTH値によって決まります。

-- Create a time attribute dimension with a SEASON attribute.
CREATE OR REPLACE ATTRIBUTE DIMENSION time_attr_dim
DIMENSION TYPE TIME
USING time_dim
ATTRIBUTES
 (year_id,
  year_name,
  year_end_date,
  quarter_id,
  quarter_name,
  quarter_end_date,
  month_id,
  month_name,
  month_long_name,
  month_end_date,
  season,
  season_order)
LEVEL month
  LEVEL TYPE MONTHS
  KEY month_id
  MEMBER NAME month_name
  MEMBER CAPTION month_name
  MEMBER DESCRIPTION month_long_name
  ORDER BY month_end_date
  DETERMINES (quarter_id, season, season_order)
LEVEL quarter
  LEVEL TYPE QUARTERS
  KEY quarter_id
  MEMBER NAME quarter_name
  MEMBER CAPTION quarter_name
  MEMBER DESCRIPTION quarter_name
  ORDER BY quarter_end_date
  DETERMINES (year_id)
LEVEL year
  LEVEL TYPE YEARS
  KEY year_id
  MEMBER NAME year_name
  MEMBER CAPTION year_name
  MEMBER DESCRIPTION year_name
  ORDER BY year_end_date
LEVEL season
  LEVEL TYPE QUARTERS
  KEY season
  MEMBER NAME season
  MEMBER CAPTION season
  MEMBER DESCRIPTION season
  ORDER BY season_order;

MONTHがSEASONの子である階層を作成します。

CREATE OR REPLACE HIERARCHY time_season_hier
USING time_attr_dim 
  (month CHILD OF
   season);

TIME_SEASON_HIER階層からデータを選択します。

SELECT member_name,
  member_unique_name,
  level_name,
  hier_order
FROM time_season_hier
ORDER BY hier_order;

問合せの結果では、TIME_SEASON_HIER階層によってALLレベル、SEASONSおよびMONTHSの行が返されています。この図は、返された最初の20行を示しています。

av_calc_meas_attr_report.pngの説明が続きます
図av_calc_meas_attr_report.pngの説明

次に、SEASONの集計データを提供する分析ビューを作成します。

CREATE OR REPLACE ANALYTIC VIEW sales_av
USING sales_fact
DIMENSION BY
  (time_attr_dim
    KEY month_id REFERENCES month_id
    HIERARCHIES (
      time_hier DEFAULT,
      time_season_hier),
   product_attr_dim
    KEY category_id REFERENCES category_id
    HIERARCHIES (
      product_hier DEFAULT),
   geography_attr_dim
    KEY state_province_id 
    REFERENCES state_province_id
    HIERARCHIES (
      geography_hier DEFAULT)
   )
MEASURES
 (sales FACT sales,
  units FACT units
  )
DEFAULT MEASURE SALES;

分析ビューからYEARおよびSEASONごとにSALESを直接選択できるようになりました。この問合せは、TIME_HIER階層およびTIME_SEASON_HIER階層からYEARレベルおよびSEASONレベルで選択します。

SELECT  time_hier.member_name      AS Time, 
 time_season_hier.member_name      AS Season,
 ROUND(sales)                      AS Sales
FROM sales_av HIERARCHIES (time_hier, time_season_hier)
WHERE time_hier.level_name = 'YEAR'
  AND time_season_hier.level_name = 'SEASON'
ORDER BY time_hier.hier_order, 
  time_season_hier.hier_order;

この問合せ結果の一部は、返された最初の12行を示しています。

av_calc_meas_season_sales.pngの説明が続きます
図av_calc_meas_season_sales.pngの説明

例に使用されている表、分析ビュー・コンポーネント・オブジェクトおよび問合せを作成するSQLスクリプトは、Oracle Live SQL Webサイト(https://livesql.oracle.com/apex/livesql/file/index.html)で表示および実行できます。

26.6 フィルタ処理されたファクトおよび追加メジャーによる分析ビュー問合せ

分析ビューからSELECTする問合せには、分析ビューによってアクセスされるファクト・データを計算の前にフィルタ処理するFILTER FACTキーワードや、その問合せに対して追加の計算済メジャーを定義するADD MEASURESキーワードが含まれる場合があります。

26.6.1 フィルタ処理されたファクトによる分析ビュー問合せ

分析ビューの問合せにおいて、分析ビューで上位レベルの階層メンバーのデータが集計される前に、ファクト・データをフィルタ処理できます。

分析ビューによって返される集計レコードの値は、分析ビューの階層、集計演算子、およびファクト表に含まれている行によって決まります。分析ビューを問い合せるSELECT文の述語は、分析ビューによって返される行を制限しますが、集計レコードの計算には影響しません。

SELECT文でFILTER FACTキーワードを使用すると、データが分析ビューで集計される前にファクト・レコードをフィルタ処理でき、指定された階層メンバーに対してのみ集計値が生成されます。

例26-8 集計前フィルタ述語がある場合とない場合の問合せ

次の問合せでは、sales_av分析ビューから階層メンバー名および売上値を選択します。問合せの述語により、階層メンバーがYEARレベルのものに制限されます。このフィルタ処理はメジャー値の集計には影響しません。

SELECT time_hier.member_name, TO_CHAR(sales, '999,999,999,999') AS sales 
  FROM sales_av HIERARCHIES(time_hier)
  WHERE time_hier.level_name = 'YEAR'
  ORDER BY time_hier.hier_order;

問合せの結果は次のとおりです。結果にはYEARレベルの階層メンバーの集計されたメジャー値が含まれています。

MEMBER_NAME          SALES
-----------  -------------
CY2011       6,755,115,981
CY2012       6,901,682,399
CY2013       7,240,938,718
CY2014       7,579,746,353
CY2015       7,941,102,885

次の問合せでは、集計前に階層メンバーをフィルタ処理するインライン分析ビューを定義します。

SELECT time_hier.member_name, TO_CHAR(sales, '999,999,999,999') AS sales
  FROM ANALYTIC VIEW (                      -- inline analytic view
  USING sales_av HIERARCHIES(time_hier)
  FILTER FACT (time_hier TO level_name = 'MONTH'
               AND TO_CHAR(month_end_date, 'Q') IN (1, 2)
               )
  )
  WHERE time_hier.level_name = 'YEAR')
  ORDER BY time_hier.hier_order;

問合せの結果は次のとおりです。インライン分析ビューのFILTER FACT句により、最初の2四半期の月以外がすべて除外されます。結果にはこれらの四半期のYEARレベルの集計値が含まれています。集計には第3四半期と第4四半期の値は含まれません。

MEMBER_NAME          SALES
-----------  -------------
CY2011       3,340,459,835
CY2012       3,397,271,965
CY2013       3,564,557,290
CY2014       3,739,283,051
CY2015       3,926,231,605

26.6.2 追加メジャーによる分析ビュー問合せ

ADD MEASURESのキーワードを使用して、分析ビューの問合せにメジャー計算を追加できます。

例26-9 FROM句でメジャーを追加する計算

この例には、sales_av分析ビューを使用して問合せに計算済メジャーshare_salesを追加するインライン分析ビューが含まれています。

SELECT time_hier.member_name AS "Member", 
       TO_CHAR(sales, '999,999,999,999') AS "Sales", 
       ROUND(share_sales, 2) AS "Share of Sales" 
  FROM ANALYTIC VIEW (
    USING sales_av HIERARCHIES (time_hier)
    ADD MEASURES (
      share_sales as (SHARE_OF(sales HIERARCHY time_hier PARENT))
    )
  )
  WHERE time_hier.level_name IN ('ALL', 'YEAR')
  ORDER BY time_hier.hier_order;

問合せの結果は次のとおりです。

Member          Sales   Share of Sales
------  --------------  --------------
ALL     36,418,586,336
CY2011   6,755,115,981            0.19
CY2012   6,901,682,399            0.19
CY2013   7,240,938,718            0.2
CY2014   7,579,746,353            0.21
CY2015   7,941,102,885            0.22

例26-10 WITH句でメジャーを追加する計算

この例では前の例と同じ分析ビューが定義されていますが、SELECT文のWITH句を使用してそうしています。

WITH my_av ANALYTIC VIEW AS (
  USING sales_av HIERARCHIES (time_hier)
  ADD MEASURES (
    share_sales as (SHARE_OF(sales HIERARCHY time_hier PARENT))
  )
)
SELECT time_hier.member_name AS "Member",
       TO_CHAR(sales, '999,999,999,999') AS "Sales", 
       ROUND(share_sales, 2) AS "Share of Sales"
  FROM my_av
  WHERE time_hier.level_name IN ('ALL', 'YEAR')
  ORDER BY time_hier.hier_order;

問合せの結果は前の例と同じです。

Member          Sales   Share of Sales
------  --------------  --------------
ALL     36,418,586,336
CY2011   6,755,115,981            0.19
CY2012   6,901,682,399            0.19
CY2013   7,240,938,718            0.2
CY2014   7,579,746,353            0.21
CY2015   7,941,102,885            0.22

26.6.3 フィルタ処理されたファクトおよび複数の追加メジャーによる分析ビュー問合せ

分析ビューの問合せでは、事前集計フィルタおよび追加メジャーを指定できます。

例26-11 問合せフィルタ・ファクトおよび複数の計算済メジャーを使用する問合せ

この問合せのWITH句の分析ビューは、sales_av分析ビューに基づいています。my_av分析ビューにより、time_hier階層のメンバーがQUARTERレベルの第1および第2四半期に、そしてgeography_hier階層のメンバーがCOUNTRYレベルのMexicoおよびCanadaにフィルタ処理されます。そして前期の売上と、前期売上からの売上の変化率を計算する計算済メジャーを追加します。

WITH my_av ANALYTIC VIEW AS (
  USING sales_av HIERARCHIES (time_hier, geography_hier)
  FILTER FACT (time_hier TO level_name = 'QUARTER' 
               AND (quarter_name LIKE 'Q1%' OR quarter_name LIKE 'Q2%'),
               geography_hier TO level_name = 'COUNTRY'
               AND country_name IN ('Mexico', 'Canada'))
  ADD MEASURES (sales_pp AS
                  (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1)),
                sales_pp_pct_change AS 
                  (LAG_DIFF_PERCENT(sales) OVER (HIERARCHY time_hier OFFSET 1)))
  )
 SELECT time_hier.member_name AS time,
   geography_hier.member_name AS geography,
   sales,
   sales_pp,
   ROUND(sales_pp_pct_change,3) AS "Change"
 FROM my_av HIERARCHIES (time_hier, geography_hier)
 WHERE time_hier.level_name IN ('YEAR') AND
        geography_hier.level_name = 'REGION'
 ORDER BY time_hier.hier_order;

結果は次のようになります。

TIME    GEOGRAPHY           SALES    SALES_PP     Change
------  -------------  ------------  -----------  ------
CY2011  North America  229,884,616
CY2012  North America  233,688,485   229,884,616    .017
CY2013  North America  245,970,470   233,688,485    .053
CY2014  North America  256,789,511   245,970,470    .044
CY2015  North America  270,469,199   256,789,511    .053