...
Table of Contents | ||
---|---|---|
|
概要
カスタム関数は、XMLで書かれYellowfinサーバーに保持されている関数です。これらは、式ビルダーでは簡単に作成できない先進のSQL関数から構成されており、システム管理者によって設定されます。
XMLスキーマを使用すると、カスタム定義のSQL関数でパラメーターを埋め込むことができるため、カラム(列)をレポートに挿入するときに数値やカラム(列)値を割り当てることができます。
新しいカスタム関数の追加
Yellowfinに新規XML関数を追加するには:
- XMLを次の場所にあるcustom-functions.xmlファイルにコピーします:
Yellowfin/appserver/webapps/ROOT/WEB-INF/
- これらをディレクトリに追加したら、Yellowfinを再起動して、使用可能にします。
Yellowfinにおけるカスタム関数の使用の詳細については、式テンプレート(カスタム関数)を参照してください。
スキーマ
親オブジェクト | オブジェクト | 説明 |
---|---|---|
|
| 階層で最上位のオブジェクトであり、ドキュメント全体をカプセル化します。子タイプは |
|
| 独自の関数を定義し、その関数の定義に必要なデータフィールドをカプセル化します。子オブジェクトは |
|
| nameは、アプリケーション内でのカスタム関数の表示名を定義します。各カスタム関数のプライマリ識別子なので、それぞれにユニークな名前を付ける必要があります。各関数には名前を1つのみ設定できます。 |
|
| argumentには、レポート作成時にカスタムSQLに挿入する引数(パラメーター)を定義します。引数は3つの属性 |
|
| argumentのindexパラメーターは、関数のコンテキストで引数をユニークに特定するためのものです。正の整数にする必要があります。indexは、引数をカスタムSQL文内の定義された場所に挿入するために使用されます。indexが「1」の場合、SQL文では「$1」の出現箇所すべてが引数に置換されます。 |
|
| argumentのnameパラメーターは、アプリケーションにおける引数の表示名です。 |
|
| argumentのdatatypeパラメーターは、引数のデータ型を定義します。このパラメーターを指定すると、この引数に互換性のあるカラムや値しか入力できないようになります。データ型は、以下のいずれか1つです。
|
|
| sqlでは、このカスタム関数で生成される実際のデータベースSQL文を定義します。このフィールドのSQLは、単一カラムとして親SQL文に挿入されるので、完全なSELECT FROM WHEREは不要です。したがって、SQLは単一カラム構文との互換性が必要です。下に単一カラムのカスタム関数として単純なCASE WHEN ELSE ENDの例を示します。引数を挿入する必要がある場合は、このSQLに変数を含めることもできます。「$1」は、indexが1の引数に割り当てられたカラム(列)またはデータの値に置換されます。 |
|
| aggregateパラメーターは、カスタム関数内で集約されるカラムを定義します。アプリケーションに対して、レポートSQLの生成時にこれらのカラムをGROUP BY節に置かないように指示します。aggregateパラメーターの値も引数変数になります。たとえばindexが1の引数の場合は「$1」です。 |
|
| groupbyパラメーターは、アプリケーションがレポートSQLを生成するときにGROUP BY節に挿入するカラムを定義します。groupbyパラメーターの値も引数変数になります。たとえばindexが1の引数の場合は「$1」です。 |
|
| この関数を使用可能なデータベースを指定します。何も指定されていない場合は、すべてのデータベースで表示されます。データベースごとに1つのオブジェクトがあるようにしてください。たとえば、SQLServer、PostgreSQL、OpenEdge、Progress、Oracle、DB2、Access、Notes、ODBC、HSQL、またはMySQLです。 |
|
| return関数は、カスタム関数そのものが返す値のデータ型を定義します。データ型は以下のいずれか1つです。
|
Case文の例
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
<custom-functions>
<!-- functions are stored by name, so names must be unique, even across different databases -->
<!-- ratio function -->
<function>
<name>Ratio</name>
<argument>
<index>1</index>
<name>Numerator</name>
<datatype>numeric</datatype> <!-- numeric, text, datetime -->
</argument>
<argument>
<index>2</index>
<name>Denominator</name>
<datatype>numeric</datatype> <!-- numeric, text, datetime -->
</argument>
<sql>
<![CDATA[
CASE
WHEN SUM($2) != 0 THEN SUM($1) / SUM($2)
ELSE NULL
END
]]>
</sql>
<aggregate>$1</aggregate>
<aggregate>$2</aggregate>
<database>SQLServer</database> <!-- Available for what DBs? SQLServer, PostgreSQL, OpenEdge, Progress, Oracle, DB2, Access, Notes, ODBC, HSQL, MySQL -->
<database>HSQL</database>
<return>numeric</return> <!-- numeric, text, datetime -->
</function>
</custom-functions>
|