0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ADBの分析ビューをOACから使ってみる

Last updated at Posted at 2025-05-19

はじめに

OAC(Oracle Analytics Cloud)では、Oracle Database 19cの分析ビューを使用することができます。
Autonomous Database(ADB)に分析ビューを作成し、OACから利用する方法を紹介します。

OACユーザーにとっての分析ビューのメリット

分析ビューとは、Oracle Databaseに作成するメタデータで、階層やメジャーに簡単にアクセスできます。
通常のリレーショナル表に格納されたデータを扱うよりも簡単に、階層化されたデータを扱うことができます。

分析ビューのその他の特長等、詳しくはこちらを参照してください。

サンプルデータの作成

まずは、ADB(ワークロード・タイプは「データ・ウェアハウス」にしました)にサンプルデータを作成します。

SHJPの準備

こちらの記事の内容を参考に、SHJPスキーマを作成しサンプルデータを作成しました。

分析ビューを作成

SHJPに必要な権限を割り当てます。

GRANT CREATE ATTRIBUTE DIMENSION TO SHJP;
GRANT CREATE HIERARCHY TO SHJP;
GRANT CREATE ANALYTIC VIEW TO SHJP;

SHJPスキーマに顧客階層用のビューを作成します。

CREATE OR REPLACE VIEW SHJP.customers_dim_view AS
SELECT
  a.cust_id,
  a.cust_last_name || ', ' || a.cust_first_name as customer_name,
  a.cust_city || ', ' || a.cust_state_province || ', ' || a.country_id as city_id,
  a.cust_city as city_name,
  a.cust_state_province || ', ' || a.country_id as state_province_id,
  a.cust_state_province as state_province_name,
  b.country_id,
  b.country_name,
  b.country_subregion as subregion,
  b.country_region as region
FROM SHJP.customers a, SHJP.countries b
where a.country_id = b.country_id;

続いて、同じくSHJPスキーマに属性ディメンションと階層を作成します。

CREATE ATTRIBUTE DIMENSION SHJP.TIMES_DIM 
  DIMENSION TYPE TIME 
      CAPTION '時間' 
      DESCRIPTION '時間' 
  USING SHJP.TIMES 
 ATTRIBUTES (
    TIME_ID AS TIME_ID 
      CAPTION '日' 
      DESCRIPTION '日' ,
    CALENDAR_MONTH_DESC AS CALENDAR_MONTH_DESC 
      CAPTION '月' 
      DESCRIPTION '月' ,
    CALENDAR_QUARTER_DESC AS CALENDAR_QUARTER_DESC 
      CAPTION '四半期' 
      DESCRIPTION '四半期' ,
    CALENDAR_YEAR AS CALENDAR_YEAR 
      CAPTION '年' 
      DESCRIPTION '年' 
  )
  LEVEL  
    LEVEL TYPE DAYS 
      CAPTION '日' 
      DESCRIPTION '日' 
    KEY ( "TIME_ID") 
    MEMBER NAME TO_CHAR(TIME_ID) 
    MEMBER CAPTION TO_CHAR(TIME_ID) 
    MEMBER DESCRIPTION TO_CHAR(TIME_ID) 
 ORDER BY MIN TIME_ID ASC NULLS LAST 
    DETERMINES ( "CALENDAR_MONTH_DESC") 
  LEVEL  
    LEVEL TYPE MONTHS 
      CAPTION '月' 
      DESCRIPTION '月' 
    KEY ( "CALENDAR_MONTH_DESC") 
    MEMBER NAME CALENDAR_MONTH_DESC 
    MEMBER CAPTION CALENDAR_MONTH_DESC 
    MEMBER DESCRIPTION CALENDAR_MONTH_DESC 
 ORDER BY MIN CALENDAR_MONTH_DESC ASC NULLS LAST 
    DETERMINES ( "CALENDAR_QUARTER_DESC") 
  LEVEL 四半期 
    LEVEL TYPE QUARTERS 
      CAPTION '四半期' 
      DESCRIPTION '四半期' 
    KEY ( "CALENDAR_QUARTER_DESC") 
    MEMBER NAME CALENDAR_QUARTER_DESC 
    MEMBER CAPTION CALENDAR_QUARTER_DESC 
    MEMBER DESCRIPTION CALENDAR_QUARTER_DESC 
 ORDER BY MIN CALENDAR_QUARTER_DESC ASC NULLS LAST 
    DETERMINES ( "CALENDAR_YEAR") 
  LEVEL  
    LEVEL TYPE YEARS 
      CAPTION '年' 
      DESCRIPTION '年' 
    KEY ( "CALENDAR_YEAR") 
    MEMBER NAME TO_CHAR(CALENDAR_YEAR) 
    MEMBER CAPTION TO_CHAR(CALENDAR_YEAR) 
    MEMBER DESCRIPTION TO_CHAR(CALENDAR_YEAR) 
 ORDER BY MIN CALENDAR_YEAR ASC NULLS LAST 
  ALL
    MEMBER NAME '全年'
    MEMBER CAPTION '全年';

