いつもお世話になっております。いつもROMでしたが、どうしても実現できないことが出てきまして、初めて投稿させていただきます。
お知恵をいただけると幸いです。
[ 背景 ]
プロジェクト管理の予定データと実績データが、二つの異なるファイルに存在しております。
極めてシンプル化したサンプルデータを添付しております。
予定データが、plan.xlsx(planテーブルと呼ぶことにします)です。
実績データが、actual.xlsx(actualテーブルと呼ぶことにします)です。
集計したいことは、以下の通りです。
---
+ "plan"テーブルのCategoryの値を持つ"actual"テーブルの行を特定
+ その中で、"plan"テーブルのTarget_Startの値からTarget_Endの値の範囲に含まれる"actual"テーブルのTarget Noの行をさらに特定
+ 特定された行のAmountをSUM
---
期待される結果として、expected.xlsxとして添付しました。
[ 課題 ]
実際のデータがこのサンプル程度にシンプルであれば、planテーブルとactualテーブルを結合して、
集計をすれば良いことはわかっています。
ただ、実際には
- さらに多くのデータが(両テーブルに)含まれており、
- (上記の例で言えば)planテーブルには存在しないが、actualテーブルには存在し、集計対象にしたい、
"Category値"が存在し得る
- actualテーブルには挙がってきていないが、planテーブルには存在する"Category値"が存在し得る
(つまり、実績はまだ挙がってきてないが、計画されているCategoryが存在する)
- また、Target_Startの値からTarget_Endの値の範囲(幅)に規則性がない。
という状況です
この場合、Categoryで外部結合することが望ましいかもしれませんが、データ量が増えてくると
集計に時間を要してしまうのではないかと懸念しております。
また、極力、中間データのようなものは生成したくありません。
どのように集計をするのが好ましいか、お知恵をいただけないでしょうか?
あるいは、そもそも上記の条件を鑑みると、不可能でしょうか?
何卒よろしくお願いいたします。
Aoya さん
簡単に言うと、Rangeでの結合は出来ないので、以下のようなテーブルが必要です。
(Category と Targetの組み合わせで想定される全てのケースが必要)
PJT_IDCategoryTargetGroupXABC0Group1XABC1Group1XABC2Group1XABC3Group1XABC4Group1XABC5Group1XABC6Group1XABC7Group1XABC8Group1XABC9Group1XABC10Group1XABC11Group2XABC12Group2XABC13Group2XABC14Group2XABC15Group2XABC16NAXABC17NAXABC18NAXABC19NAXABC20NAZCDF0NAZCDF1NAZCDF2NAZCDF3NAZCDF4NAZCDF5NAZCDF6NAZCDF7NAZCDF8NAZCDF9NAZCDF10Group3ZCDF11Group3ZCDF12Group3ZCDF13Group3ZCDF14Group3ZCDF15Group3ZCDF16Group3ZCDF17NAZCDF18NAZCDF19NAZCDF20NA別の解法としては、全てFORMULAで。
パラメータを組み合わせれば、もう少し利用しやすくなるようにも思われます。
いずれにしても、データの範囲が固まっていなさそうなので、どにょうな対応をとるにしても、
メンテナンスの工数はそれなりにかかります。
まずは集計の必要項目(グルーピングのルール)をはっきりさせ、メンテのルールを明らかにすることから始めるべきかとは思います。
追加の情報としては、まもなくリリースされる VERSION 10.5からは、RangeのJoinが機能として追加されます。
ただ、完全にこのケースのニーズが満足されるかどうかは不明です。
Thanks,
Shin