初期化ブロックの作成および構成

このトピックでは、初期化ブロックの理解、作成および構成に必要な知識について説明します。

初期化ブロックの作成

作成する変数のタイプ専用の初期化ブロックを作成します。

グローバル変数またはセッション変数の場合、その初期化ブロックには、変数定義と、変数にその値を提供する初期化問合せが含まれます。静的変数の場合、その初期化ブロックには、変数のデフォルト値を含む変数定義が含まれます。静的変数の初期化ブロックには、初期化問合せは含まれません。
特定のタイプの変数の初期化ブロックを定義する方法の詳細は、「グローバル変数の作成」「セッション変数の作成」または「静的変数の作成」を参照してください。
  1. ホーム・ページで、「ナビゲータ」「セマンティック・モデル」の順にクリックします。
  2. 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
  3. 「変数」をクリックします。
  4. 「作成」をクリックし、「初期化ブロックの作成」をクリックします。
  5. 「初期化ブロックの作成」で、「名前」に移動して、初期化ブロック名を入力します。
  6. 「タイプ」フィールドに移動し、作成する変数のタイプを選択します。「OK」をクリックします。

初期化ブロックを開く

初期化ブロックを開いて、その構成を表示または更新したり、変数定義を表示、更新または追加します。

初期化ブロックに変数定義を追加する方法の詳細は、「グローバル変数の作成」「セッション変数の作成」または「静的変数の作成」を参照してください。
  1. ホーム・ページで、「ナビゲータ」「セマンティック・モデル」の順にクリックします。
  2. 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
  3. 「変数」をクリックします。
  4. 「変数」ペインで、開く初期化ブロックを参照または検索し、ダブルクリックします。

セッション変数処理の遅延

ログオン時間を短縮し、システム・リソースを節約するために、多数のセッション変数を含む初期化ブロックの処理を遅らせることができます。

作成した新しい初期化ブロックは、デフォルトで遅延実行に設定されます。データ・モデラーまたはモデル管理ツールで作成されたモデルをインポートすると、その変数に設定されている遅延実行プロパティがセマンティック・モデラーにインポートされます。

セッション変数初期化ブロックの処理を遅延させると、初期化ブロックに含まれる変数は、ログオン時ではなくセッション中に初めてアクセスされたときに処理されます。また、Oracle Analyticsでは、セッション中に使用されないセッション変数を含む初期化ブロックは実行されません。

初期化ブロックの遅延実行によって、すべての未処理の先行初期化ブロックの処理もトリガーされます。関連付けられたすべての初期化ブロックの変数およびその未処理の先行部分は、遅延処理から返された値で更新されます。

セッション変数初期化ブロックの処理を遅延できない場合、メッセージが表示されます。「セッション変数処理を遅延できない場合」を参照してください。
  1. ホーム・ページで、「ナビゲータ」「セマンティック・モデル」の順にクリックします。
  2. 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
  3. 「変数」をクリックします。
  4. 「変数」ペインで、実行を遅延させる初期化ブロックを参照または検索し、ダブルクリックします。
  5. 初期化ブロックで、「一般」タブをクリックし、「遅延実行の許可」をクリックします。
  6. 「保存」をクリックします。

セッション変数処理を遅延できない場合

このトピックでは、セッション変数初期化ブロック処理を遅延できない場合と、セマンティック・モデラーに表示されるメッセージの例について説明します。

次の場合、変数初期化ブロック処理は遅延できません:

  • 「問合せの返し」フィールドで「変数名と値」オプションが選択されており、変数はデフォルト値で明示的に宣言されていません。

    メッセージ例: 初期化ブロック'A_blk'は、行単位の初期化を使用しているため、その実行を遅延することはできません。

  • 初期化ブロックには、「セキュリティ・センシティブ」オプションが選択された変数が含まれています。

    メッセージ例: 初期化ブロック'A_blk'はセキュリティ・センシティブなセッション変数'A'で使用されているため、その実行を遅延することはできません。

  • 初期化ブロックは、「遅延実行の許可」オプションが選択されていない別の初期化ブロックの先行ブロックです。

    メッセージ例: 初期化ブロック'A_blk'の後の初期化ブロックの1つにAllow deferred executionフラグが設定されていません。初期化ブロック'B_blk'にAllow deferred executionフラグが設定されていません。

セッション変数の動的な作成とその値の設定について

セッション変数の初期化ブロックでは、「問合せの返し」フィールドで「変数名と値」オプションを選択して、セッション変数を動的に作成し、セッションの開始時に値を設定できます。

セッション変数の名前および値は、接続プールを介してアクセスする外部データ・ソースに格納されます。変数は、指定した初期化問合せから値を受け取ります。

