サンプル: キー別にレコードをグループ分けする方法

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  マッピングのデザイン > データのグループ分け >

サンプル: キー別にレコードをグループ分けする方法

このサンプルは、 group-by 関数の手助けと共にグループ分けする方法、および、データを集計する方法を示しています。 このサンプルには次のパスで使用することのできるデモマッピングが付随しています: <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\GroupTemperaturesByYear.mfd。このマッピングは、月ごとの気温を含む XML ファイルからデータを読み取ります:

 

<Temperatures>
  <data temp="-3.6" month="2006-01" />
  <data temp="-0.7" month="2006-02" />
  <data temp="7.5" month="2006-03" />
  <data temp="12.4" month="2006-04" />
  <data temp="16.2" month="2006-05" />
  <data temp="19" month="2006-06" />
  <data temp="22.7" month="2006-07" />
  <data temp="23.2" month="2006-08" />
  <data temp="18.7" month="2006-09" />
  <data temp="11.2" month="2006-10" />
  <data temp="9.1" month="2006-11" />
  <data temp="0.8" month="2006-12" />
  <data temp="-3.2" month="2007-01" />
  <data temp="-0.3" month="2007-02" />
  <data temp="6.5" month="2007-03" />
  <data temp="10.6" month="2007-04" />
  <data temp="19" month="2007-05" />
  <data temp="20.3" month="2007-06" />
  <data temp="22.3" month="2007-07" />
  <data temp="20.7" month="2007-08" />
  <data temp="19.2" month="2007-09" />
  <data temp="12.9" month="2007-10" />
  <data temp="8.1" month="2007-11" />
  <data temp="1.9" month="2007-12" />
</Temperatures>

 

このマッピングのビジネスの条件は2段階で構成されています:

 

1.各年の気温をグループ分けにします。
2.各年度の最低、最高、および平均機能を検索します。

 

最初の目的を達成するには、マッピングは group-by 関数を呼び出します。2番目のゴールを達成するには、minmax および avg 集計関数を呼び出します。 これらすべての関数は MapForce ビルトイン関数で、ライブラリウィンドウからマッピングにドラッグして追加することができます。マッピングにビルトイン関数を追加する を参照してください。

mf_GroupTemperaturesByYear_map

GroupTemperaturesByYear.mfd

MapForce がマッピングを実行する方法は (そして読み取りを開始するために奨励されるアプローチ) ターゲットコンポーネントの一番上のアイテムを確認することです。 このサンプルでは、YearlyStats アイテムが group-by 関数により返される各グループのために作成されます。 group-by 関数は key 入力に接続が作成されると、最初の引数として、すべての data アイテムをソースとグループから取ります。 条件が気温を年度ごとにグループ分けすることであり、年度が最初に取得される必要があります。 これを達成するには、 substring-before 関数は、各 data 要素の month 属性から年度の部分を抽出します。 具体的には、 month の値を引数としてとり、の最初の substr の発生の前の部分に返します。 上記の通り、 このサンプルでは、 substr は点線の文字のセットであるため、値 「2006-01」 を与えられると、関数は 「2006」を返します。

 

最後に、MinimumTemp, MaximumTemp、 と AverageTemp の値は、これらのアイテムを対応する集計関数に接続することにより取得することができます: minmax、 と avg。 全ての3つに関数は、ソースコンポーネントから読み取られた入力として温度のシーケンスを取ります。

これらの関数は、各グループのコンテキストと既に作業しているため parent-context 引数を必要としません。すなわち、作業する各集計関数のためのコンテキストを提供する data から YearlyStats への親コネクションが存在します。

 

マッピングの出力をプレビューするには、 Output タブをクリックししてください。ソースファイルの読み取りで取得された年数とグループの数量が一致することに注意してください。 例えば、

 

<Temperatures>
  <YearlyStats Year="2006">
    <MinimumTemp>-3.6</MinimumTemp>
    <MaximumTemp>23.2</MaximumTemp>
    <AverageTemp>11.375</AverageTemp>
  </YearlyStats>
  <YearlyStats Year="2007">
    <MinimumTemp>-3.2</MinimumTemp>
    <MaximumTemp>22.3</MaximumTemp>
    <AverageTemp>11.5</AverageTemp>
  </YearlyStats>
</Temperatures>

 

メモ: 簡単化のために、上記のコードリストには、デモマッピングで使用されている実際の入力と出力よりも少ないデータを含んでいます。

(C) 2019 Altova GmbH