CREATE HIERARCHY SHJP.時間階層 
      CAPTION '年' 
      DESCRIPTION '年' 
  USING SHJP.TIMES_DIM 
  ( "日" CHILD OF "月" CHILD OF "四半期" CHILD OF "年" );

CREATE ATTRIBUTE DIMENSION SHJP.PRODUCTS_DIM 
  DIMENSION TYPE STANDARD 
      CAPTION '製品' 
      DESCRIPTION '製品' 
  USING SHJP.PRODUCTS 
 ATTRIBUTES (
    PROD_ID AS PROD_ID 
      CAPTION '製品ID' 
      DESCRIPTION '製品ID' ,
    PROD_NAME AS PROD_NAME 
      CAPTION '製品' 
      DESCRIPTION '製品' ,
    PROD_SUBCATEGORY AS PROD_SUBCATEGORY 
      CAPTION '製品サブカテゴリ' 
      DESCRIPTION '製品サブカテゴリ' ,
    PROD_CATEGORY AS PROD_CATEGORY 
      CAPTION '製品カテゴリ' 
      DESCRIPTION '製品カテゴリ' 
  )
  LEVEL 製品カテゴリ 
    LEVEL TYPE STANDARD 
      CAPTION '製品カテゴリ' 
      DESCRIPTION '製品カテゴリ' 
    KEY ( "PROD_CATEGORY") 
    MEMBER NAME PROD_CATEGORY 
    MEMBER CAPTION PROD_CATEGORY 
 ORDER BY MIN PROD_CATEGORY ASC NULLS LAST 
  LEVEL 製品サブカテゴリ 
    LEVEL TYPE STANDARD 
      CAPTION '製品サブカテゴリ' 
      DESCRIPTION '製品サブカテゴリ' 
    KEY ( "PROD_SUBCATEGORY") 
    MEMBER NAME PROD_SUBCATEGORY 
    MEMBER CAPTION PROD_SUBCATEGORY 
 ORDER BY MIN PROD_SUBCATEGORY ASC NULLS LAST 
    DETERMINES ( "PROD_CATEGORY") 
  LEVEL 製品名 
    LEVEL TYPE STANDARD 
      CAPTION '製品名' 
      DESCRIPTION '製品名' 
    KEY ( "PROD_NAME") 
    MEMBER NAME PROD_NAME 
    MEMBER CAPTION PROD_NAME 
 ORDER BY MIN PROD_NAME ASC NULLS FIRST 
    DETERMINES ( "PROD_SUBCATEGORY") 
  LEVEL 製品ID 
    LEVEL TYPE STANDARD 
      CAPTION '製品ID' 
      DESCRIPTION '製品ID' 
    KEY ( "PROD_ID") 
    MEMBER NAME TO_CHAR("PROD_ID") 
    MEMBER CAPTION TO_CHAR("PROD_ID") 
    MEMBER DESCRIPTION PROD_NAME 
 ORDER BY MIN PROD_ID ASC NULLS LAST 
    DETERMINES ( "PROD_NAME") 
  ALL
    MEMBER NAME '全製品';