例1 - 単一値変数を使用した初期化問合せ

RW_SESSION_VARSという名前の表に含まれる値を使用してセッション変数を作成するとします。この表には、次の3つの列が含まれています:

  • USERID - ユーザーの一意のIDを表す値が含まれます。

  • NAME - セッション変数名を表す値が含まれます。

  • VALUE: セッション変数の値を表す値が含まれます。

この表は、列とその値の例を示しています。

USERID NAME VALUE

JOHN

LEVEL

4

JOHN

STATUS

FULL-TIME

JANE

LEVEL

8

JANE

STATUS

FULL-TIME

JANE

GRADE

AAA

この例を実装するには、セッション変数初期化ブロックを作成し、「問合せの返し」フィールドで「変数名と値」を選択します。次に、「SELECT文」フィールドに、次の初期化問合せを入力します:

SELECT NAME, VALUE
FROM RW_SESSION_VARS
WHERE USERID='VALUEOF(NQ_SESSION.USERID)'

NQ_SESSION.USERIDは、Oracle Analyticsがログオン時に各ユーザーに対して初期化するシステム・セッション変数です。

この例では、初期化時に次のセッション変数が作成されます:

  • JohnがOracle Analyticsに接続すると、そのセッションには2つのセッション変数が含まれます(値4を含むLEVELおよび値FULL_TIMEを含むSTATUS)。

  • JaneがOracle Analyticsに接続すると、そのセッションには3つのセッション変数が含まれます(値8を含むLEVEL、値FULL-TIMEを含むSTATUSおよび値AAAを含むGRADE)。

例2 - 複数の値変数を使用した初期化問合せ

RW_SESSION_VARSという名前の表に含まれる値を使用してセッション変数を作成するとします。この表には、次の3つの列が含まれています:

  • ROLE_NAME - ユーザー・ロールを表す値が含まれます。

  • NAME - セッション変数名を表す値が含まれます。

  • VALUE: セッション変数の値を表す値が含まれます。

この表は、列とその値の例を示しています。

ROLE_NAME NAME VALUE

Role1

LEVEL

4

Role1

STATUS

FULL-TIME

Role2

GRADE

AAA

この例を実装するには、セッション変数初期化ブロックを作成し、「問合せの返し」フィールドで「変数名と値」を選択します。次に、「SELECT文」フィールドに、次の初期化問合せを入力します:

SELECT NAME, VALUE
FROM RW_SESSION_VARS
WHERE ';' || 'valueof(NQ_SESSION.ROLES)' || ';' like '%;' || ROLE_NAME || ';%'

ユーザーにRole1およびロール2が割り当てられている場合、valueof(NQ_SESSION.ROLES)は値Role1;Role2を返します。

NQ_SESSION.ROLESは、Oracle Analyticsがログオン時に各ユーザーに対して初期化するシステム・セッション変数です。

この例では、初期化時に次のセッション変数が作成されます:

  • Role1に割り当てられたユーザーがOracle Analyticsに接続すると、そのセッションには2つのセッション変数が含まれます(値4を含むLEVELおよび値FULL-TIMEを含むSTATUS)。

  • Role2に割り当てられたユーザーがOracle Analyticsに接続すると、そのセッションには1つのセッション変数が含まれます(値AAAを含むGRADE)。

  • ロール1およびRole2に割り当てられたユーザーがOracle Analyticsに接続すると、そのセッションには3つのセッション変数が含まれます(値4を含むLEVEL、値FULL-TIMEを含むSTATUSおよび値AAAを含むGRADE)。

値リストを使用したセッション変数の初期化

セッション変数の初期化ブロックを構成して、値リストを使用してセッション変数を初期化できます。

値リストを使用してセッション変数を初期化するように初期化ブロックを構成するには、初期化ブロック構成で、「問合せの返し」フィールドで「変数名と値」を選択する必要があります。

「変数名と値」フィールドを選択すると、「問合せの返し」フィールドが表示されます。「問合せ結果のキャッシュ」オプションを選択すると、問合せの結果がメイン・メモリー・キャッシュに格納されます。Oracle Analytics問合せエンジンは、キャッシュされた結果を後続セッションに使用します。これにより、セッションの起動時間を短縮できます。ただし、キャッシュされた結果には最新のセッション変数の値が含まれていない場合があります。各新規セッションでセッション変数の最新セットとそれぞれに対応する値が必要な場合、このオプションをクリアする必要があります。

このトピックの情報と例は、論理SQLに固有の内容です。値のリストと変数を物理SQLを使用して初期化する場合、VALUELISTOF関数を使用します。

たとえば、変数LIST_OF_USERS内のユーザー名に割り当てられた顧客を取得するためには、初期化問合せで次のSQL文を使用します:

