ActivePivot Sandbox 应用程序中的 TimeBucket 维度定义了基于财务时间段的自定义分桶。在 ActivePivot 中创建标准年 > 月 > 日层次结构实际上更简单且无缝。在描述中,如果架构需要声明三个字段(一个代表年,一个代表月,一个代表日)。
<field name="Year" indexation="dictionary" />
<field name="Month" indexation="dictionary" />
<field name="Day" indexation="dictionary" />
然后您需要声明一个引用这些字段的维度。
<dimension name="Time">
<level name="Year" />
<level name="Month" />
<level name="Day" />
</dimension>
然后 ActivePivot 将通过内省加载的记录以增量方式构建时间层次结构。
如果输入记录(对象)已经包含 Year 属性、Month 属性和 Day 属性(例如,如果输入记录是带有 getYear()、getMonth() 和 getDay() 方法的 POJO),这将自动工作。如果不是这种情况,例如输入记录只有一个日期属性,您可以在将它们放入 ActivePivot 之前转换您的记录,或者在 ActivePivot 中注入一个计算器(com.quartetfs.biz.pivot.classification.ICalculator)这将即时计算日期的三个字段。查看 ActivePivot Sandbox 应用程序以获取计算器示例。
提取这些字段通常使用标准 Java 代码完成:
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
System.out.println("Date: " + date);
System.out.println("Year: " + calendar.get(Calendar.YEAR));
System.out.println("Month: " + calendar.get(Calendar.MONTH) + 1);
System.out.println("Day: " + calendar.get(Calendar.DAY_OF_MONTH));
关于维度级别的成员排序,ActivePivot 默认使用 java 对象(实现 java.lang.Comparable 接口的对象)的自然排序,因此日期和整数将从最低到最高排序。您可以通过在目标级别上声明“ReverseOrder”比较器来轻松地扭转这种情况。
<dimension name="Time">
<level name="Year">
<comparator pluginKey="ReverseOrder" />
</level>
<level name="Month">
<comparator pluginKey="ReverseOrder" />
</level>
<level name="Day">
<comparator pluginKey="ReverseOrder" />
</level>
</dimension>