CREATE HIERARCHY SHJP.製品階層 
      CAPTION '製品' 
      DESCRIPTION '製品' 
  USING SHJP.PRODUCTS_DIM 
  ( "製品ID" CHILD OF "製品名" CHILD OF "製品サブカテゴリ" CHILD OF "製品カテゴリ" );

CREATE ATTRIBUTE DIMENSION SHJP.CUSTOMERS_DIM 
  DIMENSION TYPE STANDARD 
      CAPTION '顧客' 
      DESCRIPTION '顧客' 
  USING SHJP.CUSTOMERS_DIM_VIEW 
 ATTRIBUTES (
    CUST_ID AS CUST_ID 
      CAPTION '顧客ID' 
      DESCRIPTION '顧客ID' ,
    CUSTOMER_NAME AS CUSTOMER_NAME 
      CAPTION '顧客' 
      DESCRIPTION '顧客' ,
    CITY_NAME AS CITY_NAME 
      CAPTION '市' 
      DESCRIPTION '市' ,
    STATE_PROVINCE_NAME AS STATE_PROVINCE_NAME 
      CAPTION '州' 
      DESCRIPTION '州または都道府県' ,
    COUNTRY_NAME AS COUNTRY_NAME 
      CAPTION '国' 
      DESCRIPTION '国' ,
    SUBREGION AS SUBREGION 
      CAPTION 'サブ地域' 
      DESCRIPTION 'サブ地域' ,
    REGION AS REGION 
      CAPTION '地域' 
      DESCRIPTION '地域' 
  )
  LEVEL 地域 
    LEVEL TYPE STANDARD 
      CAPTION '地域' 
      DESCRIPTION '地域' 
    KEY ( "REGION") 
    MEMBER NAME REGION 
    MEMBER CAPTION REGION 
 ORDER BY MIN REGION ASC NULLS LAST 
  LEVEL サブ地域 
    LEVEL TYPE STANDARD 
      CAPTION 'サブ地域' 
      DESCRIPTION 'サブ地域' 
    KEY ( "SUBREGION") 
    MEMBER NAME SUBREGION 
    MEMBER CAPTION SUBREGION 
 ORDER BY MIN SUBREGION ASC NULLS LAST 
    DETERMINES ( "REGION") 
  LEVEL  
    LEVEL TYPE STANDARD 
      CAPTION '国' 
      DESCRIPTION '国' 
    KEY ( "COUNTRY_NAME") 
    MEMBER NAME COUNTRY_NAME 
    MEMBER CAPTION COUNTRY_NAME 
 ORDER BY MIN COUNTRY_NAME ASC NULLS FIRST 
    DETERMINES ( "SUBREGION") 
  LEVEL  
    LEVEL TYPE STANDARD 
      CAPTION '州' 
      DESCRIPTION '州または都道府県' 
    KEY ( "STATE_PROVINCE_NAME") 
    MEMBER NAME STATE_PROVINCE_NAME 
    MEMBER CAPTION STATE_PROVINCE_NAME 
 ORDER BY MIN STATE_PROVINCE_NAME ASC NULLS FIRST 
    DETERMINES ( "COUNTRY_NAME") 
  LEVEL  
    LEVEL TYPE STANDARD 
      CAPTION '市' 
      DESCRIPTION '市' 
    KEY ( "CITY_NAME") 
    MEMBER NAME CITY_NAME 
    MEMBER CAPTION CITY_NAME 
 ORDER BY MIN CITY_NAME ASC NULLS FIRST 
    DETERMINES ( "STATE_PROVINCE_NAME") 
  LEVEL 顧客名 
    LEVEL TYPE STANDARD 
      CAPTION '顧客名' 
      DESCRIPTION '顧客名' 
    KEY ( "CUSTOMER_NAME") 
    MEMBER NAME CUSTOMER_NAME 
    MEMBER CAPTION CUSTOMER_NAME 
 ORDER BY MIN COUNTRY_NAME ASC NULLS FIRST 
    DETERMINES ( "CITY_NAME") 
  LEVEL 顧客ID 
    LEVEL TYPE STANDARD 
      CAPTION '顧客ID' 
      DESCRIPTION '顧客ID' 
    KEY ( "CUST_ID") 
    MEMBER NAME TO_CHAR("CUST_ID") 
    MEMBER CAPTION TO_CHAR("CUST_ID") 
    MEMBER DESCRIPTION CUSTOMER_NAME 
 ORDER BY MIN CUSTOMER_NAME ASC NULLS LAST 
    DETERMINES ( "CUSTOMER_NAME") 
  ALL
    MEMBER NAME '全顧客';