SELECT 'LIST_OF_USERS', USERID
FROM RW_SESSION_VARS
WHERE NAME='STATUS' AND VALUE='FULL-TIME'

このSQL文により、変数LIST_OF_USERSに、JOHNJANEの値のコロン区切りリスト(たとえば、JOHN:JANE)が移入されます。次のWHERE句に示すように、フィルタでこの変数を使用できます。

WHERE TABLE.USER_NAME = valueof(NQ_SESSION.LIST_OF_USERS)

変数LIST_OF_USERSには、1つ以上の値のリストが含まれます。次の文に示すように、物理IN句は論理WHERE句を置き換えます:

WHERE TABLE.USER_NAME IN ('JOHN', 'JANE')
Select 'LIST_OF_CUSTOMERS', Customer_Name from RW_CUSTOMERS where RW.CUSTOMERS.USER_NAME in (VALUELISTOF(NQ_SESSION.LIST_OF_USERS))

リスト内の特定の値でフィルタするには、ValueNameofを使用します。最初の値は「1」ではなく「0」です。たとえば:

Select 'LIST_OF_CUSTOMERS', Customer_Name from RW_CUSTOMERS where RW.CUSTOMERS.USER_NAME in '(ValueNameOf(0,NQ_SESSION.LIST_OF_USERS))

グローバル変数値を更新するスケジュールの作成

初期化ブロックのグローバル変数の値が更新される頻度をスケジュールできます。

  1. ホーム・ページで、「ナビゲータ」「セマンティック・モデル」の順にクリックします。
  2. 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
  3. 「変数」をクリックします。
  4. 「変数」ペインで、スケジュールする初期化ブロックを参照または検索し、ダブルクリックします。
  5. 初期化ブロックで、「一般」タブをクリックします。
  6. 「実行頻度」フィールドに移動し、初期化ブロックの変数値をリフレッシュする頻度を指定します。
  7. 「開始日」フィールドに移動し、初期化ブロックのリフレッシュ・スケジュールを開始する日時を選択します。
  8. 「保存」をクリックします。

初期化ブロックへの追加データベース問合せの追加

初期化ブロックには、デフォルトの初期化問合せが必要です。会社が使用しているデータ・ソースに固有の追加の初期化問合せ(Oracle SnowflakeやDB2など)を指定できます。

追加の初期化問合せを定義し、対応する変数をデータ・フィルタまたは式で使用すると、Oracle Analyticsは初期化ブロックのデフォルト問合せをスキップします。データ・ソース固有の問合せでは、Oracle Analytics問合せエンジンがバイパスされ、初期化ブロックがインスタンス化され、変数が移入されます。

  1. ホーム・ページで、「ナビゲータ」「セマンティック・モデル」の順にクリックします。
  2. 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
  3. 「変数」をクリックします。
  4. 「変数」ペインで、データベース問合せを追加する初期化ブロックを参照または検索し、ダブルクリックします。
  5. 初期化ブロックで、「変数」タブをクリックし、「追加データベースの問合せを指定します」をクリックします。
  6. 「データベース固有の問合せを追加」をクリックし、問合せを記述するデータベースを選択します。
  7. 「SELECT文: <your_database>」フィールドで、SELECT文を記述します。
  8. 「保存」をクリックします。

選択ステップをオーバーライドする変数で使用される初期化問合せ

階層列を含む分析では、グローバル変数またはセッション変数によって選択ステップをオーバーライドできます。

この目的で使用するグローバル変数およびセッション変数には、有効なJSON構文を使用する必要があります。

JSONを使用して、タイプ、列およびメンバーを次の構文で定義します。

{
  "type": "Hierarchy",
  "column": {
    "subject_area":"your_subject_area",
    "hier_id":"your_hier_id",
    "dim_id":"your_dim_id",
    "table_name":"your_table_name"
  },
  "members": [
    {
      "level_id":"your_level_id",
      "values": [
        your_value,
        your_value
      ]
    },
    {
      "level_id":"your_level_id",
      "values": [
        your_value
      ]
    }
  ]
}

説明:

"type"は、階層タイプを表します。

"column"は、サブジェクト領域および表明などの階層列の情報を表します。

"dim_id"は、論理階層名です。

"members"は、階層レベルおよびメンバーIDを表します。

"level_id"は、プレゼンテーション・レベル名です。

標準的な階層構文の例

{
  "type": "Hierarchy",
  "column": {
    "subject_area": "A - Sample Sales",
    "hier_id": "H2 Offices",
    "dim_id": "H3 Offices",
    "table_name": "Offices"
  },
  "members": [
    {
      "level_id": "Company",
      "values": [
        10001,
        10002
      ]
    },
    {
      "level_id": "Organization",
      "values": [
        1005
      ]
    }
  ]
}

