1

我是 ActivePivot 的新手,我想创建一个带有 的维度DimensionType = time,其中日期以分层方式显示。例如,30.01.2013我需要一年级-> 2013(降序排序),一个月级(也降序排序)-> 1 和天级(也降序排序)->30, 29, 28, ...

通过 ActivePivotLive 查看应如下所示:

- 2013
  - 1
    - 30
    - 29
    - 28
    - ...
+ 2012
+ 2011

等等。

我浏览了 ActivePivot 沙盒项目,但没有找到任何对我有帮助的东西。TimeBucket我在 中找到的维度EquityDerivativesCube相似,但存储桶的创建方式不同。

我怎么解决这个问题?

4

2 回答 2

1

好的,我处理它。不必进行往返并实施维度。levels和 a很容易做到calculator
这里的代码来自EquityDerivativesCube.xml

<!-- Standard time buckets, bucketing performed at insertion -->
<dimension name="TimeBucket">
    <properties>
        <entry key="DimensionType" value="time" />
        <entry key="IsAllMembersEnabled" value="true" />
    </properties>           
    <level name="Year">
        <properties>
            <entry key="LevelType" value="TIME_YEARS" />
        </properties>
        <comparator pluginKey="ReverseOrder" />
    </level>
    <level name="Month">
        <properties>
            <entry key="LevelType" value="TIME_MONTHS" />
        </properties>
        <comparator pluginKey="Custom">
            <order name="firstObjects">
                <value>Jan</value>
                <value>Feb</value>
                <value>Mrz</value>
                <value>Apr</value>
                <value>Mai</value>
                <value>Jun</value>
                <value>Jul</value>
                <value>Aug</value>
                <value>Sep</value>
                <value>Okt</value>
                <value>Nov</value>
                <value>Dez</value>
            </order>
        </comparator>
    </level>
    <!-- The Value Date level is the field Date -->
    <level name="Value Date" property="Date">
        <properties>
            <entry key="LevelType" value="time" />
        </properties>
        <comparator pluginKey="ReverseOrder" />
    </level>
</dimension>


我将以下代码段添加到PNLCalculator.enrichTrade

...
            pnl = pnlVega + pnlDelta;
// Year and month calculations BEGIN

            final Calendar cal = CALENDAR.get();
            cal.setTime(trade.getDate());
            final int year = cal.get(Calendar.YEAR);
            final String month = DateFormatSymbols.getInstance(GERMANY).getShortMonths()[cal.get(MONTH)];
// Year and month calculations END

            // instantiate the result that will hold the enrichment data
            final PNLCalculatorResult result = new PNLCalculatorResult();
...

// add them to the result
            result.setYear(year);
            result.setMonth(month);
...

我还扩展了SanboxFields.xml两个新字段:

...
    <field name="Year"              type="integer" />
    <field name="Month"             type="string" />
...

干杯!

于 2013-01-31T11:47:51.583 回答
0

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>
于 2013-01-31T09:48:59.140 回答