CREATE HIERARCHY SHJP.顧客階層 
      CAPTION '顧客' 
      DESCRIPTION '顧客' 
  USING SHJP.CUSTOMERS_DIM 
  ( "顧客ID" CHILD OF "顧客名" CHILD OF "市" CHILD OF "州" CHILD OF "国" CHILD OF "サブ地域" CHILD OF "地域" );

CREATE ATTRIBUTE DIMENSION SHJP.CHANNELS_DIM 
  DIMENSION TYPE STANDARD 
      CAPTION 'チャネル' 
      DESCRIPTION 'チャネル' 
  USING SHJP.CHANNELS 
 ATTRIBUTES (
    CHANNEL_ID AS CHANNEL_ID 
      CAPTION 'チャネルID' 
      DESCRIPTION 'チャネルID' ,
    CHANNEL_DESC AS CHANNEL_DESC 
      CAPTION 'チャネル' 
      DESCRIPTION 'チャネル' ,
    CHANNEL_CLASS AS CHANNEL_CLASS 
      CAPTION 'チャネルカテゴリ' 
      DESCRIPTION 'チャネルカテゴリ' 
  )
  LEVEL チャネルカテゴリ 
    LEVEL TYPE STANDARD 
      CAPTION 'チャネルカテゴリ' 
      DESCRIPTION 'チャネルカテゴリ' 
    KEY ( "CHANNEL_CLASS") 
    MEMBER NAME CHANNEL_CLASS 
    MEMBER CAPTION CHANNEL_CLASS 
 ORDER BY MIN CHANNEL_CLASS ASC NULLS LAST 
  LEVEL チャネル 
    LEVEL TYPE STANDARD 
      CAPTION 'チャネル' 
      DESCRIPTION 'チャネル' 
    KEY ( "CHANNEL_DESC") 
    MEMBER NAME CHANNEL_DESC 
    MEMBER CAPTION CHANNEL_DESC 
 ORDER BY MIN CHANNEL_DESC ASC NULLS LAST 
    DETERMINES ( "CHANNEL_CLASS") 
  LEVEL チャネルID 
    LEVEL TYPE STANDARD 
      CAPTION 'チャネルID' 
      DESCRIPTION 'チャネルID' 
    KEY ( "CHANNEL_ID") 
    MEMBER NAME TO_CHAR("CHANNEL_ID") 
    MEMBER CAPTION TO_CHAR("CHANNEL_ID") 
    MEMBER DESCRIPTION CHANNEL_DESC 
 ORDER BY MIN CHANNEL_ID ASC NULLS FIRST 
    DETERMINES ( "CHANNEL_DESC") 
  ALL
    MEMBER NAME '全チャネル';

CREATE HIERARCHY SHJP.チャネル階層 
      CAPTION 'チャネル' 
      DESCRIPTION 'チャネル' 
  USING SHJP.CHANNELS_DIM 
  ( "チャネルID" CHILD OF "チャネル" CHILD OF "チャネルカテゴリ" );

