はじめに
Yellowfin9.13の新機能としてカスタム日付関数を作成することができるようになりました。wikiはこちら。記事によると、このように書いてあります。
日付期間は、例えば過去3ヶ月以内のデータのみを表示するようにデータをフィルタリングするなど、特定の時間範囲を通してレポートデータをフィルタリングする簡単な方法を提供します。また、Yellowfinでは、ユーザーが事前に定義した独自の日付期間を作成することもできます。
あまり良くわからないのですが、もともと実装されている今月や今年などの決まった期間で対象をしぼるだけでなく、自分でその範囲を指定できるようにJavaのクラスを拡張して使用できるということのようです。
これから先は会計年度の開始日から半年後をフィルタリングする例を紹介していきます。
前提条件
Yellowfin9.13以降をインストールした時の、/appserver/webapps/ROOT/WEB-INF/lib/にあるi4-mi.jarが必要です。これは、Javaのプロジェクトにおける追加のJarに含めるためです。
また、Java 8以降で作成することが条件の1つです。リンクはこちら
実装に必要な関数
このカスタム日付関数を作成するには、以下のメソッドを実装する必要があります。リンクはこちら
- public abstract String getName();
- public abstract String getUniqueID();
- public abstract FilterUnit getUnit();
- public abstract DatePeriodType getDatePeriodType();
- public abstract List getLeftPredicate();
- public abstract List getRightPredicate();
それぞれ見てみます。
getName();
これはユーザー側に表示されるカスタム日付関数名です。
@Override
public String getName() {
return "First Half Year";
}
この場合はFirst Half Yearという値が表示されます。
getUniqueID();
このメソッドはYellowfin内部で使用されるユニークな名前なので他に作成するためには別の名前で作成してください。
@Override
public String getUniqueID() {
return "First_Half_Year";
}
getFilterUnit();
このメソッドは、カスタム日付フィルターがどの期間にリンクされているかを返します。DAYにすると日付単位で計算が行われます。
@Override
public FilterUnit getUnit() {
return FilterUnit.DAY;
}
getDatePeriodType();
このメソッドは適用される比較フィルターのタイプを伝えます。以下の例ではPREDEF_BETWEEN_DATESで日付ごとの比較をします。
@Override
public DatePeriodType getDatePeriodType() {
return DatePeriodType.PREDEF_BETWEEN_DATES;
}
getLeftPredicate();
このメソッドは比較する際の始めの日付を定義します。この場合は会計年度の開始日を指します。
@Override
public List<CalendarCommand> getLeftPredicate() {
List<CalendarCommand> left = getBeginningOfToday();
left.add(buildCommand(CalendarCommand.CmdType.SET_FIN_YEAR_START, 0));
return left;
}
getRightPredicate();
このメソッドは比較する際の終わりの日付を定義します。以下の例では会計年度の最終日から6ヶ月前を指定しています。
@Override
public List<CalendarCommand> getLeftPredicate() {
List<CalendarCommand> right = getEndOfToday();
right.add(buildCommand(CalendarCommand.CmdType.SET_FIN_YEAR_END, 0));
right.add(buildCommand(CalendarCommand.CmdType.ADD_AMOUNT, Calendar.MONTH, -6));
return right;
}
この場合だと会計年度の開始日から半年後をフィルターしていることになります。
SQLを見ると半年でフィルターしていることがわかります。
全てのコード例
ここまでの必須メソッドを実装するとこのようになります。公式のコード例はこちら
import java.util.Calendar;
import java.util.List;
import com.hof.mi.util.CalendarCommand;
import com.hof.mi.interfaces.CustomDatePeriod;
public class FirstHalfYear extends CustomDatePeriod {
@Override
public String getName() {
return "First Half Year";
}
@Override
public String getUniqueID() {
return "First_Half_Year";
}
@Override
public FilterUnit getUnit() {
return FilterUnit.DAY;
}
@Override
public List<CalendarCommand> getLeftPredicate() {
List<CalendarCommand> left = getBeginningOfToday();
left.add(buildCommand(CalendarCommand.CmdType.SET_FIN_YEAR_START, 0));
return left;
}
@Override
public List<CalendarCommand> getRightPredicate() {
List<CalendarCommand> right = getEndOfToday();
right.add(buildCommand(CalendarCommand.CmdType.SET_FIN_YEAR_END, 0));
right.add(buildCommand(CalendarCommand.CmdType.ADD_AMOUNT, Calendar.MONTH, -6));
return right;
}
public DatePeriodType getDatePeriodType() {
return DatePeriodType.PREDEF_BETWEEN_DATES;
}
}
パッケージ方法
プロジェクトをエクスポートする際に、JARファイルを指定して、そのまま、圧縮して.jarファイルでエクスポートします。
そして、Yellowfin上の管理→プラグイン管理でjarファイルをアップロードします。
定数について
ここまで定数を大文字で記載してきましたが、詳細はこちらをご覧ください。
おわりに
カスタム日付関数の作成方法をご紹介してきましたが、新装されたこの機能を使うとYellowfin内部でもともと用意されているもの以上に柔軟に自分で期間指定して使用することができそうです。
ちなみに、会計年度の開始日の指定は管理→システム構成→地域のこの部分です。