Oracle® Fusion Middleware Oracle Business Intelligence Enterprise Editionユーザーズ・ガイド 12c(12.2.1) E70042-01 |
|
![]() 前 |
![]() 次 |
この付録には、Oracle BIサーバーで認識される論理SQL文の構文および使用方法の情報が記載されています。Oracle BIサーバーの論理SQLには、標準SQLの他に、AGO
、TODATE
、EVALUATE
などの特殊関数(SQL拡張)が含まれています。論理SQL問合せはプレゼンテーション・レイヤー・オブジェクトに解決されます。
この付録の内容は次のとおりです。
Oracle BIサーバーは、クライアント・ツールからSQLのSELECT
文を受け入れます。また、Oracle BI管理ツールを使用すると、複雑な式を使用した論理列を定義できます。この付録では、派生列を作成するために管理ツールで使用可能なSELECT
文および式の構文とセマンティクスについて説明します。
プレゼンテーション・レイヤーおよびビジネス・モデルとマッピング・レイヤーがもたらす抽象化により、クライアントは論理SQLのみを指定してデータを問合せできるため、実際の物理ソースとの相互作用はOracle BIサーバーによって処理されます。各データ・ソース・タイプと通信する必要がある複数のソース言語の複雑さが、ユーザーおよびクライアントから隠されます。
「分析」エディタの「詳細設定」タブの「実行されるSQL」セッションを表示すると、特定の分析に対するOracle BIプレゼンテーション・サービスによって実行される論理SQL問合せをアンサーで表示できます。適切な権限がある場合は、「管理」タブの「セッションの管理」ページを表示すれば、SQLを表示することもできます。詳細を参照するには、「セッションの管理」ページの「ログの表示」をクリックします。
また、アンサーには、論理SQLを実行できる場所もあります。適切な権限がある場合は、「管理」タブの「SQLの実行」ページを使用して、SQLコードを入力してOracle BIサーバーに送信できます。分析に階層列、メンバー選択またはグループが含まれていない場合、「分析」エディタの「詳細設定」タブの「高度なSQL句」フィールドを使用できます。「新規フィルタ」ダイアログでSQLを入力することもできます。
Oracle BI Publisher、Oracle Hyperion Interactive Reporting、Oracle BI Add-in for Microsoft Office、Essbaseなど他のクライアントは、論理SQLを表示してOracle BIサーバーに実行するための独自のインタフェースを提供しています。
この項では、SQL構文とセマンティクスについて説明します。トピックは次のとおりです。
SELECT
文(問合せ指定とも呼ばれる)は、Oracle BI Serverを介して意思決定支援システムを問い合せる方法です。SELECT
文では、問合せに一致する表がクライアントに返されます。結果が行と列の形式で格納されるため、表と言えます。
SELECT
文はSQL(Structured Query Language)データベースへの問合せの基礎となります。Oracle BIサーバーは論理リクエストを受け入れてリポジトリ内のオブジェクトに問い合せます。ユーザー(または問合せツール)は標準のSQL SELECT
文を使用して論理リクエストを作成します。サーバーは、論理リクエストを1つ以上のデータ・ソースに対する物理問合せに変換し、論理リクエストに一致するよう結果を組み合せて、エンド・ユーザーに応答を返します。
論理SQLのSELECT
文は、表を結合する必要がないという点で標準SQLとは異なります。問合せに指定される結合条件はすべて無視されます。結合条件はOracle BIリポジトリ内に事前定義されています。
この項では、SELECT
文と個々の句の定義の基本構文について説明します。構文の説明は、Oracle BIサーバー固有の基本構文と機能のみを対象としています。SQL構文の詳細な説明は、サード・パーティのSQLに関する参考文献または使用しているデータベースのベンダーが提供しているSQLに関するリファレンス・マニュアルを参照してください。Oracle Databaseの場合は、『Oracle Database SQL言語リファレンス』を参照してください。
この項の構成は、次のとおりです。
次に、SELECT
文の構文を示します。
SELECT [DISTINCT] select_list FROM from_clause [WHERE search_condition] [GROUP BY column {, column} [HAVING search_condition]] [ORDER BY column {, column}]
説明:
select_list
はリクエストに指定される列のリストです。詳細は、「SELECTリスト構文」を参照してください。
FROM
from_clause
はリクエストの表のリストです。リクエストの特定の結合情報をオプションで含みます。詳細は、「FROM句の構文」を参照してください。
WHERE
search_condition
では条件テストを生成するための条件の任意の組合せを指定します。WHERE
句は、特定の質問に回答する結果を取得するためにリクエストを制約するフィルタとして機能します。選択する列とともに、フィルタにより結果に含まれる内容が決定されます。詳細は、「WHERE句の構文」を参照してください。
GROUP BY
column
{,
column
}
ではデータ・ソースに定義された表に属する列(または別名)を指定します。詳細は、GROUP BY句の構文を参照してください。
HAVING
search_condition
では条件テストを生成するための条件の組合せを指定します。構文はWHERE
句と同じです。
ORDER BY
column
{,
column
}
では結果を並べ替える列を指定します。詳細は、「ORDER BY句の構文」を参照してください。
Oracle BIサーバーはSELECT
文を論理リクエストとして処理します。SELECT
文で集計データをリクエストする場合、サーバーによってGROUP BY
句が自動的に仮定されます。問合せに指定される結合条件はすべて無視されます。結合条件はすべてOracle BIリポジトリ内で事前定義されています。
Oracle BIサーバーは、コメントについて次のSQL構文を受け入れます。
Cスタイル・コメント(/* */)
1行コメントに対する二重スラッシュ(//)
1行コメントに対する番号記号(#)
Oracle BIサーバーは、論理リクエスト内の特定のサブ問合せと、UNION
、UNION ALL
、INTERSECT
およびEXCEPT
操作をサポートします。この機能により、回答可能なビジネス上の質問範囲が拡大し、問合せの生成が容易になり、複数のビジネス・モデル間で問合せを実行できるようになります。
Oracle BIサーバーは、任意の条件式(WHERE
、HAVING
またはCASE
文など)において次のサブ問合せ述語をサポートします。
IN, NOT IN Any, >=Any, =Any, <Any, <=Any, <>Any All, >=All, =All, <All,<=All, <>All EXISTS, NOT EXISTS
アンサーで、上級ユーザーおよび開発者は「分析」エディタの「詳細設定」タブの「高度なSQL句」フィールドを使用して、様々なSQL句(GROUP BY
、HAVING
、DISTINCT
など)を指定し、Oracle BIサーバーに送信されるSQL問合せに含めることができます。分析に階層列、選択またはグループが含まれている場合、特定の「高度なSQL句」フィールドが使用できません。
select_list
は、リクエストの列をリストします。すべての列は単一のビジネス・モデルから派生している必要があります。表名を含めることができます(Table.Columnなど)。これは列名がビジネス・モデル内で一意の場合はオプションです。列名に空白が含まれる場合は、列名を二重引用符で囲みます。Oracle BIサーバーでは常に個別の問合せが実行されるため、DISTINCT
キーワードを含める必要はありません。集計ルールはサーバーで認識され、集計は自動的に実行されるため、集計が行われる列に集計関数(SUM
など)を含める必要はありません。
構文
... * | (column | expr) [[AS] alias] {, (column | expr) [[AS] alias] } ...
説明:
*
はFROM
句内の結果表のすべての列を示します。
column
はデータ・ソースに定義される表に属する列(または別名)です。
expr
は任意の有効なSQL式です。
注意: アンサーでは、*を使用して「分析」エディタの「詳細設定」タブからすべての列を選択することはできません。かわりに、特定の列を指定する必要があります。
Oracle BIサーバーは、任意の有効なSQL FROM
句の構文を受け入れます。FROM
句の作成を容易にするため、テーブル・リストのかわりにサブジェクト・エリアの名前を指定できます。リクエストで検索する列とOracle BIリポジトリの構成に基づいて、適切な表と適切な結合指定が決定されます。
Oracle BIサーバーは、任意の有効なSQL WHERE
句の構文を受け入れます。結合はすべてOracle BIリポジトリ内で構成されるため、WHERE
句に結合条件を指定する必要はありません。WHERE
句で指定された結合条件はすべて無視されます。
Oracle BIサーバーは、任意の条件式(WHERE
、HAVING
またはCASE
文など)において次のサブ問合せ述語をサポートします。
IN, NOT IN Any, >=Any, =Any, <Any, <=Any, <>Any All, >=All, =All, <All,<=All, <>All EXISTS, NOT EXISTS
Oracle BIサーバーの自動集計機能により、GROUP BY
句を発行する必要はありません。GROUP BY
句が指定されていない場合は、GROUP BY
指定によって、SELECT
リスト内のすべての非集計列がデフォルトで使用されます。SELECTリスト内で集計関数を明示的に使用する場合は、異なる列にGROUP BY
句を指定できます。Oracle BIサーバーにより、GROUP BY
句で指定されたレベルに基づいて結果が計算されます。
Oracle BIサーバーに対するリクエストでGROUP BY
句を使用する方法の詳細な説明と例については、『Oracle Business Intelligence Enterprise Editionメタデータ・リポジトリ・ビルダーズ・ガイド』を参照してください。
Oracle BIサーバーは、SELECTリスト内の順序による列の参照(ORDER BY
3, 1, 5など)を含め、任意の有効なSQL ORDER BY
句の構文を受け入れます。
ORDER BY
で、次の構文を使用して問合せのNULLのソート順を変更できます。
ORDER BY col1 NULLS LAST, ORDER BY col2 NULLS FIRST
ソート順序列が割り当てられた論理列の場合、ORDER BY
句を使用してソート順序列を無視し、かわりに列の値でソートします。次の構文に注意してください。
ORDER BY { { <column_index> | <expr> } [ DISPLAY | SORTKEY ] [ ASC | DESC ] [NULLS { FIRST | LAST } ] }
説明:
DISPLAY
は、ソート列が論理列に割り当てられているかどうかに関係なく、式の表示値の順序に基づいてソートします。デフォルトでは、Oracle BIサーバーはソート列が論理列に設定されていない場合にDISPLAY
を仮定します。
SORTKEY
は、論理列に割り当てられたソート列に基づいてソートします。デフォルトでは、Oracle BIサーバーはソート列が論理列に設定されていない場合にSORTKEY
を仮定します。
SELECT_PHYSICAL
コマンドには、メタデータ・リポジトリの物理レイヤー内のオブジェクトに直接問い合せたり、ビジネス・モデルとマッピング・レイヤーまたはプレセンテーション・レイヤーに対して問合せ内の文をネストするための機能があります。
SELECT_PHYSICAL
問合せはプレゼンテーション・レイヤーおよびビジネス・モデルとマッピング・レイヤーを回避しますが、Oracle BIサーバーは、データベースに渡す前に、SELECT_PHYSICAL
問合せに対して分析、解釈および問合せの生成を行います。
SELECT_PHYSICAL
コマンドには、次の制約があるOracle BIサーバーの標準SQLで許可されている任意の要素を含めることができます。
SELECT_PHYSICAL
コマンドは、リポジトリのビジネス・モデルとマッピング・レイヤーまたはプレセンテーション・レイヤーの構造を明示的に参照しません。
SELECT_PHYSICAL
コマンドは、 潜在論理変換をリクエストしません。
SELECT_PHYSICAL
コマンドには、特定の集計関数を含めることはできません。 - 詳細は、「SELECT_PHYSICAL問合せでサポートされていない集計関数」を参照してください。
注意: SELECT_PHYSICAL文はキャッシュされません。 |
専用の物理接続を通じてすべてのSELECT
問合せがSELECT_PHYSICAL
問合せとして処理されるように、Oracle BI ServerへのODBC接続を設定することができます。これを行うには、Oracle BI ServerのODBCデータ・ソースで「リクエストを物理レイヤーに送信」を選択します。詳細は、『Oracle Business Intelligence Enterprise Editionインテグレーターズ・ガイド』のOracle Business Intelligenceと他のクライアントの統合に関する項を参照してください。
SELECT_PHYSICAL
文は物理リクエスト・エンティティとして記録されます。
この項のトピックは次のとおりです。
SELECT_PHYSICAL
問合せの基本構文は「SELECT文の基本構文」と等価で、次のようにSELECT
という語がSELECT_PHYSICAL
という用語に置き換えられています。
SELECT_PHYSICAL [DISTINCT] select_list FROM from_clause [WHERE search_condition] [GROUP BY column {, column} [HAVING search_condition]] [ORDER BY column {, column}]
注意: SELECT_PHYSICAL 文は標準のANSI SQL SELECT 文とほとんど同じです。たとえば、SELECT_PHYSICAL 集計問合せで、 GROUP BY 句も、関連するHAVING 句も省略できません。 |
SELECT_PHYSICAL
問合せで、FROM
リスト内の表名は完全修飾されている必要があります。完全修飾された各表名は、リポジトリの物理レイヤー内の表名と一致している必要があります。
完全修飾された表名は、4つまでのコンポーネント(データベース名、カタログ名、スキーマ名および表名)で構成されます。各コンポーネントを二重引用符(")で囲み、コンポーネント間セパレータとしてピリオド(.)を使用します。たとえば、SQL Server表の"SQL_DB"."My_Catalog"."My_Schema"."Customers"、キューブ表の"FoodMart"..."Sales"などです。
SELECT_PHYSICAL
コマンドの様々な句およびサブ句の詳細は、「SELECT文の基本構文」を参照してください。
次の集計関数は、SELECT_PHYSICAL
問合せでサポートされていません。
AGO
BOTTOMN
FILTER
FIRST
LAST
RCOUNT
RMAX
RMIN
RSUM
TODATE
TOPN
Oracle BIサーバーは次のタイプの論理問合せについてSELECT_PHYSICAL
の使用をサポートしています。
標準の非集計問合せ
標準の非集計SELECT_PHYSICAL
コマンドは、標準の非集計SELECT
コマンドと同じルールに従います。また、文字列関数、数学関数、カレンダ日時関数などのスカラー関数も含めることができます。例:
SELECT_PHYSICAL productid, categoryid FROM "My_DB"."My_Schema"."products" WHERE categoryid > 5;
SELECT_PHYSICAL LEFT(productname,10) FROM "My_DB"."My_Schema"."products" WHERE productname is not null;
集計関数を含む問合せ
一般に、SELECT
問合せでサポートされているすべての集計関数は、SELECT_PHYSICAL
問合せでもサポートされています。このルールに対する例外のリストについては、「SELECT_PHYSICAL問合せでサポートされていない集計関数」を参照してください。
SELECT_PHYSICAL
コマンドでサポートされている集計の場合、各集計には、GROUP
BY
句またはBY
句を使用して明示的に指定された集計レベルが必要です。例:
SELECT_PHYSICAL employeeid, SUM(quantity by) FROM "My_DB"."My_Schema"."employees"; SELECT_PHYSICAL employeeid, SUM(quantity) FROM "My_DB"."My_Schema"."employees" GROUP BY employeeid HAVING SUM(quantity) > 100;
サブ問合せ
Oracle BIサーバーは、次のタイプの問合せをサポートしています。
親問合せとサブ問合せの両方がSELECT_PHYSICAL
を使用する問合せ。
親問合せがSELECT
を使用し、サブ問合せがSELECT_PHYSICAL
を使用する問合せ。
サブ問合せは、Case文に組み込まれたフィルタとプロジェクションの両方でサポートされています。
例:
SELECT_PHYSICAL * FROM "My_DB"."My_Schema"."products" WHERE supplierid IN (SELECT_PHYSICAL supplierid FROM "My_DB"."My_Schema"."suppliers"); SELECT productid FROM snowflakesales.product WHERE categoryid IN (SELECT_PHYSICAL categoryid FROM "My_DB"."My_Schema"."categories");
SELECT
CASE WHEN
b.categoryid IN (SELECT_PHYSICAL
a.categoryid FROM "My_DB"."My_Schema"."products" a) THEN b.categoryid END FROM categories b;
派生表を含む問合せ
SELECT
問合せとSELECT_PHYSICAL
問合せの両方で、FROM
句に派生表を含めることができます。SELECT
またはSELECT_PHYSICAL
を使用して、表を派生できます。例:
SELECT_PHYSICAL COUNT(DISTINCT t.rto) FROM (SELECT_PHYSICAL employeeid AS id, reportsto AS rto FROM "My_DB"."My_Schema"."employees") t;
SELECT productid, categoryid FROM (SELECT_PHYSICAL productid, categoryid FROM "My_DB"."My_Schema"."products" a LEFT OUTER JOIN "My_DB"."My_Schema"."categories" b ON a.categoryid = b.categoryid);
SELECT y.cid, sum(x.qty) FROM (SELECT productid pid, categoryid cid, qtysold qty FROM sales.product) x RIGHT OUTER JOIN (SELECT_PHYSICAL CASE categoryid WHEN 1 THEN null ELSE categoryid END cid FROM "My_DB"."My_Schema"."categories") y ON x.cid = y.cid GROUP BY y.cid;
クロスデータベース問合せ
SELECT_PHYSICAL
を使用して、様々なデータベース内の表を結合できます。例:
SELECT_PHYSICAL a.productid, b.categoryid FROM "My_DB"."My_Schema"."products" a FULL OUTER JOIN "My_DB2"."My_Schema"."categories" b ON a.categoryid = b.categoryid
SELECT_PHYSICAL
問合せはNATURAL JOIN
構文をサポートします。これにより、事前定義した結合式を使用できます。ADFデータ・ソースの場合、ADFのViewLinkがアクティブになります。ただし、NATURAL JOIN
結合タイプは論理表ソース用に公開されません(LEFT OUTER JOIN
など)。
SELECT_PHYSICAL
問合せ内のNATURAL JOIN
キーワードのみ使用できます。Oracle Business IntelligenceでのNATURAL JOIN
の動作はANSI NATURAL JOIN
とは異なります。次に、結合がNATURAL JOIN
構文の有無によりどのように実行されるかを示します。
SELECT PHYSICAL * FROM A, B;
この例では、(結合がメタデータに定義されている場合でも)AB間の結合は実行されません。
SELECT_PHYSICAL * FROM A NATURAL JOIN B;
この例では、AB間の物理結合は実行されます。ADFデータ・ソースの場合、基礎となるViewLinkで定義された結合式が使用されます。
SELECT_PHYSICAL * FROM C, A NATURAL JOIN B;
この例では、CがメタデータでAに結合されている場合でも、AB間の結合のみアクティブになります。CとAの結合は使用されません。
次の例に示すように、SELECT_PHYSICAL
コマンドでセッション変数およびINDEXCOL
関数を使用できます。
SELECT_PHYSICAL VALUEOF(NQ_SESSION.REGION) FROM "My_DB"."My_Schema"."products"; SELECT_PHYSICAL INDEXCOL(VALUEOF(NQ_SESSION.INDEXCOLINDEX), productid, categoryid) FROM "My_DB"."My_Schema"."products";
FETCH
句を使用すると、SELECT
文によって返される行数を制約でき、OFFSET
句を使用すると、指定した行数を結果セットの先頭からスキップできます。両方の句ともオプションで、組み合せて使用することも、単独で使用することもできます。FETCH句とOFFSET句はSELECT
文の要素で、最後に配置されます。
これらの句は、大規模な結果セット(大規模なディメンションの場合など)がある状況で、たとえば最初の100行をユーザーに表示する場合に役立ちます。制限に達するとOracle BIサーバーで処理が停止されるため、全体的なパフォーマンスが向上し、リソースが維持されます。さらに、多くの場合、バックエンド・データベースに制限がプッシュされるため、データベースで問合せが最適化されます。
両方の句とも技術的にはORDER BY
句なしで使用できますが、結果が非確定的になります。そのため、これらの句を使用する際は常にORDER BY
を指定してください。
OFFSET
が未指定の場合のデフォルト値は0(ゼロ)で、結果が最初の行から返されることを意味します。FETCH
が未指定の場合は、返される行数に制限がないことを意味します。
これらの句は、WHERE
句、集計、HAVING
句、ウィンドウ分析関数およびORDER BY
句の後に評価されます。これらの句は、SELECT
に加えてSELECT_PHYSICAL
でも使用できます。
OFFSET句の構文
OFFSET n ROW[S]
n
は、結果セットの先頭からスキップする行数です。n
は0(ゼロ)より大きい値にする必要があります。
FETCH句の構文
FETCH FIRST | NEXT n ROW[S] ONLY
nは取得する行数です。nは0 (ゼロ)より大きい値にする必要があります。
通常、制限句をオフセット句とは別に使用する場合はFIRST
を使用しますが、制限句をオフセット句と組み合せて使用する場合はNEXT
を使用します。
例
SELECT employeeid, firstname, revenue FROM sales.employee ORDER BY revenue desc OFFSET 2 ROWS FETCH NEXT 4 ROWS ONLY
次の表に、OFFSET
句とFETCH
句を指定しない場合の結果セット全体を示します。OFFSET
句とFETCH
句を指定した場合は、太字で示した行のみが返されます。
Employeeid | FirstName | Revenue |
---|---|---|
4 | Margaret | 250187.45 |
3 | Janet | 213051.30 |
1 | Nancy | 202143.71 |
2 | Andrew | 202143.71 |
7 | Robert | 177749.26 |
8 | Laura | 141295.99 |
9 | Anne | 133301.03 |
6 | Michael | 82964.00 |
5 | Steven | 78198.10 |
2つのタイプの演算子(SQL論理演算子および数学演算子)があります。
次のSQL論理演算子は式間の比較を指定するために使用されます。
Between: 条件の境界を決定するために使用されます。それぞれの境界は式で、それらが「より小さい」や「より大きい」で表される場合は、(「以下」や「以上」とは対照的に)境界の範囲には境界の制限値は含まれません。条件を否定する場合は、BETWEEN
の前にNOT
を付けることができます。
In: 列値と一連の値との比較を指定します。
Is Null: 列値とNULL値との比較を指定します。
Like: リテラル値との比較を指定します。通常、ワイルドカード文字とともに使用して、ゼロ文字以上の任意の文字列(%)に一致するか、任意の単一の文字(_)と一致することを示します。
数学演算子は、式要素を組み合せて式内の特定のタイプの比較を作成するために使用されます。
表C-1に演算子をリストし、式での使用方法を説明します。
表C-1 演算子
演算子 | 説明 |
---|---|
+ |
加算用のプラス記号。 |
- |
減算用のマイナス記号。 |
* |
乗算用の乗算記号。 |
/ |
除算用の除算記号。 |
|| |
文字列の連結。 |
( |
左カッコ。 |
) |
右カッコ。 |
> |
大なり記号。値が比較対象より大きいことを示します。 |
< |
小なり記号。値が比較対象より小さいことを示します。 |
= |
等号。同じ値であることを示します。 |
<= |
以下記号。値が比較対象と同じか、比較対象より小さいことを示します。 |
>= |
以上記号。値が比較対象と同じか、比較対象より大きいことを示します。 |
<> |
等しくありません。値が比較対象より大きいか小さいが、異なることを示します。 |
|
|
|
|
|
|
, |
カンマ。リスト内の要素を区切るために使用されます。 |
式は、ある形式から別の形式に値を変換する条件式を作成するための構築ブロックです。式は次のとおりです。
この形式のCASE
文はCASE(Lookup)
形式とも呼ばれます。expr1
の値が検証され、次にWHEN
式の値が検証されます。expr1
の値がいずれかのWHEN
式の値と一致する場合は、対応するTHEN
式にその値が割り当てられます。
どのWHEN
式とも値が一致しない場合は、ELSE
式に指定されているデフォルト値が割り当てられます。ELSE
式が指定されていない場合は、ELSE NULL
が自動的に追加されます。
expr1
が複数のWHEN
句内の式と一致する場合は、最初に一致した式のみが割り当てられます。
注意: CASE 文では、AND はOR よりも優先されます。 |
構文
CASE expr1 WHEN expr2 THEN expr3 {WHEN expr... THEN expr...} ELSE expr END
説明:
CASE
で、CASE
文を開始します。1つの式、1つ以上のWHEN
文とTHEN
文、ELSE
文(オプション)、およびEND
キーワードを指定する必要があります。
WHEN
で、満たす条件を指定します。
THEN
で、対応するWHEN
式が満たされる場合に割り当てる値を指定します。
ELSE
では、満たされるWHEN
条件がない場合に割り当てる値を指定します。省略すると、ELSE NULL
が指定されたものとみなされます。
END
で、CASE
文を終了します。
例
CASE Score-par WHEN -5 THEN 'Birdie on Par 6' WHEN -4 THEN 'Must be Tiger' WHEN -3 THEN 'Three under par' WHEN -2 THEN 'Two under par' WHEN -1 THEN 'Birdie' WHEN 0 THEN 'Par' WHEN 1 THEN 'Bogey' WHEN 2 THEN 'Double Bogey' ELSE 'Triple Bogey or Worse' END
この例では、WHEN
文は厳密な等式を反映する必要があります。たとえば、比較演算子は許可されないため、WHEN < 0 THEN 'Under Par'
というWHEN
条件は使用できません。
この形式のCASE
文は、各WHEN
条件を評価して、それが満たされる場合、対応するTHEN
式の値を割り当てます。
一致するWHEN
条件がない場合は、ELSE
式に指定されているデフォルト値が割り当てられます。ELSE
式が指定されていない場合は、ELSE NULL
が自動的に追加されます。
注意: CASE 文では、AND はOR よりも優先されます。 |
構文
CASE WHEN request_condition1 THEN expr1 {WHEN request_condition2 THEN expr2} {WHEN request_condition... THEN expr...} ELSE expr END
説明:
CASE
で、CASE
文を開始します。1つ以上のWHEN
文とTHEN
文、ELSE
文(オプション)、およびEND
キーワードを指定する必要があります。
WHEN
で、満たす条件を指定します。
THEN
で、対応するWHEN
式が満たされる場合に割り当てる値を指定します。
ELSE
では、満たされるWHEN
条件がない場合に割り当てる値を指定します。省略すると、ELSE NULL
が指定されたものとみなされます。
END
で、CASE
文を終了します。
例
CASE WHEN score-par < 0 THEN 'Under Par' WHEN score-par = 0 THEN 'Par' WHEN score-par = 1 THEN 'Bogie' WHEN score-par = 2 THEN 'Double Bogey' ELSE 'Triple Bogey or Worse' END
Switch形式のCASE
文とは異なり、If形式のWHEN
文では比較演算子が許可されます。たとえば、WHEN < 0 THEN 'Under Par'
というWHEN
条件を使用できます。
リテラルとは、任意のデータ型に対応するNULLでない値です。リテラルは通常定数値です。つまり、何も変更せずに、文字どおりそのまま使用される値です。リテラル値は、それが表すデータ型に準拠する必要があります。
SQLでは、SQL文でリテラルを表現するメカニズムが用意されています。このトピックでは、SQLで各種リテラルを表現する方法について説明します。
文字リテラルは、CHARACTER
またはVARCHAR
のデータ型の値を表します。文字リテラルを表現するには、文字列を一重引用符(')で囲みます。リテラルの長さは、一重引用符の間の文字数で決定されます。
例
'Oracle BI Server' 'abc123'
SQL 92標準では、次の形式で3種類の型指定された日時リテラルが定義されています。
DATE 'yyyy-mm-dd' TIME 'hh:mm:ss' TIMESTAMP 'yyyy-mm-dd hh:mm:ss'
型指定された日時リテラルを表現するには、前述の例に示したように、キーワードのDATE
、TIME
またはTIMESTAMP
を使用して、その後に一重引用符で囲んだ日時文字列を指定します。値が1桁の場合でも、年以外のすべてのコンポーネントには2桁が必要です。
例
DATE '2000-08-15' TIME '11:55:25' TIMESTAMP '1999-03-15 11:55:25'
数値リテラルは、数値データ型(INTEGER
、DECIMAL
、FLOAT
など)の値を表します。数値リテラルを表現するには、数値をSQL文の一部として入力します。
数値リテラルは一重引用符で囲まないでください。一重引用符で囲むと、リテラルを文字リテラルとして表現することになります。
注意: NQSConfig.INIでENABLE_NUMERIC_DATA_TYPE がYES に設定されていると、すべての小数リテラル(またはINTデータ型に収まるには大きすぎる整数リテラル)は、Oracle BIサーバー内でNUMERICとして解析されます。
リテラルをNUMERICとして扱う場合、次を含むOracle標準DOUBLEプロモーション・ルールに注意してください: DOUBLE/NUMBER = DOUBLE , DOUBLE * NUMBER = DOUBLE 数値リテラルの解析は、実際のデータ・ソースがわかる前に問合せ処理の非常に早い段階で発生するため、内部的には、Oracle BIサーバーは NUMERICが有効でOracle BIサーバーが内部的に小数リテラルを含む式を実行する場合、バックエンド・データ・ソースがNUMERICデータ型をサポートしていない場合でも、サーバーはリテラルをNUMERICとして扱います。ただし、タイプ・プロモーション・ルールは引き続き適用されます。たとえば、Oracle BIサーバーがデータ・ソースからデータをDOUBLEとして取得して内部実行中にNUMERICリテラルと組み合せる場合、最終結果は引き続きDOUBLEに変換されます。 |
次の数値リテラルがあります。
整数定数をリテラルとして表現するには、整数をSQL文の一部として入力します(たとえば、SELECT
リスト内で入力します)。整数の前にプラス記号(+)かマイナス記号(-)を付けると、その整数がそれぞれ正の数であるか負の数であるかを示すことができます。記号なしの整数は正の数とみなされます。
例
234 +2 567934
小数リテラルを表現するには、小数を入力します。小数の前にプラス記号(+)かマイナス記号(-)を付けると、その小数がそれぞれ正の数であるか負の数であるかを示すことができます。記号なしの小数は正の数とみなされます。
例
1.223 -22.456 +33.456789
SQL文に変数を使用および設定できます。これを行うには、SQL文の先頭に変数を指定します。
構文
SET VARIABLE variable_name = variable_value; SELECT_statement
nqcmd
ユーティリティの問合せを実行する場合、デリミタとしてコロンを使用します。その他の場合には、セミコロンまたはコロンを使用できます。
例
SET VARIABLE LOGLEVEL = 3; SELECT Products.Brand, Measures.Dollars FROM "Products" SET VARIABLE DISABLE_CACHE_HIT=1, LOGLEVEL = 3, WEBLANGUAGE='en': SELECT Products.Brand, Measures.Dollars FROM "Products"
この項では、集計関数、集計実行関数および時系列関数について説明します。
集計関数は、複数の値に対して操作を実行しサマリー結果を作成します。
次の集計関数があります。
指定するレベルに基づいて列を集計します。AGGREGATE AT
を使用すると、メジャーの集計がWHERE
句に関係なく、常にキーワード AT
の後に指定したレベルで確実に実行されます。
構文
AGGREGATE(expr AT level [, level1, levelN])
説明:
expr
は、1つ以上のメジャー列を参照する任意の式です。
level
は、集計するレベルです。オプションで、複数のレベルを指定できます。
1番目の引数で指定したメジャーのメジャー・レベルとして使用されるレベルを含むディメンションのレベルを指定できません。たとえば、「month」は「yearly_sales」のメジャー・レベルとして使用される同じ時間ディメンションからのものであるため、この関数でAGGREGATE(yearly_sales AT month)
と指定することはできません。
例
次に、AGGREGATE AT
関数と実行結果の例を示します。
SELECT month, year, AGGREGATE(sales AT Year) FROM timeseriestesting WHERE year = 1994 AND month = 12
結果:
Month Year AGGREGATE AT year 12 1994 7396 Row count: 1
AGGREGATE AT
演算子は常に述語の前に実行されるため、キーワード AT
の後に指定された時間レベルの正確な合計を常に返します。
結果セット内で式の平均値を計算します。引数として数値式を指定する必要があります。
AVG
の分母は集計された列数であることに注意してください。このため、通常、Oracle Business Intelligenceの計算でAVG(
x
)
を使用するには誤りです。かわりに、分子と分母の両方(x/y)を制御できるように式を手動で指定してください。
構文
AVG(numExpr)
説明:
numExpr
は、数値に評価される任意の式です。
式のすべての個別の値の平均を計算します。引数として数値式を指定する必要があります。
構文
AVG(DISTINCT numExpr)
説明:
numExpr
は、数値に評価される任意の式です。
式引数の最下位のnの値を1からn番目までランク付けします。1が最下位の数値です。BOTTOMN
関数は、結果セットに返される値を操作します。リクエストには、BOTTOMN
式を1つのみ含めることができます。
構文
BOTTOMN(numExpr, integer)
説明:
numExpr
は、数値に評価される任意の式です。
integer
は任意の正の整数です。結果セットに表示されるランキングの最下位数を表し、1が最低ランクです。
式のNULL以外の値を含む行数を計算します。通常、式は列名です。その場合、その列のNULL以外の値を含む行数が返されます。
構文:
COUNT(expr)
説明:
expr
は任意の式です。
行数をカウントします。
構文
COUNT(*)
例
たとえば、Factsという表に200,000,000行あった場合、サンプル・リクエストでは次のような結果が返されます。
SELECT COUNT(*) FROM Facts
結果:
200000000
数値式引数に一致する行のメジアン(中央)値を計算します。偶数行がある場合、メジアンは2つの中央行の平均です。通常、この関数はdouble値を返します。
構文
MEDIAN(numExpr)
説明:
numExpr
は、数値に評価される任意の式です。
ユーザー指定範囲内での値のランクを決定します。範囲内のランクを示す整数が返されます。つまり、結果のソートされたデータ・セットは、各タイルにほぼ同数の値がある複数のタイルに分割されます。
numTiles
= 100を指定したNTile
は、一般に「パーセンタイル」(1から100までの範囲の数値で、100がこの分割の最高値)と呼ばれる値を返します。この値はOracle BI PERCENTILE
関数の結果とは異なります。この関数は、SQL 92では「パーセント・ランク」というもので、0から1の値を返します。
構文
NTILE(numExpr, numTiles)
説明:
numExpr
は、数値に評価される任意の式です。
numTiles
は、タイルの数を表すNULL以外の正の整数です。
numExpr
引数がNULLではない場合、この関数はリクエストした範囲内のランクを表す整数を返します。
数値式引数に一致する各値のパーセント・ランクを計算します。パーセンタイル・ランクの範囲は、0(1番目のパーセンタイル)から1(100番目のパーセンタイル)です。
パーセンタイルは結果セットの値に基づいて計算されます。
構文
PERCENTILE(numExpr)
説明:
numExpr
は、数値に評価される任意の式です。
数値式引数に一致する各値のランクを計算します。最も高い数にはランク1が割り当てられ、次に続くランクには2、3、4などの連続した整数が割り当てられます。ある値が等しい場合、同じランクが割り当てられます(例: 1、1、1、4、5、5、7...)。
ランクは結果セットの値に基づいて計算されます。
構文
RANK(numExpr)
説明:
numExpr
は、数値に評価される任意の式です。
値のセットの標準偏差が返されます。通常、戻り型はdoubleです。STDEV_SAMP
はSTDDEV
の類義語です。
構文
STDDEV([ALL | DISTINCT] numExpr
)
説明:
numExpr
は、数値に評価される任意の式です。
ALL
が指定されると、セット内のすべてのデータに対して標準偏差が計算されます。
DISTINCT
が指定されると、計算のすべての偏差は無視されます。
何も指定しない(デフォルト)場合、すべてのデータが考慮されます。
母分散と標準偏差の計算式を使用して、値のセットの標準偏差が返されます。
構文
STDDEV_POP([ALL | DISTINCT] numExpr)
説明:
numExpr
は、数値に評価される任意の式です。
ALL
が指定されると、セット内のすべてのデータに対して標準偏差が計算されます。
DISTINCT
が指定されると、計算のすべての偏差は無視されます。
何も指定しない(デフォルト)場合、すべてのデータが考慮されます。
数値式引数に一致するすべての値を個別に加算して得られる合計を計算します。
構文
SUM(DISTINCT numExpr)
説明:
numExpr
は、数値に評価される任意の式です。
集計実行関数は、入力として一連のレコードを取得するという点で集計関数と似ていますが、一連のレコード全体に対して単一の集計を出力するかわりに、そこまでに処理されたレコードに基づく集計を出力します。
この項では、Oracle BIサーバーでサポートされている集計実行関数について説明します。次の関数があります。
現在の行を含めて、結果セットのデータの最後のn行の移動平均を計算します。
最初の行の平均は、最初の行の数値式と同じです。2番目の行の平均は、最初の2つの行のデータ平均を取得することで計算されます。3番目の行の平均は、最初の3つの行のデータ平均を取得することで計算されます。このようにn番目の行に到達するまで同様に実行されます。平均は最後のn行のデータに基づいて計算されます。
構文
MAVG(numExpr, integer)
説明:
numExpr
は、数値に評価される任意の式です。
integer
は任意の正の整数です。最後のn行のデータ平均を表します。
現在の行を含めて、データの最後のn行の移動合計を計算します。
最初の行の合計は、最初の行の数値式と同じです。2番目の行の合計は、最初の2つの行のデータ合計を取得することで計算されます。3番目の行の合計は、最初の3つの行のデータ合計を取得することで計算され、同様に続いて実行されます。n番目の行に到達すると、合計は最後のn行のデータに基づいて計算されます。
構文
MSUM(numExpr, integer)
説明:
numExpr
は、数値に評価される任意の式です。
integer
は任意の正の整数です。最後のn行のデータ平均を表します。
例
この例では、MSUM
関数を使用する問合せと問合せ結果を示します。
select month, revenue, MSUM(revenue, 3) as 3_MO_SUM from sales_subject_area
結果:
MONTH REVENUE 3_MO_SUM JAN 100.00 100.00 FEB 200.00 300.00 MAR 100.00 400.00 APRIL 100.00 400.00 MAY 300.00 500.00 JUNE 400.00 800.00 JULY 500.00 1200.00 AUG 500.00 1400.00 SEPT 500.00 1500.00 OCT 300.00 1300.00 NOV 200.00 1000.00 DEC 100.00 600.00
そこまでに処理されたレコードに基づいて累計を計算します。最初の行の合計は、最初の行の数値式と同じです。2番目の行の合計は、最初の2つの行のデータ合計を取得することで計算されます。3番目の行の合計は、最初の3つの行のデータ合計を取得することで計算され、同様に続いて実行されます。
構文
RSUM(numExpr)
説明:
numExpr
は、数値に評価される任意の式です。
アンサーでは、次の代替構文も使用できます。
RSUM(expression1 [BY expression2[, expression3[, ...]]])
説明:
expression1, expression2, expression3 ...
は、任意の列参照または列参照での算術式です。
BY
句により、RSUM
の計算はBY
列のいずれかの値が前の行と異なる行で再度開始します。
例
この例では、RSUM
関数を使用する問合せと問合せ結果を示します。
SELECT month, revenue, RSUM(revenue) as RUNNING_SUM from sales_subject_area
結果:
MONTH REVENUE RUNNING_SUM JAN 100.00 100.00 FEB 200.00 300.00 MAR 100.00 400.00 APRIL 100.00 500.00 MAY 300.00 800.00 JUNE 400.00 1200.00 JULY 500.00 1700.00 AUG 500.00 2200.00 SEPT 500.00 2700.00 OCT 300.00 3000.00 NOV 200.00 3200.00 DEC 100.00 3300.00
入力として一連のレコードを取得して、そこまでに処理されたレコード数をカウントします。
構文
RCOUNT(expr)
説明:
expr
は任意のデータ型の式です。
アンサーでは、次の代替構文も使用できます。
RCOUNT(expression1 [BY expression2[, expression3[, ...]]])
説明:
expression1, expression2, expression3 ...
は、任意の列参照または列参照での算術式です。
BY
句により、RCOUNT
の計算はBY
列のいずれかの値が前の行と異なる行で再度開始します。
例
この例では、RCOUNT
関数を使用する問合せと問合せ結果を示します。
select month, profit, RCOUNT(profit) from sales_subject_area where profit > 200
結果:
MONTH PROFIT RCOUNT(profit) MAY 300.00 2 JUNE 400.00 3 JULY 500.00 4 AUG 500.00 5 SEPT 500.00 6 OCT 300.00 7
入力として一連のレコードを取得して、そこまでに処理されたレコードに基づいて最大値を表示します。指定するデータ型はソートできるデータ型である必要があります。
構文
RMAX(expr)
説明:
expr
は任意のデータ型の式です。データ型は関連付けられたソート順を持つデータ型である必要があります。
アンサーでは、次の代替構文も使用できます。
RMAX(expression1 [BY expression2[, expression3[, ...]]])
説明:
expression1, expression2, expression3 ...
は、任意の列参照または列参照での算術式です。
BY
句により、RMAX
の計算はBY
列のいずれかの値が前の行と異なる行で再度開始します。
例
この例では、RMAX
関数を使用する問合せと問合せ結果を示します。
SELECT month, profit, RMAX(profit) from sales_subject_area
結果:
MONTH PROFIT RMAX(profit) JAN 100.00 100.00 FEB 200.00 200.00 MAR 100.00 200.00 APRIL 100.00 200.00 MAY 300.00 300.00 JUNE 400.00 400.00 JULY 500.00 500.00 AUG 500.00 500.00 SEPT 500.00 500.00 OCT 300.00 500.00 NOV 200.00 500.00 DEC 100.00 500.00
入力として一連のレコードを取得して、そこまでに処理されたレコードに基づいて最小値を表示します。指定するデータ型はソートできるデータ型である必要があります。
構文
RMIN(expr)
説明:
expr
は任意のデータ型の式です。データ型は関連付けられたソート順を持つデータ型である必要があります。
アンサーでは、次の代替構文も使用できます。
RMIN(expression1 [BY expression2[, expression3[, ...]]])
説明:
expression1, expression2, expression3 ...
は、任意の列参照または列参照での算術式です。
BY
句により、RMIN
の計算はBY
列のいずれかの値が前の行と異なる行で再度開始します。
例
この例では、RMIN
関数を使用する問合せと問合せ結果を示します。
select month, profit, RMIN(profit) from sales_subject_area
結果:
MONTH PROFIT RMIN(profit) JAN 400.00 400.00 FEB 200.00 200.00 MAR 100.00 100.00 APRIL 100.00 100.00 MAY 300.00 100.00 JUNE 400.00 100.00 JULY 500.00 100.00 AUG 500.00 100.00 SEPT 500.00 100.00 OCT 300.00 100.00 NOV 200.00 100.00 DEC 100.00 100.00
時系列関数は、時系列的なディメンションを操作します。時系列関数は、標準のSQLデータ操作関数ではなく、ユーザー指定のカレンダ表に基づいてAGO
関数、TODATE
関数およびPERIODROLLING
関数を計算します。
特定のディメンションに時系列関数を使用するには、時間ディメンションとしてディメンションを指定し、1つ以上のキーを1つ以上のレベルで時系列キーとして設定する必要があります。詳細は、『Oracle Business Intelligence Enterprise Editionメタデータ・リポジトリ・ビルダーズ・ガイド』を参照してください。
次の関数があります。
現在の時刻の粒度(メジャーの粒度および述語で決定される)から指定された期間に遡って集計値を計算する時系列集計関数です。たとえば、AGO
を使用すると、現四半期の各月の売上および対応する1つ前の四半期の売上を生成できます。
時間的推移が発生する粒度は、メジャーの粒度および述語によって決定されます。たとえば、次の問合せでは、時間的推移が四半期レベルで発生し、1年遡ります。
Select year, quarter, Ago(sales, year_level, 1)
ただし、次の問合せでは、時間的推移がday_of_month
属性の関連付けられたレベルで決定される日レベルで発生します。
Select year, quarter, Ago(sales, year_level, 1) Where day_of_month IN (1, 2)
時間的推移を計算する場合、Oracle BIサーバーは時間階層を検討します。たとえば、時間階層が年、月、日の順序である場合、Oracle BIサーバーは次のように時間的推移を計算します。
年は1単位で推移します。
年の月は同じままです。
月の日は同じままです。
関数のレベルの詳細は、AGO関数レベルについてを参照してください。
すべてのAGO
関数で同じレベルの引数を使用する場合、複数のAGO
関数をネストできます。TODAT関数とAGO関数がそれぞれ同じレベルの引数を使用する場合は、1つのTODATE
関数と複数のAGO
関数を正しくネストできます。
構文
AGO(expr, [time_level,] offset)
説明:
expr
は、1つ以上のメジャー列を参照する式です。
time_level
はオプションの引数で、四半期、月、年などの期間のタイプを指定します。
アンサーには、time_level
のプレゼンテーション階層からプレゼンテーション・レベルを指定します。
offset
は、時間的推移を表す整数リテラルです。
例
次の例では、昨年の売上が返されます。
SELECT Year_ID, AGO(sales, year, 1)
AGO
関数のレベルは、[
time_level
]
引数を使用して明示的に指定することをお薦めします。
[
time_level
]
引数を明示的に指定しない場合、デフォルトのレベルは次のように決定されます:
式で使用されるメジャーが(管理ツールで設定したように)時間ディメンションのレベル・ベースのメジャーである場合は、同じレベルがデフォルトのAGO
レベルとみなされます。
それ以外の場合、式で使用されるメジャーの粒度は、論理リクエストに表示されているメジャーのBY
句の判断に従って、デフォルトのAgoレベルになります。
たとえば、次の問合せの結果:
SELECT year, AGO(sales, 1) WHERE quarter=1
これは、次のように解釈されます。
SELECT year, AGO(sales, year_level, 1) WHERE quarter=1
指定の問合せに対するデフォルトのAGO
レベルは、問合せログの論理リクエスト・セクションで確認できます。
x単位の時間から始まり、現在の時刻からy単位の時間で終わる期間のメジャーの合計を計算します。たとえば、PERIODROLLING
を使用して、現在の四半期前の特定の四半期で始まり、現在の四半期後の特定の四半期で終わる期間の売上を計算できます。
時系列関数は、関数のレベル以下の時間ディメンションのメンバーを操作します。そのため、指定されたレベル以下のメンバーを一意に識別する1つ以上の列が、問合せに計画されている必要があります。または、問合せに対して、指定されたレベル以下の単一のメンバーを指定するフィルタを適用できます。関数のレベルの詳細は、「PERIODROLLING関数で使用されるレベルの決定」を参照してください。
PERIODROLLING
関数内に、AGO
関数とTODATE
関数をネストできません。また、PERIODROLLING
、FIRST
、FIRST_PERIOD
、LAST
およびLAST_PERIOD
関数はネストできません。
PERIODROLLING
内に他の集計関数(RANK
、TOPN
、PERCENTILE
、FILTER
、RSUM
など)を含めると、PERIODROLLING
関数は内側にプッシュされます。たとえば、PERIODROLLING(TOPN(
measure
))
は、TOPN(PERIODROLLING(
measure
))
として実行されます。
構文
PERIODROLLING(measure, x ,y [,hierarchy])
説明:
measure
は、メジャー列の名前です。
x
は、現在の時刻からのオフセットを指定する整数です。過去に遡るオフセットを示すには、整数の前にマイナス記号(-)を付けます。
y
は、この関数が計算する時間単位の数を指定します。現在の時刻を指定するには、0を入力します。
hierarchy
は、yr、mon、day
など、時間ウィンドウの計算に使用する時間ディメンション内の階層の名前を指定するオプションの引数です。このオプションは、時間ディメンション内に複数の階層がある場合、または複数の時間ディメンションを区別する場合に便利です。
最大限にロール・バックまたはロール・フォワードする場合は、キーワードUNBOUND
を使用します。たとえば、関数PERIODROLLING (
measure
, -UNBOUND, 0)
では、世の初めから現在に至るまでの期間で合計されます。
PERIODROLLING
関数とAGGREGATE AT
関数を組み合せて、PERIODROLLING
関数のレベルを明示的に指定できます。たとえば、問合せレベルは日ですが、前月と当月の合計を検索する場合は、次のように指定します。
SELECT year, month, day, PERIODROLLING(AGGREGATE(sales AT month), -1)
例
SELECT Month_ID, PERIODROLLING(monthly_sales, -1, 1) SELECT Month_ID, PERIODROLLING(monthly_sales, -UNBOUND, 2) SELECT Month_ID, PERIODROLLING(monthly_sales, -UNBOUND, UNBOUND)
PERIODROLLING
関数に使用される時間単位(オフセット)は関数のレベルと呼ばれます。この値は、最初の引数内のメジャーのメジャー・レベル、および関数が属する問合せの問合せレベルによって決定されます。管理ツールにメジャーのメジャー・レベルを設定できます。関数に使用されるメジャーのメジャー・レベルが設定されている場合、そのメジャー・レベルが関数のレベルとして使用されます。メジャー・レベルは、関数のストレージ単位とも呼ばれます。
管理ツールにメジャー・レベルが設定されていない場合は、問合せレベルが使用されます。問合せレベルは、関数の問合せ単位とも呼ばれます。次の例では、問合せレベルは月ですが、PERIODROLLING
関数では、3月から4月までの各市の先月、当月、次月の合計が計算されます。
SELECT year, month, country, city, PERIODROLLING(sales, -1, 1) WHERE month in ('Mar', 'Apr') AND city = 'New York'
時間ディメンションに複数の階層がある場合は、PERIODROLLING
関数内でhierarchy
引数を指定する必要があります。例:
SELECT year, fiscal_year, month, PERIODROLLING(sales, -1, 1, "fiscal_time_hierarchy")
この例では、PERIODROLLING
関数のレベルはfiscal_year
です。
指定された期間の最初から現在の表示時刻までのメジャーを集計する時系列集計関数です。たとえば、この関数を使用すると、過去1年間の売上を計算できます。
時系列関数は、関数で指定されたレベル以下の時間ディメンションのメンバーに対して機能します。そのため、指定されたレベル以下のメンバーを一意に識別する1つ以上の列が、問合せに計画されている必要があります。または、問合せに対して、指定されたレベル以下の単一のメンバーを指定するフィルタを適用できます。
別のTODATE
関数内に、TODATE
関数をネストできません。TODAT関数とAGO関数がそれぞれ同じレベルの引数を使用する場合は、1つのTODATE
関数と複数のAGO
関数を正しくネストできます。
TODATE
は、一部のデータベースでサポートされているTO_DATE
SQL関数とは異なります。TO_DATE
を使用して、DATE
データ型に変更しないでください。かわりに、CAST
関数を使用します。詳細は、「CAST」を参照してください。
構文
TODATE(expr, time_level)
説明:
expr
は、1つ以上のメジャー列を参照する式です。
time_level
は、四半期、月、年などの期間のタイプです。
例
次の例は、年初から今月までの売上を返します。
SELECT Year_ID, Month_ID, TODATE(sales, year)
文字列関数は様々な文字操作を行い、文字列に対して動作します。次の関数があります。
単一文字列を、0から255の対応するASCIIコードに変換します。文字式が複数の文字に評価される場合は、式の最初の文字に対応するASCIIコードが返されます。
構文
ASCII(strExpr)
説明:
strExpr
は、文字列に評価される任意の式です。
指定された文字列の長さをビット単位で返します。各Unicode文字の長さは2バイトです(16ビットに相当)。
構文
BIT_LENGTH(strExpr)
説明:
strExpr
は、文字列に評価される任意の式です。
指定された文字列の長さを文字数で返します。先頭と末尾の空白は、文字列の長さとして計算されません。
構文
CHAR_LENGTH(strExpr)
説明:
strExpr
は、文字列に評価される任意の式です。
この関数には2つの形式があります。最初の形式は、2つの文字列を連結します。2番目の形式は、文字列の連結文字を使用して、3つ以上の文字列を連結します。
形式1(2つの文字列を連結する場合)の構文
CONCAT(strExpr1, strExpr2)
説明:
strExprs
は、カンマで区切られた文字列に評価される任意の式です。
例
この例では、リクエストに対して返される結果が示されています。
SELECT DISTINCT CONCAT('abc', 'def') FROM employee CONCAT('abc', 'def')
結果:
abcdef
形式2(3つ以上の文字列を連結する場合)の構文
CONCAT(strExpr1, strExpr2 || strExpr3)
説明:
strExprs
は文字列に評価される式で、カンマおよび文字列連結演算子||(2本の縦棒)で区切って指定します。最初に、strExpr2
とstrExpr3
が連結されて中間の文字列が生成されます。次に、CONCAT
文字列によってstrExpr1
とこの中間の文字列が連結されて最終の文字列が生成されます。
例
この例では、リクエストに対して返される結果が示されています。
SELECT DISTINCT CONCAT('abc','def' || 'ghi') FROM employee
結果:
abcdefghi
指定された文字列を、別の文字列の指定された場所に挿入します。
構文
INSERT(strExpr1, integer1, integer2, strExpr2)
説明:
strExpr1
は、文字列に評価される任意の式です。ターゲットの文字列を示します。
integer1
は、2番目の文字列が挿入される、ターゲットの文字列の先頭からの文字数を表す任意の正の整数です。
integer2
は、2番目の文字列によって置換される、ターゲットの文字数を表す任意の正の整数です。
strExpr2
は、文字列に評価される任意の式です。ターゲットの文字列に挿入される文字列を示します。
例
最初の文字列の2番目の位置(数値2
に該当)から開始し、3つの文字(数値2
、3
および4
)が文字列abcd
に置換されます。
SELECT INSERT('123456', 2, 3, 'abcd') FROM table
結果:
1abcd56 1abcd56 ...
文字列の左側から、指定された文字数を返します。
構文
LEFT(strExpr, integer)
説明:
strExpr
は、文字列に評価される任意の式です。
integer
は、文字列の左側から返す文字数を表す任意の正の整数です。
例
この例では、文字列123456の左端から3文字が返されます。
SELECT LEFT('123456', 3) FROM table
結果:
123 123 ...
別の文字列での文字列の数値位置を返します。文字列が検索される文字列で見つからない場合、関数は値0を返します。
検索の開始位置を指定する場合は、整数の引数を含めます。返される数値位置は、整数の引数の値に関係なく、文字列内の最初の文字位置を1として数えることで決定されます。
構文
LOCATE(strExpr1, strExpr2 [, integer])
説明:
strExpr1
は、文字列に評価される任意の式です。検索する文字列を示します。
strExpr2
は、文字列に評価される任意の式です。検索される文字列を示します。
integer
は、文字列の検索を開始する位置を表す任意の正(ゼロ以外)の整数です。整数の引数はオプションです。
例
この例では、文字列abcdefで文字dの数値位置として4が返されます。
LOCATE('d', 'abcdef')
この例では、検索される文字列内で文字gが見つからないため、0が返されます。
LOCATE('g', 'abcdef')
この例では、文字列abcdefで文字dの数値位置として4が返されます。検索は、文字列の3番目の文字であるcから開始されます。返される数値位置は、文字aの位置を1として数えることで決定されます。
LOCATE('d' 'abcdef', 3)
この例では、文字列内で、文字bが検索の開始位置の前にあるため、0が返されます。
LOCATE('b' 'abcdef', 3)
指定された文字列のビット数を、基数8の単位(バイト数)で返します。
構文
OCTET_LENGTH(strExpr)
説明:
strExpr
は、文字列に評価される任意の式です。
文字式でのstrExpr1
の数値位置を返します。strExpr1
が見つからない場合、関数は0を返します。関連情報は、「LOCATE」も参照してください。
構文
POSITION(strExpr1 IN strExpr2)
説明:
strExpr1
は、文字列に評価される任意の式です。ターゲット文字列で検索する文字列を示します。
strExpr2
は、文字列に評価される任意の式です。検索されるターゲット文字列を示します。
例
この例では、文字列abcdefで文字dの位置として4が返されます。
POSITION('d', 'abcdef')
この例では、文字列123456で数値9が見つからないため、数値9の位置として0が返されます。
POSITION('9', '123456')
指定された式をn回繰り返します。
構文
REPEAT(strExpr, integer)
説明:
strExpr
は、文字列に評価される任意の式です。
integer
は、文字列を繰り返す回数を表す任意の正の整数です。
例
この例では、abcを4回繰り返します。
REPEAT('abc', 4)
指定された文字式の1つ以上の文字を、別の1つ以上の文字で置換します。
構文
REPLACE(strExpr1, strExpr2, strExpr3)
説明:
strExpr1
は、文字列に評価される任意の式です。これは、文字が置換される文字列です。
strExpr2
は、文字列に評価される任意の式です。この2番目の文字列は、1番目の文字列で置換される文字を示します。
strExpr3
は、文字列に評価される任意の式です。この3番目の文字列は、1番目の文字列内に代入する文字を指定します。
例
文字列abcd1234の文字123が文字列zzで置換されます。
Replace('abcd1234', '123', 'zz')
結果:
abcdzz4
文字列の右側から、指定された文字数を返します。
構文
RIGHT(strExpr, integer)
説明:
strExpr
は、文字列に評価される任意の式です。
integer
は、文字列の右側から返す文字数を表す任意の正の整数です。
例
この例では、文字列123456の右端から3文字が返されます。
SELECT right('123456', 3) FROM table
結果:
456
元の文字列内に、固定された文字数から始まる新しい文字列を作成します。
構文
SUBSTRING(strExpr FROM starting_position)
説明:
strExpr
は、文字列に評価される任意の式です。
starting_position
は、処理の開始位置を示す文字列の左端の開始からの文字数を表す任意の正の整数です。
指定された文字を文字列の冒頭と末尾から削除します。
構文
TRIM(BOTH character FROM strExpr)
説明:
character
は任意の単一文字です。文字の指定(および必須の一重引用符)を省略すると、空白文字がデフォルトで使用されます。
strExpr
は、文字列に評価される任意の式です。
指定された文字を文字列の冒頭から削除します。
構文
TRIM(LEADING character FROM strExpr)
説明:
character
は任意の単一文字です。文字の指定(および必須の一重引用符)を省略すると、空白文字がデフォルトで使用されます。
strExpr
は、文字列に評価される任意の式です。
指定された文字を文字列の末尾から削除します。
構文
TRIM(TRAILING character FROM strExpr)
説明:
character
は任意の単一文字です。文字の指定(および必須の一重引用符)を省略すると、空白文字がデフォルトで使用されます。
strExpr
は、文字列に評価される任意の式です。
算術関数は、数学的な操作を実行します。次の関数があります。
y/xの逆正接を計算します。ここでyは最初の数式、xは2番目の数式です。
構文
ATAN2(numExpr1, numExpr2)
説明:
numExpr
は、数値に評価される任意の式です。
整数でない数式を、次に高い整数に丸めます。数式が整数に評価される場合、CEILING
関数はその整数を返します。
構文
CEILING(numExpr)
説明:
numExpr
は、数値に評価される任意の式です。
整数内の特定の位置にあるビットを取得します。そのビットに対応する0か1の整数が返されます。この機能は、主にHyperion Financial Managementのキューブ・ソースで「セル・ステータス」を抽出する際に使用されます。EXTRACTBIT
関数をいかなるデータベースにもプッシュすることはできません。この関数は常に、内部的に(Oracle BI Serverで)実行されます。
構文
Int ExtractBit(Arg1, Arg2)
説明:
Arg1は、INT
型、SMALLINT
型、UNIT
型、SMALLUNIT
型、TINYINT
型、またはTINYUNIT
型の式です。Arg1がdouble型である場合、最初に列をINT
にキャストする必要があります。
Arg2はINT型の式です。値は1からlength_of_Arg1の範囲である必要があります。1を指定すると最下位ビットを取得します。Arg2が整数の長さを超える場合は、0が返されます。Arg2が1より小さいときは、エラー・メッセージがトリガーされます。
整数でない数式を、次に低い整数値に丸めます。数式が整数に評価される場合、FLOOR
関数はその整数を返します。
構文
FLOOR(numExpr)
説明:
numExpr
は、数値に評価される任意の式です。
最初の数式を2番目の数式で除算し、商の剰余を返します。
構文
MOD(numExpr1, numExpr2)
説明:
numExpr
は、数値に評価される任意の式です。
例
この例では、リクエストに対して値0が返されます。
MOD(9, 3)
この例では、リクエストに対して値1が返されます。
MOD(10, 3)
シード値に基づいた擬似乱数を返します。特定のシード値に対して、乱数の同一のセットが生成されます。
構文
RAND(numExpr)
説明:
numExpr
は、数値に評価される任意の式です。
数式をn桁の精度まで丸めます。
構文
ROUND(numExpr, integer)
説明:
numExpr
は、数値に評価される任意の式です。
integer
は、丸める精度の桁数を表す任意の正の整数です。
例
この例では、結果として2.17が返されます。
ROUND(2.166000, 2)
この関数では、次のように値が返されます。
引数に指定した数式が正数に評価される場合は値1を返します。
引数に指定した数式が負数に評価される場合は値-1を返します。
0(ゼロ)に評価される場合は値0を返します。
構文
SIGN(numExpr)
説明:
numExpr
は、数値に評価される任意の式です。
引数に指定した数式の平方根を計算します。数式は、負数でない数値に評価される必要があります。
構文
SQRT(numExpr)
説明:
numExpr
は、負数でない数値に評価される任意の式です。
カレンダ日付/時刻関数は、暦年に基づいてデータ型DATE
およびDATETIME
のデータを操作します。これらの関数を他の列とともに選択する必要があります。関数のみを選択することはできません。
デフォルトでは、月および日の名前は大文字小文字混合で返されます。月や日の名前が大文字で返されることを想定している既存の式がある場合は、式を調整するか、NQSConfig.INIのパラメータUSE_UPPERCASE_MONTH_NAMES
およびUSE_UPPERCASE_DAY_NAMES
をYES
に設定する必要があります。詳細は、『Oracle Business Intelligence Enterprise Editionシステム管理者ガイド』のNQSConfig.INIファイルの構成設定に関する項を参照してください。
MONTHNAMEなどの関数は日付列を書式設定するのに使用できますが、ロケールはデータ・ソースまたはOracle BIサーバーのNQSConfig.INIファイルで固定されています。論理SQL日付書式設定関数はODBC標準に基づいており、ロケール引数は用意されていないため、これらの関数にロケールを指定することはできません。
ユーザーが選択したロケールに基づいて日付列を書式設定するには、ロケールを固定するときに、コンテンツ設計者が標準の日付書式またはカスタムの日付書式を分析の日付列に指定することをお薦めします。詳細は、『Oracle Business Intelligence Enterprise Editionユーザーズ・ガイド』の日付および時間フィールドのカスタム書式設定文字列に関する項および「列のプロパティ」: 「データ書式」タブに関する項を参照してください。
次の関数があります。
現在の時刻を返します。時刻はOracle BIサーバーを実行しているシステムによって決定されます。
構文
CURRENT_TIME(integer)
説明:
integer
は、小数秒を表示する精度の桁数を表す任意の整数です。この引数の指定はオプションです。引数を指定しない場合は、デフォルトの精度で時刻が返されます。
現在の日付/タイムスタンプを返します。タイムスタンプはOracle BIサーバーを実行しているシステムによって決定されます。
構文
CURRENT_TIMESTAMP(integer)
説明:
integer
は、小数秒を表示する精度の桁数を表す任意の整数です。この引数の指定はオプションです。引数を指定しない場合は、デフォルトの精度で時刻が返されます。
指定された日付について、四半期の通算日に対応する数字(1から92)を返します。
構文
DAY_OF_QUARTER(dateExpr)
説明:
dateExpr
は、日付に評価される任意の式です。
指定された日付について、曜日(日曜日から土曜日)に対応する1から7の数字を返します。たとえば、数字1は日曜日に対応し、数字7は土曜日に対応します。
構文
DAYOFWEEK(dateExpr)
説明:
dateExpr
は、日付に評価される任意の式です。
指定された日付について、年の通算日に対応する数字(1から366)を返します。
構文
DAYOFYEAR(dateExpr)
説明:
dateExpr
は、日付に評価される任意の式です。
指定された時刻について、時間に対応する数字(0から23)を返します。たとえば、0は午前12時に対応し、23は午後11時に対応します。
構文
HOUR(timeExpr)
説明:
timeExpr
は、時刻に評価される任意の式です。
指定された日付について、四半期の通算月に対応する数字(1から3)を返します。
構文
MONTH_OF_QUARTER(dateExpr)
説明:
dateExpr
は、日付に評価される任意の式です。
指定された日付について、年の四半期に対応する数字(1から4)を返します。
構文
QUARTER_OF_YEAR(dateExpr)
説明:
dateExpr
は、日付に評価される任意の式です。
指定されたタイムスタンプに、指定された間隔の数を加算します。単一のタイムスタンプを返します。
この関数の最も簡単なシナリオでは、指定された整数値が、間隔に基づいて適切なタイムスタンプ・コンポーネントに加算されます。1週は7日として加算され、1四半期は3か月として加算されます。負の整数値を追加すると減算されます(時間を遡ります)。
特定のコンポーネントでオーバーフローが発生する場合(60秒、24時間、12か月を超える場合など)は、次のコンポーネントに適切に値を加算する必要があります。たとえば、タイムスタンプの日のコンポーネントを加算する場合、この関数ではオーバーフローを考慮して、特定月の日数(2月が29日ある、うるう年など)が計算時に確認されます。
タイムスタンプの月のコンポーネントを加算する場合は、結果として生じるタイムスタンプについて、日のコンポーネントの日数が適切であるかどうか検証されます。たとえば、2000-05-31に1か月を加算しても2000-06-31にはなりません。これは、6月には31日がないためです。この例では、日のコンポーネントが月の最後の日に減算され、2000-06-30となります。
同様の問題は、月のコンポーネントが2月、日のコンポーネントが29であるタイムスタンプ(つまり、うるう年の2月の最終日)において、タイムスタンプの年のコンポーネントを加算する場合にも発生します。結果として生じるタイムスタンプがうるう年に該当しない場合は、日のコンポーネントが28に減算されます。
この処理は、Microsoft社のSQL ServerおよびOracle DatabaseのネイティブOCIインタフェースに準拠します。
構文
TIMESTAMPADD(interval, intExpr, timestamp)
説明:
interval
は指定された間隔です。有効な値は次のとおりです。
SQL_TSI_SECOND
SQL_TSI_MINUTE
SQL_TSI_HOUR
SQL_TSI_DAY
SQL_TSI_WEEK
SQL_TSI_MONTH
SQL_TSI_QUARTER
SQL_TSI_YEAR
intExpr
は、整数値に評価される任意の式です。
timestamp
は任意の有効なタイムスタンプです。この値は計算のベースに使用されます。
NULLの整数式またはNULLのタイムスタンプがこの関数に渡されると、NULL値が返されます。
例
次の問合せは、2000-02-27 14:30:00に3日を追加したタイムスタンプを求めています。2000年はうるう年であるため、2000-03-01 14:30:00が単一のタイムスタンプとして返されます。
SELECT TIMESTAMPADD(SQL_TSI_DAY, 3, TIMESTAMP'2000-02-27 14:30:00') FROM Employee WHERE employeeid = 2;
次の問合せは、1999-07-31 0:0:0に7か月を追加したタイムスタンプを求めています。2000-02-29 00:00:00が単一のタイムスタンプとして返されます。2月は短い月であるため、日のコンポーネントが29に減算されていることに注意してください。
SELECT TIMESTAMPADD(SQL_TSI_MONTH, 7, TIMESTAMP'1999-07-31 00:00:00') FROM Employee WHERE employeeid = 2;
次の問合せは、2000-07-31 23:35:00に25分を追加したタイムスタンプを求めています。2000-08-01 00:00:00が単一のタイムスタンプとして返されます。月のコンポーネントにオーバーフローが伝播されていることに注意してください。
SELECT TIMESTAMPADD(SQL_TSI_MINUTE, 25, TIMESTAMP'2000-07-31 23:35:00') FROM Employee WHERE employeeid = 2;
2つのタイムスタンプ間の指定された間隔の合計を返します。
この関数では、最初に、指定された間隔パラメータに対応するタイムスタンプ・コンポーネントが判別されます。次に、両方のタイムスタンプで次に高い順位のコンポーネントが確認され、各タイムスタンプについて間隔の合計数が計算されます。たとえば、指定された間隔が月のコンポーネントに対応する場合は、月のコンポーネントに年のコンポーネントを12回加算することで各タイムスタンプの月の合計数を計算します。次に、最初のタイムスタンプの間隔の合計数を、2番目のタイムスタンプの間隔の合計数から減算します。
注意: この項では、関数がOracle BIサーバーで計算される際のTIMESTAMPDIFF の動作について説明しています。この関数がデータ・ソースで計算される場合は、この項で説明する動作と異なる場合があります。TIMESTAMPDIFF 関数の結果が望ましい結果でない場合は、管理ツールを使用して、データベース・オブジェクトの「機能」タブでTIMESTAMP_DIFF_SUPPORTED を無効にし、関数が確実にOracle BIサーバーで計算されるようにします。ただし、この変更によってパフォーマンスが低下する可能性があります。 |
TIMESTAMPDIFF
関数では、間隔の小数部が間隔の境界を越える場合は、次の整数に丸められます。たとえば、1999-12-31と2000-01-01の間の年の差は、年の小数部が翌年にまたがるため(1999年から2000年)、1年となります。対照的に、1999-01-01と1999-12-31の間の年の差は、年の小数部が同じ年内に存在するため(1999年)、0年となります。Microsoft SQL Serverでも同様の丸めが発生します。IBM DB2では常に切り捨てられます。
週の差を計算する場合は、差を日数で計算してから、丸める前に7で除算します。また、この関数では、NQSConfig.INIファイルでFIRST_DAY_OF_THE_WEEK
パラメータを使用して構成される方法も考慮されます。たとえば、週の開始を日曜日とすると、2000-07-06(木曜日)と2000-07-10(次の月曜日)の週の差は1週間となります。しかし、週の開始を火曜日とすると、間隔の小数部が同じ週内に収まるため、週の差は0週間となります。四半期の差を計算する場合は、差を月数で計算してから、丸める前に3で除算します。
Oracle BIサーバーにより、Microsoft SQL Server、Oracle Database、IBM DB2およびODBCデータベースでは、TIMESTAMPADD
関数とTIMESTAMPDIFF
関数がデフォルトで有効になっています。
構文
TIMESTAMPDIFF(interval, timestamp1, timestamp2)
説明:
interval
は指定された間隔です。有効な値は次のとおりです。
SQL_TSI_SECOND
SQL_TSI_MINUTE
SQL_TSI_HOUR
SQL_TSI_DAY
SQL_TSI_WEEK
SQL_TSI_MONTH
SQL_TSI_QUARTER
SQL_TSI_YEAR
timestamp1
およびtimestamp2
は任意の有効なタイムスタンプです。
NULLのタイムスタンプのパラメータがこの関数に渡されると、NULL値が返されます。
例
次の問合せは、タイムスタンプ1998-07-31 23:35:00と2000-04-01 14:24:00の日の差を求めています。値610が返されます。2000年がうるう年であるため、日が1日追加されていることに注意してください。
SELECT TIMESTAMPDIFF (SQL_TSI_DAY, TIMESTAMP'1998-07-31 23:35:00',TIMESTAMP'2000-04-01 14:24:00') FROM Employee WHERE employeeid = 2;
指定された日付について、四半期の通算週に対応する数字(1から13)を返します。
構文
WEEK_OF_QUARTER(dateExpr)
説明:
dateExpr
は、日付に評価される任意の式です。
指定された日付について、年の通算週に対応する数字(1から53)を返します。
構文
WEEK_OF_YEAR(dateExpr)
説明:
dateExpr
は、日付に評価される任意の式です。
変換関数は、ある形式から別の形式に値を変換します。また、フィルタでVALUEOF
関数を使用して、Oracle BIシステム変数の値を参照することもできます。次の関数があります。
式またはNULLリテラルのデータ型を別のデータ型に変更します。たとえば、customer_name(CharまたはVarcharのデータ型)またはbirthdate(日時リテラル)をキャストできます。次に、値の変更が可能なサポートされているデータ型を示します。
CHARACTER, VARCHAR, INTEGER, FLOAT, SMALLINT, DOUBLE PRECISION, DATE, TIME, TIMESTAMP, BIT, BIT VARYING
変更元のデータ型によっては、変更後のデータ型でサポートされないものがあります。たとえば、変更元のデータ型がBIT
文字列である場合、変更後のデータ型は文字列または別のBIT
文字列である必要があります。
DATE
データ型に変更する場合は、CAST
を使用します。
次に、CHAR
データ型およびVARCHAR
データ型の固有の特性を説明します。
CHARデータ型へのキャスト。サイズ・パラメータを使用する必要があります。サイズ・パラメータを指定しない場合は、デフォルトの30が追加されます。次に、構文オプションについて示します。
次の構文をお薦めします。
CAST(expr|NULL AS CHAR(n))
例:
CAST(companyname AS CHAR(35))
次の構文も使用できます。
CAST(expr|NULL AS data_type)
例:
CAST(companyname AS CHAR)
注意: この構文を使用する場合、Oracle BIサーバーではCAST( expr |NULL AS CHAR(30)) として明示的に変換され、格納されます。 |
VARCHARデータ型へのキャスト。サイズ・パラメータを使用する必要があります。サイズ・パラメータを省略すると、変更を保存できません。
例
CAST(hiredate AS CHAR(40)) FROM employee SELECT CAST(hiredate AS VARCHAR(40)), CAST(age AS double precision), CAST(hiredate AS timestamp), CAST(age AS integer) FROM employee CAST("db"."."table"."col" AS date)
ある式がNULL値と評価されるかどうかをテストし、評価された場合は、指定された値をその式に割り当てます。
構文
IFNULL(expr, value)
説明:
expr
は、評価される式です。
value
は、式がNULL値と評価された場合に割り当てられる値です。
日時書式の文字列リテラルをDateTimeデータ型に変換します。
構文
TO_DATETIME('string1', 'DateTime_formatting_string')
説明:
string1
は変換する文字列リテラルです。
DateTime_formatting_string
は使用する日時書式です(yyyy.mm.dd hh:mi:ssなど)。この引数では、yyyyは年、mmは月、ddは日、hhは時間、miは分、ssは秒を表しています。
例
SELECT TO_DATETIME('2009-03-03 01:01:00', 'yyyy-mm-dd hh:mi:ss') FROM snowflakesales SELECT TO_DATETIME('2009.03.03 01:01:00', 'yyyy.mm.dd hh:mi:ss') FROM snowflakesales
VALUEOF
関数を使用すると、リポジトリ変数の値を参照できます。リポジトリ変数は管理ツールを使用して定義されます。管理ツールの式ビルダーでVALUEOF
関数を使用できます。アンサーで「分析」エディタの「詳細設定」タブから分析用のSQL文を編集する場合にも、この関数を使用できます。
構文
VALUEOF
変数の引数には変数を使用する必要があります。静的リポジトリ変数は名前で参照します。変数名では大文字と小文字が区別されることに注意してください。たとえば、prime_begin
およびprime_end
という静的リポジトリ変数の値を使用するには、次のように指定します。
CASE WHEN "Hour" >= VALUEOF("prime_begin")AND "Hour" < VALUEOF("prime_end") THEN 'Prime Time' WHEN ... ELSE...END
動的リポジトリ変数は完全修飾名で参照する必要があります。動的リポジトリ変数を使用する場合は、初期化ブロック名とポジトリ変数名を二重引用符(")で囲み、ピリオドで区切って、カッコ内に含める必要があります。たとえば、Region Securityという初期化ブロックに含まれているREGION
という動的リポジトリ変数の値を使用するには、次のような構文を使用します。
SalesSubjectArea.Customer.Region = VALUEOF("Region Security"."REGION")
セッション変数名は、前にNQ_SESSION
を付けて、ピリオドで区切り、カッコで囲む(NQ_SESSION
部分を含む)必要があります。たとえば、REGION
というセッション変数の値を使用するには、式ビルダーまたはフィルタで次のような構文を使用します。
"SalesSubjectArea"."Customer"."Region" = VALUEOF(NQ_SESSION.REGION)
変数名の中または先頭にASCII英数字([A-Z] [a-z] [0-9])やアンダースコア(_)以外の文字が含まれる場合、名前を二重引用符(")で囲みます。たとえば空白や一重引用符、二重引用符などがこれに該当します。次の例では一重引用符と空白が含まれています。
"SalesSubjectArea"."Customer"."Region" = VALUEOF("NQ_SESSION"."Steven's Regions")
指定した変数名に二重引用符(")が含まれている場合、二重引用符のセットでエスケープします。例:
"SalesSubjectArea"."Customer"."Region" = VALUEOF("NQ_SESSION"."""Top Sales"" Region")
ユーザーおよび管理者は、Oracle BIアンサーからデータベース関数を直接呼び出すか、メタデータ・リポジトリ内の(論理表ソースの)論理列を使用することで、リクエストを作成できます。これらの関数の主な使用方法としては、高度な計算を取得するための式の受渡し機能、基礎となるデータベース上のカスタム書込み関数へのアクセス機能などがあります。
次の関数があります。
パラメータとして(オプションの)参照列を使用する、指定されたデータベース関数をバックエンド・データ・ソースに渡して評価します。この関数は、スカラー計算を対象としています。Oracle BIサーバーでサポートされていないが基礎となるデータ・ソースで認識される、専用のデータベース関数を使用する場合に便利です。
この埋込みデータベース関数には、1つ以上の列が必要になる場合があります。これらの列は、関数内で%1 ... %Nによって参照されます。実際の列は、関数の後にリストする必要があります。
デフォルトで、EVALUATE
は無効になっており使用できません。この関数のサポートを有効にするには、NQSConfig.INIでEVALUATE_SUPPORT_LEVELパラメータを変更します。詳細は、『Oracle Business Intelligence Enterprise Editionシステム管理者ガイド』を参照してください。
構文
EVALUATE('db_function(%1...%N)' [AS data_type] [, column1, columnN])
説明:
db_function
は、基礎となるデータ・ソースで認識される任意の有効なデータベース関数です。
data_type
は、戻り結果のデータ型を指定するオプション・パラメータです。戻りデータ型を入力引数から確実に予測できない場合は常に使用してください。ただし、型のキャストにこのパラメータを使用しないでください。関数が特定のデータ型を返す必要がある場合は、明示的にキャストを指定します。データベース固有の関数はOracle BIサーバーでサポートされていない戻り型を使用しますが、Oracle BIサーバーに返される必要がない中間の結果を生成するために使用されている場合、通常、このパラメータを省略できます。
column1
からcolumnN
は、列をカンマで区切ったオプションのリストです。
例
この例では、埋込みデータベース関数を示します。
SELECT EVALUATE('instr(%1, %2)', address, 'Foster City') FROM employees
固有のEssbase関数を活用するEVALUATE_AGGREGATEとEVALUATEの使用例
次の例では、EVALUATE_AGGREGATE
関数とEVALUATE
関数を使用します。式が、物理キューブを参照する論理表ソースの列に適用されていることに注意してください。EVALUATE_AGGREGATE
を使用してカスタム集計を実行します。たとえば、地域収益全体と地域で上位3製品の収益を比較するとします。上位3製品の収益を表す新規メジャーを定義して論理SQL文を作成できます。
SELECT Region, Profit, EVALUATE_AGGREGATE('SUM(TopCount(%1.members, 3, %2), %3)', Products, Profit, Profit) Top_3_prod_Profit FROM SampleBasic
Oracle BIサーバーで次の式が生成され、カスタム集計が行われます。
member [Measures].[MS1] AS 'SUM(Topcount([Product].Generations(6).members,3,[Measures].[Profit]),[Measures].[Profit])'
計画されたディメンションでEVALUATE
関数を使用して、集計後に計算されるスカラー計算を実行します。問合せに含まれないディメンション(または属性)への参照が明示的に定義されている場合、EVALUATE
により問合せの単位を変更できます。
たとえば、ある地域で販売された売上別ランキングで上位5製品の収益を参照する場合、適用可能なメジャーを作成した後に、作成される論理SQL文は次のとおりです。
SELECT Region, EVALUATE('TopCount(%1.members, 5, %2)' as VARCHAR(20), Products, Sales), Profits FROM SampleBasic
Oracle BIサーバーで次の式が生成され、上位5製品を取得します。
set [Evaluate0] as '{Topcount([Product].Generations(6).members,5,[Measures].[Sales]) }'
パラメータとして(オプションで)参照列を使用する、指定されたデータベース分析関数をバックエンド・データ・ソースに渡して評価します。
この埋込みデータベース関数には、1つ以上の列が必要になる場合があります。これらの列は、関数内で%1 ... %Nによって参照されます。実際の列は、関数の後にリストする必要があります。
デフォルトで、EVALUATE_ANALYTIC
は無効になっており使用できません。この関数のサポートを有効にするには、NQSConfig.INIでEVALUATE_SUPPORT_LEVELパラメータを変更します。詳細は、『Oracle Business Intelligence Enterprise Editionシステム管理者ガイド』を参照してください。
構文
EVALUATE_ANALYTIC('db_function(%1...%N)' [AS data_type] [, column1, columnN])
説明:
db_function
は、基礎となるデータ・ソースで認識される任意の有効なデータベース分析関数です。
data_type
は、戻り結果のデータ型を指定するオプション・パラメータです。戻りデータ型を入力引数から確実に予測できない場合は常に使用してください。ただし、型のキャストにこのパラメータを使用しないでください。関数が特定のデータ型を返す必要がある場合は、明示的にキャストを指定します。データベース固有の分析関数はOracle BIサーバーでサポートされていない戻り型を使用しますが、Oracle BIサーバーに返される必要がない中間の結果を生成するために使用されている場合、通常、このパラメータを省略できます。
column1
からcolumnN
は、列をカンマで区切ったオプションのリストです。
例
この例では、埋込みデータベース分析関数を示します。
EVALUATE_ANALYTIC('dense_rank() over(order by %1 )' AS INT,sales.revenue)
前述の例でdouble値を返す必要がある場合は、次のようにキャストを明示的に指定する必要があります。
CAST(EVALUATE_ANALYTIC('Rank(%1.dimension.currentmember, %2.members)', "Foodmart93"."Time"."Month" as Double)
パラメータとして(オプションの)参照列を使用する、指定されたデータベース関数をバックエンド・データ・ソースに渡して評価します。この関数は、GROUP BY
句を使用する集計関数を対象としています。
この埋込みデータベース関数には、1つ以上の列が必要になる場合があります。これらの列は、関数内で%1 ... %Nによって参照されます。実際の列は、関数の後にリストする必要があります。
デフォルトで、EVALUATE_AGGR
は無効になっており使用できません。この関数のサポートを有効にするには、NQSConfig.INIでEVALUATE_SUPPORT_LEVELパラメータを変更します。詳細は、『Oracle Business Intelligence Enterprise Editionシステム管理者ガイド』を参照してください。
構文
EVALUATE_AGGR('db_agg_function(%1...%N)' [AS data_type] [, column1, columnN)
説明:
db_agg_function
は、基礎となるデータ・ソースで認識される任意の有効な集計データベース関数です。
data_type
は、戻り結果のデータ型を指定するオプション・パラメータです。戻りデータ型を入力引数から確実に予測できない場合は常に使用してください。ただし、型のキャストにこのパラメータを使用しないでください。関数が特定のデータ型を返す必要がある場合は、明示的にキャストを指定します。データベース固有の関数はOracle BIサーバーでサポートされていない戻り型を使用しますが、Oracle BIサーバーに返される必要がない中間の結果を生成するために使用されている場合、通常、このパラメータを省略できます。
column1
からcolumnN
は、列をカンマで区切ったオプションのリストです。
例
EVALUATE_AGGR('REGR_SLOPE(%1, %2)', sales.quantity, market.marketkey)
パラメータとして(オプションの)参照列を使用する、指定されたデータベース関数をバックエンド・データ・ソースに渡して評価します。この関数は、Booleanの戻り型を使用する関数を対象としています。
この埋込みデータベース関数には、1つ以上の列が必要になる場合があります。これらの列は、関数内で%1 ... %Nによって参照されます。実際の列は、関数の後にリストする必要があります。
EVALUATE_PREDICATE
は、Essbaseデータ・ソースとの併用はサポートしていません。
デフォルトで、EVALUATE_PREDICATE
は無効になっており使用できません。この関数のサポートを有効にするには、NQSConfig.INIでEVALUATE_SUPPORT_LEVELパラメータを変更します。詳細は、『Oracle Business Intelligence Enterprise Editionシステム管理者ガイド』を参照してください。
構文
EVALUATE_PREDICATE('db_function(%1...%N)', [, column1, columnN)
説明:
db_function
は、基礎となるデータ・ソースで認識される、Booleanの戻り型を使用する任意の有効なデータベース関数です。
column1
からcolumnN
は、列をカンマで区切ったオプションのリストです。
比較目的でデータベース関数をモデル化する場合は、EVALUATE_PREDICATE
を使用しないでください。かわりに、EVALUATE
を使用して、関数外で比較を行います。たとえば、次のようにEVALUATE_PREDICATE
を使用しないでください。
EVALUATE_PREDICATE('dense_rank() over (order by 1% ) < 5', sales.revenue)
かわりに、次のようにEVALUATE
を使用します。
EVALUATE('dense_rank() over (order by 1% ) ', sales.revenue) < 5
例
SELECT year, Sales AS DOUBLE,CAST(EVALUATE('OLAP_EXPRESSION(%1,''LAG(units_cube_ sales, 1, time, time LEVELREL time_levelrel)'')', OLAP_CALC) AS DOUBLE) FROM "Global".Time, "Global"."Facts - sales" WHERE EVALUATE_PREDICATE('OLAP_ CONDITION(%1, ''LIMIT time KEEP ''''1'''', ''''2'''', ''''3'''', ''''4'''' '') =1', OLAP_CALC) ORDER BY year;
Oracle BIサーバーは、Visual Analyzerユーザーがビン化およびトレンド線などのモデルを使用してデータを検索できる論理SQL関数をサポートしています。
この項で説明されている論理SQL関数は、プレゼンテーション・サービス・ユーザーも使用できます。
この項の構成は、次のとおりです。
Oracle BIサーバーは、BINおよびWIDTH_BUCKET論理SQL関数をサポートしています。これらの関数は同じパラメータおよび構文の一部を共有しますが、各関数の使用状況は異なります。
BINおよびWIDTH_BUCKET関数の次の違いに注意してください。
BIN関数と異なり、WIDTH_BUCKET関数は集計のために新しいディメンション属性として処理されません。かわりに、RANK、TOPN、BOTTOMN、NTILE、PERCENTILE、MAVGおよびMEDIANなどの他の表示関数と似ている問合せ結果にWIDTH_BUCKET関数が適用されます。
BIN関数のBY句は、ビン化された式をビン化の前に評価する粒度を定義します。ビン化された式がメジャーである場合、ビン化の前にBY句で指定された粒度でメジャーがグループ化されます。
WIDTH_BUCKET関数のBY句は、WIDTH_BUCKET計算を適用する問合せ結果セットのグループを定義します。異なるグループ内のバケットが個別に計算されます。
ビン化された式がメジャーである場合、BIN関数のBY句は必須です。そうでない場合、メジャー以外の式のBY句はオプションです。
BY句は常にWIDTH_BUCKET関数のオプションです。BY句がWIDTH_BUCKET関数から省略されると、関数は結果セット全体を操作します。
連続した値の属性またはメジャーの個別のバケットのセットを計算し、問合せの他のベース・メジャーのGROUP BY句に含まれる新しいディメンション属性のようにその新しいセットの個別のバケットを処理する場合、BIN関数を使用します。
すでに集計された問合せ結果セットのバケットの個別のセットを計算する場合、WIDTH_BUCKET関数を使用します。
BIN関数を使用して、ユーザーはデータ値を含むディメンション、ファクト表またはメジャーの数値属性(INT、FLOAT、DOUBLE、NUMERIC)を選択し、個別のビンに格納できます。
BIN関数は、指定された数値式を、指定された数の等幅バケットに分類します。この関数は、ビン番号、またはビン間隔の2つのエンドポイントのいずれかを返すことができます。BIN関数の出力は、問合せに含まれる他のメジャーのGROUP BY式として使用されます。
たとえば、ユーザーが小売店の売上高を分析するとします。売上の見方として、ヒストグラム形式があります。これにより、$500より少ない、$500と$1000の間のように売上を表示できます。ヒストグラムを最初に作成するには、売上の合計値をビンに分類します。
集計、フィルタ処理およびドリルなどのために、BIN関数は新しいディメンション属性のように処理されます。これらのすべての操作は、BIN式でサポートされます。
WIDTH_BUCKET関数は表示関数として最終の問合せ結果セットにバケット処理が必要なユーザーに対してBIN関数のかわりになることに注意してください。詳細は、「BINおよびWIDTH_BUCKET関数の比較」を参照してください。
構文
BIN(numeric_expr
[BYgrain_expr1, ..., grain_exprN
] [WHEREcondition
] INTOnumber_of_bins BINS
[BETWEENmin_value
ANDmax_value
] [RETURNING { NUMBER | RANGE_LOW | RANGE_HIGH }])
説明:
numeric_expr
は、ビンに対するメジャーまたは数値属性を示します。
BY
grain_expr1, ..., grain_exprN
は、数値がビンに割り当てられる前にnumeric_expr
が計算される粒度を定義する式のリストを示します。この句はメジャー式の場合は必須で、属性式の場合はオプションです。
WHERE
condition
は、数値がビンに割り当てられる前にnumeric_expr
に適用するフィルタ条件を示します。
INTO
number_of_bins
は、返すビンの数を示します。デフォルトは10です。
BETWEEN
min_value
AND
max_value
は、最も外側のビンのエンドポイントに使用する最小値と最大値を示します。
RETURNING
は、数値がビンに割り当てられる前にnumeric_expr
に適用するフィルタ条件を示します。次のオプションに注意してください。
RETURNING NUMBER
は、戻り値をビン番号(1、2、3、4など)にすることを示します。これはデフォルトの条件です。
RETURNING RANGE_LOW
は、ビン間隔の下限値を示します。
RETURNING RANGE_HIGH
は、ビン間隔の上限値を示します。
例1
この例では、フィルタYear IN (2013, 2014, 2015)
がRevenueの計算に適用されますが、製品ごとにビンを計算するために使用されるUnitPrice副問合せに影響しません。
SELECT Year, BIN(UnitPrice BY ProductName), Revenue FROM SampleSalesSubjectArea WHERE Year IN (2013, 2014, 2015);
例2
この例では、フィルタYear = 2014
がビン計算に明示的に適用され、ビンを定義するために使用するQtySold
式に影響します。Year IN (2013, 2014, 2015)
フィルタがRevenueの計算に適用されますが、ビン定義に影響しません
ビン番号を返すかわりに、この問合せはビン間隔の低いおよび高いエンドポイントを返します。
SELECT Year, BIN(QtySold BY ProductName WHERE Year = 2014 INTO 20 BINS RETURNING RANGE_LOW), BIN(QtySold BY ProductName WHERE Year = 2014 INTO 20 BINS RETURNING RANGE_HIGH), Revenue FROM SampleSalesSubjectArea WHERE Year IN (2013, 2014, 2015);
例3
この例では、ビン化されるメジャー(QtySold)がCityの粒度で計算されます。地域に関係なく各都市にビン1、2、3、4または5が割り当てられます。
また、ビン番号(1から5)を含むビン問合せおよびCityの主キーがCityキーのメイン問合せに結合されます。メイン問合せがRegionおよびCityビン(1から5)でグループ化されます。
一部の地域は、各都市のビン番号が最終の結果セットに表されない可能性があります。たとえば、地域Eastの行にビン1、3、4のみが表され、地域Westにビン1、2、4、5が表される可能性があります。
SELECT Region, BIN(QtySold BY City INTO 5 BINS), Revenue FROM SampleSalesSubjectArea;
例4
この例では、Ageが属性であるため、BY
句が省略されます。この場合、ビンを計算するために使用する粒度は、メタデータで定義されている属性の関連付けられたレベルによって決定されます。
SELECT BIN(Age), Revenue FROM SampleSalesSubjectArea;
例5
この例では、BY
句はAge属性を計算する粒度を明示的に示します。この粒度で属性に複数の値が含まれる場合、BIサーバーの粒度チェックがエラー条件を検出し、複数の値を含むタプルを示すエラー・メッセージを表示します。
SELECT BIN(Age BY Customer), Revenue FROM SampleSalesSubjectArea;
WIDTH_BUCKET関数は、指定された数値式を、指定された数の等幅バケットに分類します。
WIDTH_BUCKET関数は、表示関数としてベース問合せ結果セットで動作します。この関数は、ビン番号、またはビン間隔の2つのエンドポイントのいずれかを返すことができます。
WIDTH_BUCKETおよびBIN関数は同じパラメータおよび構文の一部を共有しますが、各関数の使用状況は異なることに注意してください。詳細は、「BINおよびWIDTH_BUCKET関数の比較」を参照してください。
構文
WIDTH_BUCKET関数の構文はBIN関数より単純で、複数の句のかわりに単純なカンマ区切りの引数を使用します。WIDTH_BUCKET関数でサポートされている唯一ネストされた句は、WIDTH_BUCKET、RANK、TOPNおよびPERCENTILEを含むすべての表示関数でサポートされているBY句です。
WIDTH_BUCKET(numeric_expr
, { NUMBER | RANGE_LOW | RANGE_HIGH },number_of_bins
, [min_value, max_value
] [BYexpr1, ..., exprN
])
説明:
numeric_expr
は、ビンに対するメジャーまたは数値属性を示します。
NUMBER
は戻り値がビン番号(たとえば、1、2、3、4)であることを示しています。これはデフォルトの条件です。
RANGE_LOW
は、ビン間隔の下限値を示します。
RANGE_HIGH
は、ビン間隔の上限値を示します。
number_of_bins
は、返すビンの数を示します。デフォルトは10です。
min_value, max_value
は、最も外側のビンのエンドポイントに使用する最小値と最大値を示します。min_value
およびmax_value
条件が省略されると、関数は自動的にエンドポイントを決定します
BY
expr1, ..., exprN
は、WIDTH_BUCKET計算を適用する問合せ結果セットのグループを定義する式のオプションの式のリストを示します。異なるグループ内のバケット間隔が個別に計算されます。
例1
この例では、フィルタYear IN (2013, 2014, 2015)
が結果セット全体に適用されます。RevenueメジャーがYear、Categoryの粒度で計算されます。Year、Categoryの粒度ですでにフィルタ処理および集計されているRevenueメジャーにWIDTH_BUCKETが計算されます。
SELECT Year, Category, Revenue, WIDTH_BUCKET(Revenue, RANGE_HIGH, 5) FROM SampleSalesSubjectArea WHERE Year IN (2013, 2014, 2015);
例2
この例では、Year、Categoryの粒度でRevenueメジャーが計算され、集計されたRevenueメジャーにWIDTH_BUCKETが計算されます。
WIDTH_BUCKET関数は、値0と1,000,000の間の10個のバケットを指定します。これにより、それぞれ100,000間隔の10個のバケットになります。範囲(0、1,000,000)外のRevenueの値はオーバーフロー・バケットに格納されます。そのため、0より小さいまたは1,000,000より大きいを超えるRevenueの値が存在する場合、結果として11個または12個の個別のバケットになる可能性があります。
SELECT Year, Category, Revenue, WIDTH_BUCKET(Revenue, NUMBER, 10, 0, 1000000) FROM SampleSalesSubjectArea;
例3
この例では、バケット間隔をYearごとに個別に計算するため、WIDTH_BUCKETがYearごとにパーティション化されます。異なる年のバケット間隔が必ずしも同じエンドポイントに配置されないため、結果がYearごとに複数の可視化(トレリス・チャートなど)に分割されないかぎり、この問合せが有効ではない可能性があることに注意してください。
SELECT Year, Category, Revenue, QtySold WIDTH_BUCKET(Revenue, RANGE_LOW, 5 BY Year) as Low, WIDTH_BUCKET(Revenue, RANGE_HIGH, 5 BY Year) as High FROM SampleSalesSubjectArea;
TRENDLINE関数は、時間のデータを測定し、順序付けられたレコードでメトリックの線グラフを表示します。
現在、TRENDLINE関数は、線形回帰および指数回帰としてデータをモデル化できます。
構文
TRENDLINE( <numeric_expr
>, ( [<series
>] ) BY ( [<partitionBy
>] ), <model_type
>, <result_type
>, [number_of_degrees
] )
説明:
numeric_expr
はトレンド化するデータを示します。通常これはメジャー列です。これがY軸であることに注意してください。
series
はX軸を示します。これは<valueExp> <orderByDirection>
のリストです。<valueExp>
はディメンション列で、<orderByDirection>
はASCまたはDESです。デフォルトは、ASCです。これを任意の数値列の任意の組合せにすることはできないので注意してください。
partitionBy
はトレンド線のコントロール・ブレークを示します。
model_type
は使用するモデルのタイプを示します。現在、LINEARのみ指定できます。
result_type
は出力のタイプを示します。VALUEまたはMODELを指定できます。VALUEは、適合においてXを与えたときの回帰Yの値を返します。MODELは、JSON形式文字列のパラメータを返します。
number_of_degrees
は多項式モデルでのみ使用されます。このパラメータはオプションです。
例1
この例は、Y軸にSales.Revenue、X軸にday.cal_yearを使用したトレンド線を示します。回帰法は線形回帰で、返される型はvalueです。day.cal_yearは時間ディメンションのプライマリ・レベル・キーであることに注意してください。
SELECT day.cal_year, Sales.Revenue, TRENDLINE(Sales.Revenue, (day.cal_year), (), 'LINEAR', 'VALUE') FROM TimeSeriesTesting;
例2
この例は、Product.CategoryIDごとにY軸にSales.Revenue、X軸にday.cal_yearを使用した個別のトレンド線を示します。
SELECT Product.CategoryID, day.cal_year, Sales.Revenue, TRENDLINE(Sales.Revenue, (day.cal_year), (Product.CategoryID), 'LINEAR', 'VALUE') FROM TimeSeriesTesting; //single trendline with control_break
例3
この例は、同じ問合せの複数のTRENDLINE関数を示します。この例は、Y軸にSales.Revenue、X軸に(day.cal_year, day.cal_qtr)を使用します。
SELECT day.cal_year, day.cal_qtr, Sales.Revenue, TRENDLINE(Sales.Revenue, (day.cal_year, day.cal_qtr), (), 'LINEAR', 'VALUE'), TRENDLINE(Sales.Revenue, (day.cal_year, day.cal_qtr), (), 'LINEAR', 'MODEL') FROM TimeSeriesTesting order by 1; //multiple trendline functions
例4
この例は、Product.CategoryIDごとにY軸にSales.Revenue、X軸にday.cal_yearを使用した個別のトレンド線を示します。Shipper.ShipperIDが問合せプロジェクション・リストにありますが、TRENDLINEで計算されないことに注意してください。
SELECT Product.CategoryID, Shipper.ShipperID, day.cal_year, Sales.Revenue, TRENDLINE(aggregate(Sales.Revenue by day.cal_year, Product.CategoryID), (day.cal_year), (Product.CategoryID), 'LINEAR', 'Value') FROM TimeSeriesTesting order by 1, 3; //Query grain can be lower than Trendline Y-axis grain.
例5
この例は、Trendline X軸として1つの数値列を使用します。
SELECT employee.country, category.categoryid, sales.qtysold, TRENDLINE (sales.qtysold, (category.categoryid), (employee.country), 'LINEAR', 'VALUE') FROM TimeSeriesTesting order by 1, 2; //using a single numeric column as Trendline X-axis.
Oracle BIサーバーは、Visual Analyzerユーザーが予測、クラスタおよび外れ値などのモデルを使用してデータを検索できる外部的な論理SQL関数をサポートしています。
この項で説明されている外部的な論理SQL関数は、プレゼンテーション・サービス・ユーザーも使用できます。
外部的な論理SQL関数は、入力データをスタンドアロンのRプロセスまたはOREに提供します。そのため、環境および問合せのニーズに合せて、これらの関数を正常に使用する前に環境にRまたはORE外部エンジンを含める必要があります。RまたはOREエンジンのインストールおよび構成の詳細は、『Oracle Business Intelligence Enterprise Editionシステム管理者ガイド』を参照してください。
この項の構成は、次のとおりです。
EVALUATE_SCRIPT関数は、script_file_path
で指定されているようにRスクリプトを実行し、入力として1つ以上の列またはリテラル式を渡します。関数の出力はcolumn_name
によって決定されます。
構文
EVALUATE_SCRIPT( <script_file_path
>, <column_name
>, <options
>, [<runtime_binded_column_options
>] )
説明:
script_file_path
はスクリプトのXMLファイル・パスを示します。たとえば、filerepo//obiee.TimeSeriesForecast.xmlなどです。
column_name
は予測する列名を示します。
options
は、セミコロン(;)で区切られた名前または値のペアの文字列リストです。たとえば、'algorithm=GLM;CustomerID=%1;ActualRevenue=%2;YearsAsCustomer=%3'などです。
runtime_binded_column_options
は、列式のオプションの変数リストを示します。1つ以上の列を指定できます。
例1
この例は、EVALUATE_SCRIPTコマンドの一般的な使用を示します。
EVALUATE_SCRIPT( 'filerepo://PAFScore_bounded.xml', 'predictionValue', 'algorithm=GLM;CustomerID=%1;ActualRevenue=%2;YearsAsCustomer=%3', "A - Sample Sales"."Customers"."C0 Customer Number", "A - Sample Sales"."Datamining"."M01- Actual Revenue", "A - Sample Sales"."Customers"."C20 Years as Customer" ) PredictedRevenue
例2
この例は、EVALUATE_SCRIPT関数を使用してClustering.xmlスクリプトをコールする方法を示します。
SELECT "A - Sample Sales"."Customers"."C0 Customer Number" CustomerID, "A - Sample Sales"."Datamining"."M02- Expected Rev" ActualRevenue, EVALUATE_SCRIPT( 'filerepo://obiee.Clustering.xml', 'clusterId', 'algorithm=kmeans;numClusters=3;id=%1;arg1=%2;', "A - Sample Sales"."Customers"."C0 Customer Number" , "A - Sample Sales"."Datamining"."M02- Expected Rev") ClusterId, EVALUATE_SCRIPT( 'filerepo://obiee.Clustering.xml', 'clusterName', 'algorithm=kmeans;numClusters=3;id=%1;arg1=%2;', "A - Sample Sales"."Customers"."C0 Customer Number" , "A - Sample Sales"."Datamining"."M02- Expected Rev") ClusterName, EVALUATE_SCRIPT( 'filerepo://obiee.Clustering.xml', 'clusterSize', 'algorithm=kmeans;numClusters=3;id=%1;arg1=%2;', "A - Sample Sales"."Customers"."C0 Customer Number" , "A - Sample Sales"."Datamining"."M02- Expected Rev") ClusterSize, EVALUATE_SCRIPT( 'filerepo://obiee.Clustering.xml', 'distanceFromCenter', 'algorithm=kmeans;numClusters=3;id=%1;arg1=%2;', "A - Sample Sales"."Customers"."C0 Customer Number" , "A - Sample Sales"."Datamining"."M02- Expected Rev") DistanceFromCenter FROM "A - Sample Sales" WHERE "A - Sample Sales"."Customers". "C0 Customer Number" < 1000;
例3
この例は、EVALUATE_SCRIPT関数を使用してTimeSeriesForecast.xmlスクリプトをコールする方法を示します。
SELECT "A - Sample Sales"."Time"."T00 Calendar Date" Day1, "A - Sample Sales"."Base Facts"."1- Revenue" Target, EVALUATE_SCRIPT( 'filerepo://obiee.TimeSeriesForecast.xml', 'forecast', 'numPeriods=7;predictionInterval=90;timeDay=%1;target=%2;', "A - Sample Sales"."Time"."T00 Calendar Date", "A - Sample Sales"."Base Facts"."1- Revenue") ForecastedRevenue, EVALUATE_SCRIPT( 'filerepo://obiee.TimeSeriesForecast.xml', 'high', 'numPeriods=7;predictionInterval=90;timeDay=%1;target=%2;', "A - Sample Sales"."Time"."T00 Calendar Date", "A - Sample Sales"."Base Facts"."1- Revenue") High, EVALUATE_SCRIPT( 'filerepo://obiee.TimeSeriesForecast.xml', 'low', 'numPeriods=7;predictionInterval=90;timeDay=%1;target=%2;', "A - Sample Sales"."Time"."T00 Calendar Date", "A - Sample Sales"."Base Facts"."1- Revenue") Low FROM "A - Sample Sales"order by 1;
例4
この例は、EVALUATE_SCRIPT関数を使用してOutliers.xmlをコールする方法を示します。
SELECT "A - Sample Sales"."Customers"."C0 Customer Number" CustomerID, "A - Sample Sales"."Datamining"."M02- Expected Rev" ActualRevenue, EVALUATE_SCRIPT( 'filerepo://obiee.Outliers.xml', 'isOutlier', 'algorithm=mvoutlier;id=%1;arg1=%2;arg2=%3;', "A - Sample Sales"."Customers"."C0 Customer Number" , "A - Sample Sales"."Datamining"."M02- Expected Rev", "A - Sample Sales"."Customers"."C21 Customer Age") IsOutlier, EVALUATE_SCRIPT( 'filerepo://obiee.Outliers.xml', 'distance', 'algorithm=mvoutlier;id=%1;=arg1=%2;arg2=%3;', "A - Sample Sales"."Customers"."C0 Customer Number" , "A - Sample Sales"."Datamining"."M02- Expected Rev", "A - Sample Sales"."Customers"."C21 Customer Age") Distance FROM "A - Sample Sales" WHERE "A - Sample Sales"."Customers". "C0 Customer Number" < 1000
FORECAST関数は、指数平滑法またはARMIAを使用して、seriesに対して指定されたメジャーの時系列モデルを作成します。この関数は、numPeriodsで指定された期間セットの予測を出力します。
構文
FORECAST(numeric_expr
, ([series
]),output_column_name
,options
, [runtime_binded_options
])])
説明:
numeric_expr
は予測する対象のメジャーを示します。たとえば、予測する収益データなどです。
series
は予測モデルが作成される時間の粒度を示します。これは1つ以上の時間ディメンション列のリストです。series
を省略すると、問合せから時間の粒度が決定されます。
output_column_name
は出力列を示します。有効な値は、'forecast'、'low'、'high'および'predictionInterval'です。
options
は、セミコロン(;)で区切られた名前/値のペアの文字列リストを示します。runtime_binded_options
で指定できる%1 ... %Nを値に含めることができます。
runtime_binded_options
は、ランタイム・バインド列およびオプションのカンマ区切りリストを示します。
使用可能なオプション
この項では、FORECAST関数で使用できるオプションおよびオプション値の情報について説明します。
表C-2 FORECAST関数のオプション
オプション名 | 説明 | 値 |
---|---|---|
numPeriods |
予測する時間間隔の数。 |
整数 |
predictionInterval |
予測の信頼度。 |
0から100(値が大きいほど信頼度が高くなります) |
modelType |
予測に使用するモデル。 |
ARIMA ETS |
useBoxCox |
TRUEの場合、Box-Cox変換を使用します。 |
TRUE FALSE |
lambdaValue |
Box-Cox変換パラメータ。 NULLまたはuseBoxCoxがFALSEである場合に無視します。 それ以外の場合、モデルを予測する前にデータが変換されます。 |
– |
trendDamp |
これはETSモデルのパラメータです。 TRUEの場合、減衰した傾向を使用します。NULLの場合、減衰した傾向および減衰していない傾向の両方を試行し、最適な方を選択します。 |
– |
errorType |
これはETSモデルのパラメータです。 |
加法("A") 乗法("M") 自動選択("Z") |
trendType |
これはETSモデルのパラメータです。 |
なし("N") 加法("A") 乗法("M") 自動選択("Z") |
seasonType |
これはETSモデルのパラメータです。 |
なし("N") 加法("A") 乗法("M") 自動選択("Z") |
modelParamIC |
モデル選択に使用する情報基準(IC)。 |
"ic_auto" "ic_aicc" "ic_bic" "ic_auto"(これはデフォルトです) |
出力列
FORECAST関数の出力には、次の列が含まれます。
forecast – この列は予測された出力です。
low – この列は予測された下限値です。
high – この列は予測された上限値です。
例1
この例は日単位の収益予測を選択します。
FORECAST( "A - Sample Sales"."Base Facts"."1- Revenue" Target, ("A - Sample Sales"."Time"."T00 Calendar Date"), 'forecast', 'numPeriods=30;predictionInterval=70;' ) ForecastedRevenue
例2
この例は年単位および四半期単位の収益予測を選択します。
FORECAST( "A - Sample Sales"."Base Facts"."1- Revenue", ("A - Sample Sales"."Time"."T01 Year" timeYear, "A - Sample Sales"."Time"."T02 Quarter" TimeQuarter), 'forecast', 'numPeriods=30;predictionInterval=70;' ) ForecastedRevenue
例3
この例は、カスタム予測スクリプトxmlファイルを使用して、年単位および四半期単位で収益予測を選択します。
FORECAST( "A - Sample Sales"."Base Facts"."1- Revenue", ("A - Sample Sales"."Time"."T01 Year" timeYear, "A - Sample Sales"."Time"."T02 Quarter" TimeQuarter), 'forecast', 'numPeriods=30;predictionInterval=70;Script=filerepo://PAFTimeSeriesForecast.xml' ) ForecastedRevenue
例4
この例には、numPeriods=%1のランタイム・バインド・オプションが含まれます。
SELECT "X - Airlines Traffic"."Month"."Dep Month" s_1, "X - Airlines Traffic"."Passengers"."Passengers" s_2, IFNULL(FORECAST(0.9*"X - Airlines Traffic"."Passengers"."Passengers" Target, ("X - Airlines Traffic"."Month"."Dep Month" Time_Month),'forecast', 'numPeriods=%1;predictionInterval=90',6),"X - Airlines Traffic"."Passengers"."Passengers") s_3 FROM "X - Airlines Traffic"
例5
この例は、浮動小数点の時間の粒度を使用した年単位および月単位の収益予測を選択します。
SELECT "A - Sample Sales"."Time"."T05 Per Name Year" TimeYear1, "A - Sample Sales"."Time"."T02 Per Name Month" Month1, "A - Sample Sales"."Base Facts"."1- Revenue" Target1, FORECAST( "A - Sample Sales"."Base Facts"."1- Revenue" , (), 'Forecast', 'numPeriods=%1;predictionInterval=70;', 4) ForecastedRevenue FROM "A - Sample Sales" order by Month1;
例6
この例は、RegionおよびCountry Nameごとに浮動小数点の時間の粒度を使用した年単位および月単位の収益予測を選択します。
SELECT "A - Sample Sales"."Time"."T05 Per Name Year" TimeYear1, "A - Sample Sales"."Time"."T02 Per Name Month" Month1, "A - Sample Sales"."Base Facts"."1- Revenue" Target1, "A - Sample Sales"."Office Regions"."D50 Region" Region, "A - Sample Sales"."Office Regions"."D52 Country Name" Con, FORECAST( "A - Sample Sales"."Base Facts"."1- Revenue" , (), 'Forecast', 'numPeriods=%1;predictionInterval=70;', 4) ForecastedRevenue FROM "A - Sample Sales" order by region, con, Month1;
CLUSTER関数は、K平均法または階層的クラスタリングを使用する1つ以上の入力式に基づいて、レコード・セットをグループ化します。
構文
CLUSTER((dimension_expr1 , ... dimension_exprN
), (expr1, .. exprN
),output_column_name
,options
, [runtime_binded_options
])
説明:
dimension_expr
は、クラスタ化されるディメンションのリストを示します。
expr
は、dimension_expr
をクラスタ化するために使用するディメンション属性またはメジャーのリストを示します。
output_column_name
は、クラスタの出力列名を示します。有効な値は、'clusterId'、'clusterName'、'clusterDescription'、'clusterSize'、'distanceFromCenter'および'centers'です。
options
は、セミコロン(;)で区切られた名前/値のペアの文字列リストを示します。runtime_binded_options
を使用して指定できる%1 ... %Nを値に含めることができます。
runtime_binded_options
は、ランタイム・バインド列またはリテラル式のカンマ区切りリスト(,)を示します。
使用可能なオプション
この項では、CLUSTER関数で使用できるオプションおよびオプション値の情報について説明します。
表C-3 CLUSTER関数のオプション
オプション名 | 説明 | 値 |
---|---|---|
algorithm |
クラスタリングに使用するアルゴリズム。 |
k-mean h-clustering |
method |
アルゴリズム内の方法。 |
K平均法アルゴリズムの場合: Hartigan-Wong、Lloyd、Forgy、MacQueen 階層的クラスタリングの場合: ward.D、ward.D2、single、complete、average、mcquitty、medianまたはcentroid。 |
numClusters |
クラスタの数。各レコードがクラスタのいずれかに割り当てられます。 |
整数 |
attributeNames |
クラスタリングを考慮する属性。 |
arg1、arg2、arg3、arg4、arg5、arg6、arg7、arg8、arg9、arg10 |
maxIter |
反復数。 |
整数 |
normalizedDist |
TRUEに設定されている場合、0から100の間の距離を正規化します。 |
TRUE FALSE |
useRandomSeed |
デフォルトでTRUEに設定されます。TRUEに設定されている場合、値は本番環境で使用されます。 FALSEに設定されている場合、QA/デバッグ環境で使用するためにset.seed(initialSeed)を使用して再現性を確保します。 |
True False |
initialSeed |
デフォルトは250です。 useRandomSeedがFALSEに設定されている場合のみ、この値が使用されます。 |
整数 |
clusterNamePrefix |
デフォルトは空です。 設定されている場合、これはクラスタ名の接頭辞です。 |
Varchar |
clusterNameSuffix |
デフォルトは空です。 設定されている場合、これはクラスタ名の接尾辞です。 |
Varchar |
出力列
CLUSTER関数の出力には、次の列が含まれます。
clusterID – この列はクラスタ番号またはIDです。
clusterName – この列はクラスタの名前です。clusterIDと同じです。
clusterDescription – クラスタ・データセットがDSSに永続化された後、エンド・ユーザーが説明を追加できます。
clusterSize – この列は現在のクラスタの要素の数です。
distanceFromCenter – この列は、現在のクラスタ要素が現在のクラスタの中心からどれだけ離れているかを示します。
centers – この列は、現在のクラスタの中心を示します。
例1
この例は、Expected RevenueごとにCustomer Numberをクラスタ化し、1000未満の各Customer NumberのclusterIDを選択します。
SELECT "A - Sample Sales"."Customers"."C0 Customer Number" CustomerID, "A - Sample Sales"."Datamining"."M02- Expected Rev" ActualRevenue, CLUSTER( ("A - Sample Sales"."Customers"."C0 Customer Number"), ("A - Sample Sales"."Datamining"."M02- Expected Rev"), 'clusterId', 'algorithm=k-means;numClusters=5;maxIter=10' ) ClusterId FROM "A - Sample Sales" WHERE "A - Sample Sales"."Customers"."C0 Customer Number" < 1000;
例2
この例は、Expected RevenueおよびCustomer AgeごとにCustomer Numberをクラスタ化し、1000未満の各Customer NumberのclusterIDを選択します。
SELECT "A - Sample Sales"."Customers"."C0 Customer Number" CustomerID, "A - Sample Sales"."Datamining"."M02- Expected Rev" ActualRevenue, CLUSTER( ("A - Sample Sales"."Customers"."C0 Customer Number"), ("A - Sample Sales"."Datamining"."M02- Expected Rev", "A - Sample Sales"."Customers"."C21 Customer Age"), 'clusterId', 'algorithm=k-means;numClusters=5;maxIter=10' ) ClusterId FROM "A - Sample Sales" WHERE "A - Sample Sales"."Customers"."C0 Customer Number" < 1000;
例3
この例は、カスタム・クラスタ・スクリプトxmlを使用します。カスタム・クラスタ・スクリプトxmlが他のAdvanced Analytics xmlファイルと同じディレクトリにあることが必要なので注意してください。
SELECT "A - Sample Sales"."Customers"."C0 Customer Number" CustomerID, "A - Sample Sales"."Datamining"."M02- Expected Rev" ActualRevenue, CLUSTER( ("A - Sample Sales"."Customers"."C0 Customer Number"), ("A - Sample Sales"."Datamining"."M02- Expected Rev", "A - Sample Sales"."Customers"."C21 Customer Age"), 'clusterId', 'algorithm=k-means;numClusters=5;maxIter=10;Script=filerepo://CustomClusterScript.xml' ) ClusterId FROM "A - Sample Sales" WHERE "A - Sample Sales"."Customers"."C0 Customer Number" < 1000;
例4
この例はランタイム・バインド・パラメータを示します。
SELECT "A - Sample Sales"."Customers"."C0 Customer Number" CustomerID, "A - Sample Sales"."Datamining"."M02- Expected Rev" ActualRevenue, CLUSTER( ("A - Sample Sales"."Customers"."C0 Customer Number"), ("A - Sample Sales"."Datamining"."M02- Expected Rev", "A - Sample Sales"."Customers"."C21 Customer Age"), 'clusterId', 'algorithm=%2;numClusters=%1;maxIter=%3', 5, 'k-means', 10 ) ClusterId FROM "A - Sample Sales" WHERE "A - Sample Sales"."Customers"."C0 Customer Number" < 1000;
例5
この例は、Expected RevenueおよびCustomer AgeごとにCustomer Numberをクラスタ化し、1000未満の各Customer NumberのclusterIDおよびdistanceFromCenterを選択します。
SELECT "A - Sample Sales"."Customers"."C0 Customer Number" CustomerID, "A - Sample Sales"."Datamining"."M02- Expected Rev" ActualRevenue, CLUSTER( ("A - Sample Sales"."Customers"."C0 Customer Number"), ("A - Sample Sales"."Datamining"."M02- Expected Rev", "A - Sample Sales"."Customers"."C21 Customer Age"),'clusterId', 'algorithm=%2;numClusters=%1;maxIter=%3', 5,'k-means', 10 ) ClusterId, CLUSTER( ( "A - Sample Sales"."Customers"."C0 Customer Number"), ("A - Sample Sales"."Datamining"."M02- Expected Rev", "A - Sample Sales"."Customers"."C21 Customer Age"),'distanceFromCenter', 'algorithm=%3;numClusters=%1;maxIter=%2', 5, 10, 'k-means' ) distanceFromCenter FROM "A - Sample Sales" WHERE "A - Sample Sales"."Customers"."C0 Customer Number" < 1000;
例6
この例は、BrandおよびProduct Typeは個別にExpected RevenueおよびCustomer AgeごとにCustomer Numberをクラスタ化し、1000未満の各Customer NumberのclusterIDおよびdistanceFromCenterを選択します。
SELECT "A - Sample Sales"."Customers"."C0 Customer Number" CustomerID, "A - Sample Sales"."Datamining"."M02- Expected Rev" ActualRevenue, "A - Sample Sales"."Products"."P4 Brand" Brand, "A - Sample Sales"."Products"."P2 Product Type" ProductType, CLUSTER( ("A - Sample Sales"."Customers"."C0 Customer Number"), ("A - Sample Sales"."Datamining"."M02- Expected Rev", "A - Sample Sales"."Customers"."C21 Customer Age"), 'clusterName', 'algorithm=k-means;numClusters=%1;maxIter=%2;useRandomSeed=FALSE;', 2, 10 ) clusterName FROM "A - Sample Sales" where Brand = 'FunPod' order by Brand, ProductType;
例7
この例は、IDリストの複数の列(ProductおよびCompany)をクラスタ化します。両方のIDリスト列がプロジェクション・リストにあるため、パーティション・ディメンションはありません。
SELECT "A - Sample Sales"."Products"."P1 Product" s_1, "A - Sample Sales"."Offices"."D4 Company" s_2, CLUSTER( ("A - Sample Sales"."Products"."P1 Product", "A - Sample Sales"."Offices"."D4 Company"), ("A - Sample Sales"."Base Facts"."2- Billed Quantity","A - Sample Sales"."Base Facts"."1- Revenue"), 'clusterName', 'algorithm=k-means;numClusters=%1;maxIter=%2;useRandomSeed=FALSE;', 5, 10) s_3, "A - Sample Sales"."Base Facts"."2- Billed Quantity" s_4, "A - Sample Sales"."Base Facts"."1- Revenue" s_5 FROM "A - Sample Sales";
例8
この例は、IDリストの複数の列(ProductおよびCompany)をクラスタ化します。1つのパーティション・ディメンション(City)があります。
SELECT "A - Sample Sales"."Products"."P1 Product" s_1, "A - Sample Sales"."Offices"."D4 Company" s_2, "A - Sample Sales"."Office Regions"."D55 City" s_3, CLUSTER( ("A - Sample Sales"."Products"."P1 Product", "A - Sample Sales"."Offices"."D4 Company"), ("A - Sample Sales"."Base Facts"."2- Billed Quantity","A - Sample Sales"."Base Facts"."1- Revenue"), 'clusterName', 'algorithm=k-means;numClusters=%1;maxIter=%2;useRandomSeed=FALSE;', 5, 10) s_4, "A - Sample Sales"."Base Facts"."2- Billed Quantity" s_5, "A - Sample Sales"."Base Facts"."1- Revenue" s_6 FROM "A - Sample Sales" order by s_3;
OUTLIER関数は、K平均法、階層的クラスタリングまたは多変量外れ値検出アリゴリズムを使用する1つ以上の入力式に基づいて、レコードを外れ値として分類します。
構文
OUTLIER((dimension_expr1 , ... dimension_exprN
), (expr1, .. exprN
),output_column_name
,options
, [runtime_binded_options
]))])
説明:
dimension_expr
はディメンションのリストを示します。
expr
は、外れ値を検索するディメンション属性またはメジャーのリストを表します。
output_column_name
は出力列名を示します。有効な値は'isOutlier'および'distance'です。
options
は、セミコロン(;)で区切られた名前/値のペアの文字列リストを示します。runtime_binded_options
を使用して指定できる%1 ... %Nを値に含めることができます。
runtime_binded_options
は、ランタイム・バインド列またはリテラル式のオプションのカンマ区切りリスト(,)です。
使用可能なオプション
この項では、OUTLIER関数で使用できるオプションおよびオプション値の情報について説明します。
表C-4 OUTLIER関数のオプション
オプション名 | 説明 | 値 |
---|---|---|
attributeName |
外れ値検出を考慮する属性。 |
arg1、arg2、arg3、arg4、arg5、arg6、arg7、arg8、arg9、arg10 |
algorithm |
使用するアルゴリズム。 |
mvoutlier(デフォルト) h-clustering k-means |
useRandomSeed |
このオプションは、デフォルトでTRUEになります。これは本番環境で使用する値です。 FALSEに設定されている場合、set.seed(initialSeed)を使用して再現性を確保します。QA/デバッグ環境で使用されます。 |
TRUE FALSE |
initialSeed |
デフォルトは250です。 useRandomSeedがFALSEに設定されている場合のみ、この値が使用されます。 |
整数 |
topN |
デフォルトは3です。 isTopNAsPercentageがTRUEである場合、外れ値としてtopN %を返します。または、外れ値としてtopN値を返します。 |
Double |
isTopNAsPercentage |
デフォルトはFALSEです。 この値はtopNとともに使用されます。 |
TRUE FALSE |
出力列
OUTLIER関数の出力には、次の列が含まれます。
isOutlier – この列はTrueまたはFalseを使用して、現在の要素が外れ値であるかどうかを示します。
distance – この列は中心からの距離を示します。
例1
この例は、mvoutlierアルゴリズムを使用してExpected Revenueに基づくCustomer Numberの外れ値を決定します。
SELECT "A - Sample Sales"."Customers"."C0 Customer Number" CustomerID, "A - Sample Sales"."Datamining"."M02- Expected Rev" ActualRevenue, OUTLIER( ("A - Sample Sales"."Customers"."C0 Customer Number"), ("A - Sample Sales"."Datamining"."M02- Expected Rev") 'isOutlier', 'algorithm=mvoutlier' ) IsOutlier FROM "A - Sample Sales" WHERE "A - Sample Sales"."Customers"."C0 Customer Number" < 1000;
例2
この例は、k-meansアルゴリズムを使用してExpected RevenueおよびCustomer Ageに基づくCustomer Numberの外れ値を決定します。
SELECT "A - Sample Sales"."Customers"."C0 Customer Number" CustomerID, "A - Sample Sales"."Datamining"."M02- Expected Rev" ActualRevenue, OUTLIER( ("A - Sample Sales"."Customers"."C0 Customer Number"), ("A - Sample Sales"."Datamining"."M02- Expected Rev", "A - Sample Sales"."Customers"."C21 Customer Age"), 'isOutlier', 'algorithm=k-means' ) IsOutlier FROM "A - Sample Sales" WHERE "A - Sample Sales"."Customers"."C0 Customer Number" < 1000;
例3
この例は、カスタム外れ値スクリプトxmlを使用して外れ値を決定します。カスタム外れ値スクリプトxmlが他のAdvanced Analytics xmlファイルと同じディレクトリにあることが必要なので注意してください。
SELECT "A - Sample Sales"."Customers"."C0 Customer Number" CustomerID, "A - Sample Sales"."Datamining"."M02- Expected Rev" ActualRevenue, OUTLIER( ( "A - Sample Sales"."Customers"."C0 Customer Number"), ("A - Sample Sales"."Datamining"."M02- Expected Rev", "A - Sample Sales"."Customers"."C21 Customer Age"), 'isOutlier', 'algorithm=mvoutlier;Script=filerepo://CustomOutlierScript.xml' ) IsOutlier FROM "A - Sample Sales" WHERE "A - Sample Sales"."Customers"."C0 Customer Number" < 1000;
例4
この例は、ランタイム・バインド・パラメータを使用して外れ値を決定します。
SELECT "A - Sample Sales"."Customers"."C0 Customer Number" CustomerID, "A - Sample Sales"."Datamining"."M02- Expected Rev" ActualRevenue, OUTLIER( ("A - Sample Sales"."Customers"."C0 Customer Number"), ("A - Sample Sales"."Datamining"."M02- Expected Rev", "A - Sample Sales"."Customers"."C21 Customer Age"), 'isOutlier', 'algorithm=%1', 'mvoutlier' ) IsOutlier FROM "A - Sample Sales" WHERE "A - Sample Sales"."Customers"."C0 Customer Number" < 1000;
例5
この例は、Expected RevenueおよびCustomer Ageに基づくCustomer Numberの外れ値および距離を決定します。
SELECT "A - Sample Sales"."Customers"."C0 Customer Number" CustomerID, "A - Sample Sales"."Datamining"."M02- Expected Rev" ActualRevenue, OUTLIER( ("A - Sample Sales"."Customers"."C0 Customer Number"), ("A - Sample Sales"."Datamining"."M02- Expected Rev", "A - Sample Sales"."Customers"."C21 Customer Age"), 'isOutlier', 'algorithm=%1', 'mvoutlier' ) IsOutlier, OUTLIER( ( "A - Sample Sales"."Customers"."C0 Customer Number"), ("A - Sample Sales"."Datamining"."M02- Expected Rev", "A - Sample Sales"."Customers"."C21 Customer Age"), 'distance', 'algorithm=%1', 'mvoutlier') Distance FROM "A - Sample Sales" WHERE "A - Sample Sales"."Customers". "C0 Customer Number" < 1000;
例6
この例は、BrandおよびOfficeごとにExpected Revenue、Dyn Expected RevおよびCredit Rateに基づくCustomer Numberの外れ値を決定します。
SELECT "A - Sample Sales"."Customers"."C0 Customer Number" CustNo, "A - Sample Sales"."Datamining"."M02- Expected Rev" Revenue, "A - Sample Sales"."Products"."P4 Brand" Brand, "A - Sample Sales"."Offices"."D1 Office" Office, OUTLIER( ("A - Sample Sales"."Customers"."C0 Customer Number"), ("A - Sample Sales"."Datamining"."M02- Expected Rev", "A - Sample Sales"."Datamining"."M03- Dyn Expected Rev", "A - Sample Sales". "Customers"."C6 Credit Rate"), 'isOutlier', 'algorithm=k-means;' ) IsOutlier FROM "A - Sample Sales" order by Brand, Office;
例7
この例は、IDリストに複数の列ProductおよびCompanyが含まれます。両方のIDリスト列がプロジェクション・リストにあるため、パーティション・ディメンションはありません。
SELECT "A - Sample Sales"."Products"."P1 Product" s_1, "A - Sample Sales"."Offices"."D4 Company" s_2, OUTLIER( ("A - Sample Sales"."Products"."P1 Product", "A - Sample Sales"."Offices". "D4 Company"), ("A - Sample Sales"."Base Facts"."2- Billed Quantity","A - Sample Sales". "Base Facts"."1- Revenue"), 'isOutlier','algorithm=k-means;useRandomSeed=FALSE') s_3, "A - Sample Sales"."Base Facts"."2- Billed Quantity" s_4, "A - Sample Sales"."Base Facts"."1- Revenue" s_5 FROM "A - Sample Sales";
例8
この例は、IDリストに複数の列ProductおよびCompanyが含まれます。パーティション・ディメンションはCityです。
SELECT "A - Sample Sales"."Products"."P1 Product" s_1, "A - Sample Sales"."Offices"."D4 Company" s_2, "A - Sample Sales"."Office Regions"."D55 City" s_3, OUTLIER( ("A - Sample Sales"."Products"."P1 Product", "A - Sample Sales"."Offices". "D4 Company"), ("A - Sample Sales"."Base Facts"."2- Billed Quantity","A - Sample Sales". "Base Facts"."1- Revenue"), 'isOutlier','algorithm=k-means;useRandomSeed=FALSE') s_4, "A - Sample Sales"."Base Facts"."2- Billed Quantity" s_5, "A - Sample Sales"."Base Facts"."1- Revenue" s_6 FROM "A - Sample Sales" order by s_3;
REGR関数は、線形モデルに適合させて、適合した値またはモデルを返します。この関数は、2つのメジャーに線形曲線を適合するために使用できます。
構文
REGR(y_axis_measure_expr
, (x_axis_expr
), (category_expr1, ..., category_exprN
),output_column_name
,options
, [runtime_binded_options
])
説明:
y_axis_measure_expr
は、回帰モデルの計算対象のメジャーを示します。
x_axis_measure_expr
は、y_axis_measure_expr
の回帰モデルを決定するために使用するメジャーを示します。
category_expr1, ..., category_exprN
は、y_axis_measure_expr
の回帰モデルの計算対象のカテゴリを決定するために使用するディメンション/ディメンション属性を示します。1つ以上で最大5個までのディメンション/ディメンション属性をカテゴリ列として指定できます。
output_column_name
は、回帰の出力列名を示します。有効な値は'fitted'、'intercept'または'modelDescription'です。
options
は、セミコロン(;)で区切られた名前/値のペアの文字列リストを示します。runtime_binded_options
を使用して指定できる%1 ... %Nを値に含めることができます。
runtime_binded_options
は、ランタイム・バインド列またはリテラル式のオプションのカンマ区切り(,)リストを示します。
使用可能なオプション
この項では、REGR関数で使用できるオプションおよびオプション値の情報について説明します。
表C-5 REGR関数のオプション
オプション名 | 説明 | 値 |
---|---|---|
algorithm |
回帰に使用するアルゴリズム。 |
LM |
attributeNames |
回帰に考慮する属性。 |
arg1、arg2、arg3、arg4、arg5、arg6、arg7、arg8、arg9、arg10 |
targetNames |
反復数。 |
target |
showModelDescription |
これは、デフォルトではTRUEに設定されます。 TRUEに設定されている場合、モデルの説明がJSON形式で書き込まれます。 |
TRUE FALSE |
出力列
REGR関数の出力には、次の列が含まれます。
fitted – この列は、使用されるアルゴリズムに基づく現在の値の適合された値です。
intercept – この列は、線形モデルy = m1x1 + cの切片値'c'です。
modelDescription – この列は、回帰モデルの要約を説明するJSON出力です。
例1
この例は、Product TypeおよびBrandごとのDiscountに基づく回帰モデルを使用して決定されRegionおよびCountry Nameでパーティション化されるRevenueの適合した値を選択します。
SELECT "A - Sample Sales"."Office Regions"."D50 Region" Region, "A - Sample Sales"."Office Regions"."D52 Country Name" Con, "A - Sample Sales"."Products"."P4 Brand" Brand, "A - Sample Sales"."Products"."P2 Product Type" ProductType, "A - Sample Sales"."Base Facts"."3- Discount Amount" Discount, "A - Sample Sales"."Base Facts"."1- Revenue" ActualRevenue, REGR( "A - Sample Sales"."Base Facts"."1- Revenue" , ("A - Sample Sales"."Base Facts"."3- Discount Amount"), ("A - Sample Sales"."Products"."P2 Product Type", "A - Sample Sales". "Products"."P4 Brand"), 'FITTED', 'algorithm=%1', 'LM') FROM "A - Sample Sales";
例2
この例は、Product Type、Brand、Region、Country NameごとのDiscountに基づく回帰モデルを使用して決定されるRevenueの適合した値を選択します。
SELECT "A - Sample Sales"."Office Regions"."D50 Region" Region, "A - Sample Sales"."Office Regions"."D52 Country Name" Con, "A - Sample Sales"."Products"."P4 Brand" Brand, "A - Sample Sales"."Products"."P2 Product Type" ProductType, "A - Sample Sales"."Base Facts"."3- Discount Amount" Discount, "A - Sample Sales"."Base Facts"."1- Revenue" ActualRevenue, REGR( "A - Sample Sales"."Base Facts"."1- Revenue" , ("A - Sample Sales"."Base Facts"."3- Discount Amount"), (), 'FITTED', 'algorithm=%1', 'LM') FROM "A - Sample Sales";
例3
この例は、Product TypeおよびBrandごとのDiscountに基づく回帰モデルを使用して決定されるRevenueの適合した値を選択します。
SELECT "A - Sample Sales"."Products"."P4 Brand" Brand, "A - Sample Sales"."Products"."P2 Product Type" ProductType, "A - Sample Sales"."Base Facts"."3- Discount Amount" Discount, "A - Sample Sales"."Base Facts"."1- Revenue" ActualRevenue, REGR( "A - Sample Sales"."Base Facts"."1- Revenue" , ("A - Sample Sales"."Base Facts"."3- Discount Amount"), ("A - Sample Sales"."Products"."P2 Product Type", "A - Sample Sales". "Products"."P4 Brand"), 'FITTED', 'algorithm=%1', 'LM') FROM "A - Sample Sales";
例4
この例は、Product TypeおよびBrandごとのDiscountに基づく回帰モデルを使用して決定されるRevenueの適合した値を選択します。
SELECT "A - Sample Sales"."Products"."P4 Brand" Brand, "A - Sample Sales"."Products"."P2 Product Type" ProductType, "A - Sample Sales"."Base Facts"."3- Discount Amount" Discount, "A - Sample Sales"."Base Facts"."1- Revenue" ActualRevenue, REGR( "A - Sample Sales"."Base Facts"."1- Revenue" , ("A - Sample Sales"."Base Facts"."3- Discount Amount"), (), 'FITTED', 'algorithm=%1', 'LM') FROM "A - Sample Sales";