CREATE ATTRIBUTE DIMENSION SHJP.PROMOTIONS_DIM 
  DIMENSION TYPE STANDARD 
      CAPTION 'プロモーション' 
      DESCRIPTION 'プロモーション' 
  USING SHJP.PROMOTIONS 
 ATTRIBUTES (
    PROMO_ID AS PROMO_ID 
      CAPTION 'プロモーションID' 
      DESCRIPTION 'プロモーションID' ,
    PROMO_NAME AS PROMO_NAME 
      CAPTION 'プロモーション' 
      DESCRIPTION 'プロモーション' ,
    PROMO_SUBCATEGORY AS PROMO_SUBCATEGORY 
      CAPTION 'プロモーション サブカテゴリ' 
      DESCRIPTION 'プロモーション サブカテゴリ' ,
    PROMO_CATEGORY AS PROMO_CATEGORY 
      CAPTION 'プロモーション カテゴリ' 
      DESCRIPTION 'プロモーション カテゴリ' 
  )
  LEVEL プロモーションカテゴリ 
    LEVEL TYPE STANDARD 
      CAPTION 'プロモーション カテゴリ' 
      DESCRIPTION 'プロモーション カテゴリ' 
    KEY ( "PROMO_CATEGORY") 
    MEMBER NAME PROMO_CATEGORY 
    MEMBER CAPTION PROMO_CATEGORY 
 ORDER BY MIN PROMO_CATEGORY ASC NULLS LAST 
  LEVEL プロモーションサブカテゴリ 
    LEVEL TYPE STANDARD 
      CAPTION 'プロモーション サブカテゴリ' 
      DESCRIPTION 'プロモーション サブカテゴリ' 
    KEY ( "PROMO_SUBCATEGORY") 
    MEMBER NAME PROMO_SUBCATEGORY 
    MEMBER CAPTION PROMO_SUBCATEGORY 
 ORDER BY MIN PROMO_SUBCATEGORY ASC NULLS LAST 
    DETERMINES ( "PROMO_CATEGORY") 
  LEVEL プロモーション名 
    LEVEL TYPE STANDARD 
      CAPTION 'プロモーション' 
      DESCRIPTION 'プロモーション' 
    KEY ( "PROMO_NAME") 
    MEMBER NAME PROMO_NAME 
    MEMBER CAPTION PROMO_NAME 
 ORDER BY MIN PROMO_NAME ASC NULLS FIRST 
    DETERMINES ( "PROMO_SUBCATEGORY") 
  LEVEL プロモーションID 
    LEVEL TYPE STANDARD 
      CAPTION 'プロモーションID' 
      DESCRIPTION 'プロモーションID' 
    KEY ( "PROMO_ID") 
    MEMBER NAME TO_CHAR("PROMO_ID") 
    MEMBER CAPTION TO_CHAR("PROMO_ID") 
    MEMBER DESCRIPTION PROMO_NAME 
 ORDER BY MIN PROMO_ID ASC NULLS LAST 
    DETERMINES ( "PROMO_NAME") 
  ALL
    MEMBER NAME '全プロモーション';

CREATE HIERARCHY SHJP.プロモーション階層 
      CAPTION 'プロモーション' 
      DESCRIPTION 'プロモーション' 
  USING SHJP.PROMOTIONS_DIM 
  ( "プロモーションID" CHILD OF "プロモーション名" CHILD OF "プロモーションサブカテゴリ" CHILD OF "プロモーションカテゴリ" );

販売履歴分析という名前の分析ビューを作成します。

