5.20241.9

OLAP:フィールドの選択

デフォルトでは、PivotEngineは、itemsSourceプロパティから取得された生データに基づいて自動的にフィールドを作成します。

この機能をオフにして、明示的にフィールドを指定することもできます。たとえば、次のような場合です。

  • データソースにあるフィールドの一部のみを含める
  • フィールドプロパティをカスタマイズする
  • 同じ連結に基づいて複数のフィールド(フィールドのクローン)を作成する

測定値フィールドのクローン

複数の集計方法を使用して値を集計することもできます。たとえば、合計値と平均値を同じビューで表示できます。また、累計、差異、パーセントなどの計算値の隣に値を表示できます。

それには、bindingが同じでaggregateまたはshowAs値が異なる複数のフィールドを作成します。

let ng = new wjOlap.PivotEngine({
    autoGenerateFields: false, // 自動生成をオフにします
    fields: [ // 必要なフィールドを指定します(日付なし)
        { binding: 'buyer', header: '担当者' },
        { binding: 'type', header: '分類' },
        { binding: 'amount', header: '合計', format: 'c0', aggregate: 'Sum' },
        { binding: 'amount', header: '平均', format: 'c0', aggregate: 'Avg' },
    ],
    itemsSource: getData(10000), // 生データ
    showRowTotals: 'Subtotals',
    valueFields: ['合計', '平均'], // 合計と平均を表示します
    rowFields: ['担当者', '分類'] // 担当者と分類別
});

PivotPanelコントロールを使用すると、同じソースフィールドを値リストに複数回ドラッグして、クローンフィールドを作成できます。

次元フィールドのクローン

複数の方法で次元値を使用することもできます。たとえば、日付の年や四半期に従ってデータを分割できます。

それには、bindingが同じでformat値が異なる複数のフィールドを作成します。

let ng = new wjOlap.PivotEngine({
    autoGenerateFields: false, // 自動生成をオフにします
    fields: [ // 必要なフィールドを指定します(日付なし)
        { binding: 'date', header: '年', format: 'yyyy', width: 80 },
        { binding: 'date', header: '四半期', format: '"Q"q', width: 80 },
        { binding: 'buyer', header: '担当者' },
        { binding: 'type', header: '分類' },
        { binding: 'amount', header: '金額', format: 'c0', aggregate: 'Sum' },
    ],
    itemsSource: getData(10000), // 生データ
    showRowTotals: 'Subtotals',
    valueFields: ['金額'], // 支出金額を表示します
    rowFields: ['年', '四半期'] // 年および四半期別
  });

深い連結

PivotFieldオブジェクトをデータ項目のサブプロパティに連結できます。

たとえば、次の例のデータには、4つのサブプロパティを持つ「emotion」メンバがあります。PivotEngineのフィールドは、「emotion.happiness」、「emotion.fear」などの連結文字列を使用してそれぞれのサブプロパティに連結します。

let theEngine = new wjOlap.PivotEngine({
    autoGenerateFields: false,
    fields: [
        { binding: 'country', header: '国', width: 90 }, 
        { binding: 'product', header: '商品'},
        { header: '感情', subFields: [
            { binding: 'emotion.happiness', header: '幸せ', dataType: 'Number' },
            { binding: 'emotion.surprise', header: '驚き', dataType: 'Number' },
            { binding: 'emotion.fear', header: '不安', dataType: 'Number' },
            { binding: 'emotion.disgust', header: '嫌悪', dataType: 'Number' }
        ]}
    ],
    rowFields: ['商品'],
    valueFields: ['幸せ', '驚き'],
    itemsSource: getData(1000)
});