QuickSightで、区分ごとに以下の指標をピボットテーブル形式で表示したいと考えています。
パラメータとして fiscal
(年度)と month
(月)を設定し、これに基づく各種計算フィールドの作成方法についてアドバイスをいただきたいです。
1. 工数・売上金額の集計
- 実績日がパラメータの年度に該当するもの → 年間合計
- 実績日がパラメータの年度かつ月に該当するもの → 月次合計
- 完了日がパラメータの年度に該当するもの → 年間合計
- 完了日がパラメータの年度かつ月に該当するもの → 月次合計
2. 年度受注残高(開発案件)
- 指定した年度において、「売上予定日」がパラメータの月より後(=翌月以降〜年度末)にある開発案件の「売上金額」合計を算出したいです。
- 例:パラメータが
fiscal=2024
, month=5
の場合、2024年6月〜2025年3月に売上予定日がある開発案件の売上金額合計。
3. 保守未消化分(保守案件)
- 売上予定日が当年度内の保守案件について、契約期間に応じた月割りの保守料を計上し、指定月に該当する分を抽出したいです。
- 例えば、契約期間が4月開始〜翌年3月終了なら12で割って1ヶ月分、7月〜翌年3月なら9で割って1ヶ月分とし、各月の未消化分を求めたいと考えています。
このような集計を行うための計算フィールドやフィルタ設定のベストプラクティスについて、ご教示いただけますと幸いです。
@youpinco
ご質問ありがとうございます。詳細に確認したいのですが元データのサンプルをいただくことは可能でしょうか。実データではなくサンプルデータで問題ありません。
ご回答ありがとうございます。
Arenaにて作ってみましたので、ご確認お願いします。
パラメータによる年度・月次の工数/売上集計の実現方法
@youpinco
詳細データありがとうございます。
1番
パラメータを年度と月に指定してご要望を100%満たすことは難しいと感じています。
代替策としてパラメータを年度と年月にすれば実現できそうです。
①年度の計算フィールドを作成する
ifelse(
extract('MM',実績日) > 0 AND extract('MM',実績日) < 4,
extract('YYYY',実績日)-1,
extract('YYYY',実績日)
)
②年月の計算フィールドを作成する
ifelse(extract('MM',実績日) < 10,
parseInt(concat(toString(extract('YYYY',実績日)) ,'0', toString(extract('MM',実績日)))),
parseInt(concat(toString(extract('YYYY',実績日)) , toString(extract('MM',実績日))))
)
③パラメータを作成する。年度と年月のパラメータを作成する
④作成したパラメータを利用してフィルタを作成する
これにより年度の合計工数や指定した月までの当該年度の合計工数をピボットで表示させることは可能かと思います。
2番
こちらは1番の応用で作成可能かと思います。
1番ではフィルタ条件を指定した月日以下にしていましたが今回は売上予定日をフィルタして指定月以上にすることで実現可能かと思います。
ご回答ありがとうございます。
1番について、無事に再現できました。
ただ、コントロールが「202505」のように年月が連結された形式で表示されるため、視認性がやや低く、選択肢が多いため操作性にも課題を感じています。
もし「2025-05」のように、より見やすい形式で表示させる方法などがあれば、具体的に教えていただけますでしょうか?
2番については、新たにビジュアルKPIを使用して試してみたのですが、「データなし」と表示されてしまいます。
使用している式は以下の通りです:
sumIf(
{売上金額},
年度(売上予定日) = ${fiscal}
AND 月(売上予定日) > ${month}
AND {案件種別} = '開発'
)
なにか原因がわかりましたら、ご教示いただけますと幸いです。
3番についても、解決方法やアドバイスがありましたら引き続きご教授いただきたく思います。
よろしくお願いいたします。
@youpinco
五月雨に申し訳ありません。2番に手法について説明いたします。
いただいたデータの中に売上予定日がなかったので想像で作成しております。認識相違がりましたらご指摘ください。また手順としては1番と同様となります。
①年度の計算フィールドを作成する。今回は売上予定日の年度。
ifelse(
extract('MM',売上予定日) > 0 AND extract('MM',売上予定日) < 4,
extract('YYYY',売上予定日)-1,
extract('YYYY',売上予定日)
)
②年月の計算フィールドを作成する。今回は売上予定日の年月。
ifelse(extract('MM',売上予定日) < 10,
parseInt(concat(toString(extract('YYYY',売上予定日)) ,'0', toString(extract('MM',売上予定日)))),
parseInt(concat(toString(extract('YYYY',売上予定日)) , toString(extract('MM',売上予定日))))
)
③パラメータを作成する。年度と年月のパラメータを作成する
④作成したパラメータを利用してフィルタを作成する
年度は1番と同じです。
年月はパラメータの値以上にしていただけると当該年度かつ指定日以降の売上金額が計算されると思います。
前回こちらでご相談した件から要件が少し変わってきまして、改めてまとめ直させていただきました。方向性が変わって申し訳ないのですが、以下の内容でアドバイスをいただけるととても助かります!
■ 全体像とビジュアル構成
現在、QuickSight上に以下の3つのビジュアル(A・B・C)を作成しています:
- A:月次・年次の売上/工数ビジュアル
- B:開発案件の受注残高ビジュアル
- C:保守案件の未消化分ビジュアル
fiscal
(年度)と month
(月)というパラメータで年度・月を選択する仕組みです。
■ Aのビジュアル(工数・売上)
- 行:区分、種別名(例:開発、保守)
- 値:
- 年度計:4月~選択月までの工数と売上金額
- 月合計:選択月の工数と売上金額
▼ 開発案件の売上金額の計算式
受注額 * 実績時間*乗率 / sumOver(実績時間*乗率, [物件ID], PRE_FILTER)
- 工数は「実績日」が
fiscal
・month
と一致するかでフィルタ
- 売上金額は「完了日」でフィルタ
※Aのビジュアルでは、この設定で工数・開発の売上金額ともに問題なく表示できています。
■ Bのビジュアル(開発の受注残高)
開発案件について、Aと重複しないように残高を出したいです。
対象としたいデータ:
- 売上予定日が選択した年度内(
${fiscal}
)にある
- かつ、「完了日」が選択月(
${month}
)以降のもの
■ Cのビジュアル(保守案件の未消化分)
保守案件は、案件ごとに「受注日」と「希望納期」から契約期間を判断し、以下のように計上したいです。
▼ 処理方針
- 各保守案件の受注額を、契約期間(月数)で割って「1ヶ月分の金額」を算出
売上金額(月)
:選択月の対象案件分の月割額
売上金額(年)
:4月〜選択月までの月割額の合計
未消化分
:選択月より後の月数 × 1ヶ月あたりの金額
▼ イメージ(例)
選択月が4月なら:
- 今月分:7,500円(= 42,000 ÷ 12 + 48,000 ÷ 12)
- 年度計:7,500円
- 未消化:66,500円(= 11ヶ月分)C社は受注していないから未消化に入れない
選択月が8月なら:
- 今月分:15,300円(= A社7,500 +B社4,000+ C社7,800)
- 年度計:45,300円
- 未消化:91,100円(= 7ヶ月分のA社 +3ヶ月分のB社+ 7ヶ月分のC社)
※C社のように年度の途中からの場合、受注日が始まった時点から未消化分に含められる
パラメータによる年度・月次の工数/売上集計の実現方法
ご教示いただけると幸いです。
どうぞよろしくお願いいたします。
@youpinco
質問ありがとうございます。
要件が複雑になっており、コミュニティを通して返答するのは難しいので、ソリューションについて個別にお話しをさせていただきたいと思います。つきましては担当営業より連絡させていただきますので少々お待ちください。