CREATE ANALYTIC VIEW SHJP.販売履歴分析 
      CAPTION '販売履歴 (SHサンプルスキーマ)' 
      DESCRIPTION '時間、製品、顧客、チャネル、プロモーション別の販売履歴' 
 USING SHJP.SALES 
 DIMENSION BY ( 
  TIMES_DIM AS TIMES_DIM KEY ( "TIME_ID") REFERENCES ( "TIME_ID")
    HIERARCHIES ( 時間階層 AS 時間階層 DEFAULT ), 
  CHANNELS_DIM AS CHANNELS_DIM KEY ( "CHANNEL_ID") REFERENCES ( "CHANNEL_ID")
    HIERARCHIES ( チャネル階層 AS チャネル階層 DEFAULT ), 
  PRODUCTS_DIM AS PRODUCTS_DIM KEY ( "PROD_ID") REFERENCES ( "PROD_ID")
    HIERARCHIES ( 製品階層 AS 製品階層 DEFAULT ), 
  CUSTOMERS_DIM AS CUSTOMERS_DIM KEY ( "CUST_ID") REFERENCES ( "CUST_ID")
    HIERARCHIES ( 顧客階層 AS 顧客階層 DEFAULT ), 
  PROMOTIONS_DIM AS PROMOTIONS_DIM KEY ( "PROMO_ID") REFERENCES ( "PROMO_ID")
    HIERARCHIES ( プロモーション階層 AS プロモーション階層 DEFAULT ) 
 ) 
 MEASURES ( 
 販売金額 FACT AMOUNT_SOLD CAPTION '販売金額' 
      DESCRIPTION '販売金額' CLASSIFICATION FORMAT_STRING VALUE '999G999G999G999G999G999G990', 
 販売数量 FACT QUANTITY_SOLD CAPTION '販売数量' 
      DESCRIPTION '販売数量' CLASSIFICATION FORMAT_STRING VALUE '999G999G999G999G999G999G990', 
 顧客数 FACT CUST_ID AGGREGATE BY COUNT CAPTION '顧客数' 
      DESCRIPTION '顧客数' CLASSIFICATION FORMAT_STRING VALUE '999G999G999G999G999G999G990' 
 )
 DEFAULT MEASURE 販売金額 
 DEFAULT AGGREGATE BY SUM;

検索できることを確認しておきます。

SELECT
  時間階層.member_name AS 時間,
  製品階層.member_name AS 製品,
  顧客階層.member_name AS 顧客,
  販売数量
FROM SHJP.販売履歴分析
HIERARCHIES (
  時間階層,
  製品階層,
  顧客階層
)
WHERE
  時間階層.level_name = '年' AND
  製品階層.level_name = '製品カテゴリ' AND
  顧客階層.level_name = '地域'

OACから分析ビューに接続

ADBのクライアント資格証明(ウォレット)をダウンロードし、任意の場所に展開します。

「接続」を作成

OACにログインし、「新規」をクリックして「接続」を選択します。

image.png

Oracle Analytic Viewsを選択します。

image.png

必要な情報を入力し「保存」をクリックします。

image.png

ホスト名、ポート、サービス名は、クライアント資格証明のzipを展開した場所にある tnsnames.ora の内容を参考にしてください。
クライアント・ウォレットは、同じく cwallet.sso ファイルを選択します。

データセットの作成

「新規」から「データセット」を選択します。

image.png

作成しておいた「接続」をクリックします。

image.png

「SHJP.販売履歴分析」をクリックして選択し、「追加」をクリックします。

image.png

データセットが作成されました。
分析ビューを基にしたデータセットはプレビュー表示をサポートしていません。
続いて「ワークブックの作成」をクリックします。

image.png

ワークブックを作成

メジャーは「Measures」にまとめられ、それぞれのディメンションがフォルダとして表示されていることがわかります。階層は、階層列として認識しています。

image.png

「販売数量」「製品カテゴリ」をCtrlキーを押しながら同時に選択し、そのままキャンバスにドラッグ&ドロップします。

image.png

「ソフトウェア・その他」をダブルクリックしてみます。

image.png

階層定義に従って、ドリルダウンできました。

image.png

ピボットで階層列を使用してみました。

image.png

関連情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?