1

私は ActivePivot の初心者DimensionType = timeで、日付が階層的に表示されるディメンションを作成したいと考えています。たとえば30.01.2013、年に 1 つのレベルが必要です -> 2013(降順で並べ替え)、月に 1 つのレベル (降順で並べ替え) -> 1 および日付に 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また、を 2 つの新しいフィールドで拡張しました。

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

乾杯!

于 2013-01-31T11:47:51.583 に答える
0

ActivePivot サンドボックス アプリケーションの TimeBucket ディメンションは、財務期間に基づくカスタム バケットを定義します。ActivePivot では、標準的な年 > 月 > 日階層を作成する方が実際には簡単でシームレスです。スキーマの説明では、3 つのフィールドを宣言する必要があります (1 つは年、1 つは月、もう 1 つは日)。

<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 ) 。これは、日付から 3 つのフィールドをオンザフライで計算します。電卓の例として、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 に答える