概要
カスタム関数は、XMLで書かれYellowfinサーバーに保持されている関数です。これらは、式ビルダーでは簡単に作成できない先進のSQL機能から構成されており、システム管理者によって設定されます。
XMLスキーマを使用すると、カスタム定義のSQL関数でパラメーターを埋め込むことができるため、カラム(列)をレポートに挿入するときに数値やカラム(列)値を割り当てることができます。
新しいカスタム関数の追加
Yellowfinに新規XML関数を追加するには:
- XMLを次の場所にあるcustom-functions.xmlファイルにコピーします。Yellowfin/appserver/webapps/ROOT/WEB-INF/
- これらをディレクトリに追加したら、Yellowfinを再起動して、使用可能にします。
Yellowfinでカスタム関数を使用する詳細については、 式テンプレート(カスタム関数) を参照してください。
スキーマ
親オブジェクト |
オブジェクト |
説明 |
---|---|---|
|
|
階層で最上位のオブジェクトであり、ドキュメント全体をカプセル化します。子タイプは<function>の1つのみです。 |
|
|
独自の関数を定義し、その関数の定義に必要なデータフィールドをカプセル化します。子オブジェクトは<name>、<argument>、<sql>、<return>、および<aggregate>です。 |
|
|
nameは、アプリケーション内でのカスタム関数の表示名を定義します。各カスタム関数のプライマリ識別子なので、それぞれにユニークな名前を付ける必要があります。各関数には名前を1つのみ設定できます。 |
|
|
argumentは、レポートの設計時にカスタムSQLに挿入できる引数(またはパラメーター)を定義します。引数は3つの属性<index>、<name>、および<datatype>で定義されます。 |
|
|
argumentのindexパラメーターは、関数のコンテキストでその引数を一意に特定します。正の整数にする必要があります。indexは、引数をカスタムSQLステートメント内の定義された場所に挿入するために使用されます。indexが「1」の場合、SQLステートメントでは「$1」の出現箇所すべてが引数に置換されます。 |
|
|
argumentのnameパラメーターは、アプリケーションにおける引数の表示名です。 |
|
|
argumentのdatatypeパラメーターは、引数のデータ型を定義します。このパラメーターを指定すると、この引数には互換性のあるカラムと値しか入力できません。データ型は、「numeric」、「text」、「datatime」のいずれか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関数は、カスタム関数全体で返す情報のデータ型を定義します。「numeric」、「text」、「datatime」のいずれか1つです。 |
Caseステートメントの例
<?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>