親子階層構文の例

{
  "type":"Hierarchy",
  "column":{
    "subject_area":"A - Sample Sales",
    "hier_id":"Sales Rep Hierarchy",
    "dim_id":"H5 Sales Rep",
    "table_name":"Sales Person"
  },
  "members":[
    {
      "level_id":"Grand Total",
      "values":[
        27,
        24,
        18,
        16
      ]
    }
  ]
}

初期化ブロックの問合せのテスト

初期化ブロックの初期化問合せをテストして、接続プールが正常に機能していること、問合せによって期待どおりの値が返されること、定義した変数に値が正しく割り当てられていることを確認します。

初期化ブロックに専用の接続プールを作成して使用することをお薦めします。「初期化ブロックの接続プールについて」を参照してください。

特定の接続プールが原因で初期化ブロックが失敗した場合、その接続プールを使用する初期化ブロックはそれ以上処理されません。かわりに、接続プールはブロックされ、その接続プールの後続の初期化ブロックはスキップされます。

  1. ホーム・ページで、「ナビゲータ」「セマンティック・モデル」の順にクリックします。
  2. 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
  3. 「変数」をクリックします。
  4. 「変数」ペインで、テストする初期化ブロックを参照または検索し、ダブルクリックします。
  5. 初期化ブロックで、「変数」タブをクリックし、「問合せのテスト」をクリックします。

初期化ブロック内の変数の順序の変更

初期化ブロックの問合せをテストし、変数に間違った値が移入されている場合は、変数の順序を変更する必要がある場合があります。

初期化問合せの列の順序および初期化ブロックで指定された変数の順序により、各変数に割り当てられる列値が決定されます。変数を初期化ブロックに関連付けると、問合せで指定した最初の列がリストの最初の変数に割り当てられます。初期化問合せの列順序が変数の順序と一致しない場合、変数に間違った値が移入されます。

関連付けられた変数の数は、取得される列の数とは異なる場合があります。列よりも変数のほうが数が少ない場合、余分な列値は無視されます。列より多くの変数がある場合、追加の変数はリフレッシュされず、変数は元の値を保持します。

  1. ホーム・ページで、「ナビゲータ」「セマンティック・モデル」の順にクリックします。
  2. 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
  3. 「変数」をクリックします。
  4. 「変数」ペインで、無効化または有効化する初期化ブロックを参照または検索し、ダブルクリックします。
  5. 「初期化」ブロックで、「変数」タブをクリックします。
  6. 変数リストに移動し、移動する変数をクリックして強調表示します。「上に移動」または「下に移動」をクリックします。
  7. 「保存」をクリックします。

初期化ブロックへの依存性の追加

セマンティック・モデルに複数の初期化ブロックがある場合、ブロックを初期化する順序を設定できます。

依存性を設定しない場合、Oracle Analyticsではすべての初期化ブロックが同時に実行されます。変数値が必要な順序で返されないため、NULL値になります。

依存性を追加するには、まず最後に実行する初期化ブロックを開き、その前に実行する初期化ブロックを追加します。たとえば、セマンティック・モデルにAとBという2つの初期化ブロックがあるとします。初期化ブロックBを開き、ブロックBの前にブロックAを実行することを指定します。スケジュールを含むセッション初期化ブロックの依存性を設定する場合、ブロックAは、独自のスケジュールに加えてブロックBのスケジュールに従って実行されます。

  1. ホーム・ページで、「ナビゲータ」「セマンティック・モデル」の順にクリックします。
  2. 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
  3. 「変数」をクリックします。
  4. 「変数」ペインで、依存性を追加する初期化ブロックを参照または検索します。
  5. 初期化ブロックで、「依存性」タブをクリックします。
  6. 「初期化ブロックの追加」をクリックし、初期化ブロックを参照して選択し、「依存性」リストに追加します。
  7. 「保存」をクリックします。

初期化ブロックの無効化または有効化

グローバルまたはセッション初期化ブロックを無効または有効にできます。デフォルトでは、初期化ブロックは有効になっています。

テストの目的で初期化ブロックを無効または有効にできます。
  1. ホーム・ページで、「ナビゲータ」「セマンティック・モデル」の順にクリックします。
  2. 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
  3. 「変数」をクリックします。
  4. 「変数」ペインで、無効化または有効化する初期化ブロックを参照または検索し、ダブルクリックします。
  5. 初期化ブロックで、「一般」タブをクリックし、「無効化」をクリックして初期化ブロックを無効にするか、「無効化」をクリアして初期化ブロックを有効にします。
  6. 「保存」をクリックします。