返品・返金処理データテンプレート
返品・返金処理データテンプレート
- 収集を推奨する属性
- 追跡すべき主要なアクティビティ
- 抽出手順
返品・返金処理の属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ名 ActivityName | 返品・返金プロセス内で発生した特定の業務アクティビティまたはイベントの名称です。 | ||
| 説明 この属性は、返品ライフサイクルにおける1つのステップまたは節目を表します。アクティビティには、「返品受注承認」や「商品検査完了」など、実行された作業が含まれます。SAP S/4HANAに記録されたステータス変更、伝票作成、特定のユーザー操作などから導出されます。 これらのアクティビティの順序と頻度を分析することが、プロセスマイニングの中心です。プロセスマップを可視化し、一般的な経路とまれな経路を特定するとともに、手戻りや非効率の兆候となる、繰り返し発生するアクティビティを見つけられます。 重要な理由 アクティビティはプロセスマップの基盤です。プロセスフロー、ボトルネック、バリエーションを可視化して分析できます。 入手先 アクティビティ名は通常、VBUK/VBUPなどのテーブルにおける伝票ステータスの変更、VBAK(販売伝票)やBKPF(会計伝票)などのヘッダーテーブルにおける作成イベント、MSEGにおける在庫移動ステータスなど、複数のデータを組み合わせて導出されます。 例 返品申請を開始倉庫で商品を受領クレジットメモ作成返金処理完了 | |||
| イベント時刻 EventTime | 特定のアクティビティが発生した正確なタイムスタンプです。 | ||
| 説明 イベント時刻には、業務イベントがシステムに記録された日付と時刻が保存されます。このタイムスタンプは、アクティビティを時系列に並べ、時間に基づく分析を行うために欠かせません。 プロセスマイニングでは、この属性を使ってアクティビティ間のサイクル時間や各ステップの所要時間を計算し、時間の経過に伴うプロセスパフォーマンスを分析します。ボトルネックの発見、SLA遵守状況の監視、返品プロセスの時間的な動きを理解するための基盤になります。 重要な理由 イベントを並べ、すべての所要時間とサイクル時間を計算し、プロセスの遅延を特定するために欠かせないタイムスタンプです。 入手先 通常は、VBAK、LIKP、BKPFなどのテーブルにある伝票作成またはステータス変更に関連する日付・時刻フィールドから取得されます。例として、ERDAT(作成日)、ERZET(作成時刻)、会計伝票の転記日(BUDAT)があります。 例 2023-10-26T10:05:00Z2023-10-27T14:30:15Z2023-10-28T09:00:00Z | |||
| 返品ケースID ReturnCaseId | 1件の顧客返品プロセスを識別する一意のIDです。開始から完了まで、関連するすべてのアクティビティを関連付けます。 | ||
| 説明 返品ケースIDは、1件の返品に属するすべてのイベントとアクティビティをまとめる主要な識別子です。顧客からの返品依頼ごとに一意のIDが割り当てられるため、プロセス全体をエンドツーエンドで追跡できます。 プロセスマイニングでは、この属性がプロセスフローを再構成する基盤になります。返品ごとに、「返品依頼開始」、「商品受領」、「返金処理完了」などの個別のイベントを一貫したタイムラインに結び付けることで、ケース期間、プロセスバリアント、ボトルネックを分析できます。 重要な理由 返品を開始から完了まで追跡するための基本キーです。サイクル時間やプロセスバリアントの発見など、ケース単位の分析を可能にします。 入手先 通常は、返品受注ヘッダーテーブルVBAKにある販売伝票番号(VBELN)です。伝票カテゴリ(VBTYP)によって返品であることが示されます。 例 600001896000019060000191 | |||
| ソースシステムID SourceSystemId | データの抽出元であるソースシステムの識別子です。 | ||
| 説明 この属性は、イベントデータの発生元である記録システムを示します。このプロセスでは、通常、SAP S/4HANAのインスタンスIDです。 複数のシステムが存在する環境では、データの系譜の確認、トラブルシューティング、データ整合性の確保に欠かせません。返品が複数のERPインスタンスで処理されている場合や、倉庫管理システムなどの外部システムと連携している場合に、データを区別できます。 重要な理由 データの発生元と系譜を把握するための重要な情報です。特に複数システムの環境で、データの追跡可能性と信頼性を確保できます。 入手先 通常は固定値で、データ抽出時に設定されます。SAPシステムの管理情報にあるシステムID(SID)などから取得できます。 例 S4H_PROD_100S4Q_DEV_200 | |||
| 最終データ更新日時 LastDataUpdateTimestamp | このイベントのデータが最後に更新または抽出された日時を示すタイムスタンプです。 | ||
| 説明 最後にデータを抽出または更新した日付と時刻を記録します。分析対象データの鮮度に関するメタデータを提供します。 プロセスマイニング分析の適時性を把握するために重要です。データがどの時点まで更新されているかを確認できるため、進行中のケースを追跡する運用監視やダッシュボードで特に役立ちます。 重要な理由 データの鮮度を示します。分析やダッシュボードが最新情報に基づいていることを確認するために欠かせません。 入手先 通常は、ETLまたはデータパイプラインツールによるデータ抽出時に、データセットへ生成・記録されます。 例 2023-11-01T02:00:00Z2023-11-02T02:00:00Z | |||
| イベント終了時刻 EventEndTime | アクティビティの完了時刻を示すタイムスタンプです。所要時間の計算に使用します。 | ||
| 説明 StartTime(EventTime)がアクティビティの開始を示すのに対し、EventEndTimeは終了を示します。システムが生成する多くのイベントでは、瞬時に発生するため開始時刻と終了時刻が同じです。一方、「商品検査」のように測定可能な所要時間を持つアクティビティでは、この属性が欠かせません。 この属性により、アクティビティの処理時間を直接計算できます。プロセス間の空白時間だけでなく、どの具体的なステップに最も時間がかかっているかを特定するパフォーマンス分析の基盤になります。 重要な理由 個々のアクティビティの所要時間を正確に計算できます。特定のプロセスステップにある非効率を見つけるための重要な情報です。 入手先 導出値であることが多く、アクティビティによっては専用のフィールドが存在します。より一般的には、ケース内で後続するアクティビティのStartTimeが使用されます。 例 2023-10-26T11:25:30Z2023-10-27T15:00:00Z2023-10-28T09:10:45Z | |||
| ユーザー名 UserName | アクティビティを実行した従業員のユーザーIDです。 | ||
| 説明 返品の承認やクレジットメモの作成など、タスクの完了を担当した特定のユーザーまたはシステムエージェントを識別します。SAPでは、伝票を作成または変更したユーザーを記録するフィールドに保存されることが一般的です。 ユーザー別に分析することで、高い成果を上げている個人やチーム、研修の必要性、業務量の分布を把握できます。また、プロセス上の逸脱を調査する際にも欠かせません。具体的な担当者とプロセス上の操作を関連付け、コンプライアンスと監査を支援できます。 重要な理由 プロセスアクティビティを特定のユーザーに関連付け、チームのパフォーマンス、業務量、コンプライアンスを分析できます。 入手先 通常は、VBAK(販売受注)、LIKP(納入)、BKPF(会計伝票)などの伝票ヘッダーテーブルにあるERNAM(作成者)から取得されます。ユーザーの詳細情報は、ユーザーマスターテーブルUSR21から補完できます。 例 CBROWNASMITHWF_BATCH | |||
| 商品ID ProductId | 返品対象の商品を識別する一意のIDです。 | ||
| 説明 返品対象となる品目または商品を示します。返品プロセスを商品カタログ内の特定の商品に関連付けます。 商品別に返品を分析することで、返品率の高い商品を特定できます。これは、品質不良、商品説明の不足、製造上の問題を示している可能性があります。このデータは、商品設計、サプライヤー管理、在庫戦略に関する判断に役立ちます。 重要な理由 返品プロセスを特定の商品に関連付け、商品単位の返品率を分析し、品質や商品説明の問題を特定できます。 入手先 返品受注明細テーブル(VBAP)または返品納入明細テーブル(LIPS)の品目番号フィールド(MATNR)にあります。 例 FG-10023HW-45981SW-LICENSE-PREM | |||
| 返品理由 ReturnReason | 顧客が商品を返品する理由です。 | ||
| 説明 「商品不良」、「サイズ違い」、「不要になった」など、顧客が申告した返品理由を記録します。通常は、返品開始時にあらかじめ定義された理由コードから選択されます。 返品理由を分析することで、商品の品質問題を特定し、商品説明を改善したり、販売プロセスを見直したりできます。顧客の不満を直接把握し、返品率全体を下げるための改善領域に優先順位を付けられます。 重要な理由 返品が発生する理由を把握し、商品品質、出荷ミス、顧客の期待とのずれに対処するための根本原因分析に役立ちます。 入手先 通常は、返品販売受注明細テーブル(VBAP)のABGRU(販売伝票の却下理由)フィールドに保存されます。 例 001 - 品質不良002 - 輸送中の破損005 - 誤った商品を発送 | |||
| 返金額 RefundAmount | 顧客に支払われる最終的な返金金額です。 | ||
| 説明 返品プロセスの完了時に顧客へ計上または返金される実際の金額を表します。この値は、クレジットメモなどの財務伝票に記録されます。 さまざまな分析に使用する重要な財務指標です。「返金額差異分析」ダッシュボードでは、依頼金額との比較に使用します。また、金額別に返品を分類し、高額返品に異なるプロセスが適用されているか、解決までに時間がかかっているかを確認できます。 重要な理由 返品による財務的な影響を追跡し、返金の正確性、高額ケース、全体的なコストを分析するために欠かせません。 入手先 クレジットメモ伝票の正味額フィールド(NETWR)から取得されます。VBRK(請求伝票ヘッダー)やBSEG(会計伝票明細)などのテーブルにあります。 例 125.50999.0049.99 | |||
| 顧客ID CustomerId | 返品を開始した顧客を識別する一意のIDです。 | ||
| 説明 返品を依頼した顧客を識別します。プロセスインスタンスを顧客マスターデータ上の特定の取引先に関連付けます。 顧客別に返品を分析することで、返品率が異常に高い顧客などの傾向を把握できます。これは、不正行為や顧客の不満を示している可能性があります。また、顧客の種類、取引額、履歴に基づいて返品プロセスを分類し、サービスレベルを調整できます。 重要な理由 返品を特定の顧客に関連付け、顧客行動や顧客セグメントを分析し、返品頻度の高い顧客を特定できます。 入手先 返品受注ヘッダーテーブル(VBAK)の顧客番号フィールド(KUNNR)にあります。 例 CUST-001234CUST-005678CUST-009012 | |||
| クレジットメモ番号 CreditMemoNumber | 返金を承認するクレジットメモ伝票の一意のIDです。 | ||
| 説明 クレジットメモは、返品商品の代金を顧客の勘定に正式に計上する請求伝票です。この属性は、その財務伝票の一意の番号です。 クレジットメモ番号を追跡することは、返品プロセスの財務決済を分析するために欠かせません。多くの場合、実際の返金支払いを開始する重要な節目であり、財務照合や監査にも必要です。 重要な理由 返金に関する正式な財務取引を表します。プロセスの最終段階を追跡し、財務監査を行うために重要です。 入手先 請求伝票ヘッダーテーブル(VBRK)の請求伝票番号(VBELN)です。伝票カテゴリによってクレジットメモであることが示されます。 例 900003459000034690000347 | |||
| 再作業フラグ IsRework | ケース内のアクティビティが、以前のアクティビティの繰り返しかどうかを示すフラグです。 | ||
| 説明 この計算ブール属性は、同じケース内でアクティビティが複数回実行された再作業を特定します。たとえば、商品の検品をやり直した場合や、クレジットメモを作成、キャンセルした後に再作成した場合です。 「返金処理の再作業分析」ダッシュボードと「返金再作業率」KPIに欠かせない属性です。エラーが発生しやすいアクティビティや、複数回の試行が必要なアクティビティを明らかにし、プロセスの非効率を定量化できます。改善すべき管理やトレーニングの領域も特定できます。 重要な理由 繰り返し作業をフラグで示すことで、プロセスの非効率やエラーを明らかにし、無駄と遅延を減らすための改善につなげます。 入手先 通常、このフラグはプロセスマイニングツール自体で計算するか、データ変換の段階で事前に計算します。同じケース内で、同じアクティビティ名が以前に出現しているかどうかを確認します。 例 truefalse | |||
| 処理担当者 ProcessingAgent | 手動アクティビティの処理を担当する特定の担当者またはリソースグループです。 | ||
| 説明 特定のタスクを実行した担当者またはチームを識別します。共有サービス環境では、役割やチームを示すため、「ユーザー名」より具体的な情報になる場合があります。 「返金承認効率」ダッシュボードで、担当者やチームごとのパフォーマンスを分析するために役立ちます。業務量の分布や研修の必要性を把握し、高い成果を上げている担当者や、共有すべきベストプラクティスを持つチームを特定できます。 重要な理由 担当者またはチーム単位でパフォーマンスを分析し、業務量の管理、研修機会の特定、効率の向上に役立てられます。 入手先 担当者が割り当てられている場合はSAP Business Partnerの機能から取得できる可能性があります。または、HR組織構造におけるユーザーの部署や役割から導出できます。 例 第1層サポート倉庫検査チーム財務部・買掛金 | |||
| 商品検査結果 ItemInspectionOutcome | 返品商品の実物検査の結果です。 | ||
| 説明 商品が倉庫に到着した後に実施される検査プロセスの結果を記録します。一般的な結果には、「承認」、「却下・破損」、「承認・再販可能」などがあります。 後続のプロセスステップに重要な背景情報を提供します。全額返金、一部返金、返金なしのいずれにするかを決定します。この結果を分析することで、却下理由を特定し、輸送中に商品が頻繁に破損している場合には、商品の梱包や配送業者に関する改善にもつなげられます。 重要な理由 返金の承認または却下に至った判断の背景を明らかにし、商品の状態や返金額の調整理由に関するデータを提供します。 入手先 品質管理モジュール(QM)の検査ロット、または返品納入明細(LIPS)のステータスや理由コードに記録される場合があります。カスタムフィールドに保存されることもあります。 例 受入・再販売可能受入・再生予定却下・顧客起因の破損却下・誤った商品を返品 | |||
| 自動処理かどうか IsAutomated | アクティビティがシステムによって実行されたか、人が実行したかを示すフラグです。 | ||
| 説明 ワークフローやバックグラウンドジョブなど、システムが自動的に実行したアクティビティと、ユーザーが手動で実行したアクティビティを区別するブール型属性です。 「自動返金承認率」KPIの計算や、自動化の機会の特定に欠かせません。手動タスクに絞り込むことで、速度、コスト、正確性の面で自動化の効果が大きい領域に、プロセス改善の取り組みを集中できます。 重要な理由 手動タスクと自動タスクを区別します。自動化の機会を特定し、デジタルトランスフォーメーションの効果を測定するために重要です。 入手先 通常はユーザー名に基づいて導出されます。たとえば、ユーザーが「WF_BATCH」などのシステムIDの場合、アクティビティは自動処理として記録されます。 例 truefalse | |||
| 販売組織 SalesOrganization | 元の販売と返品を担当する組織単位です。 | ||
| 説明 販売組織は、商品やサービスの販売・流通を担当する単位を表す、SAPの主要な組織構造要素です。返品取引にも割り当てられます。 この属性により、異なる事業部門、地域、部門間で返品プロセスを絞り込み、比較できます。販売組織ごとの返品率や返品処理の効率を確認し、組織パフォーマンスの分析に役立てられます。 重要な理由 異なる事業部門、地域、販売チャネル間で、返品プロセスのパフォーマンスと発生率を比較できます。 入手先 返品受注ヘッダーテーブル(VBAK)の販売組織フィールド(VKORG)にあります。 例 10002100US01 | |||
| 返品ポリシーID ReturnPolicyId | この返品ケースに適用される返品ポリシーの識別子です。 | ||
| 説明 取引に適用される具体的な返品ポリシーまたはルールの組み合わせを示します。ポリシーは、商品種別、顧客セグメント、購入からの経過期間などによって異なる場合があります。 「返品ポリシー遵守状況」には欠かせないデータです。各ケースをポリシーに関連付けることで、返品期限や商品の状態要件などのルールへの準拠を自動的に確認し、逸脱を分析できます。 重要な理由 業務ルールに基づくコンプライアンスチェックを自動化し、返品が一貫した方法でポリシーに従って処理されるよう支援します。 入手先 標準SAPフィールドではないことが多く、商品種別、顧客、販売日などのデータを使った業務ロジックに基づいて導出する必要があります。実装されている場合は、カスタムフィールドに保存されることがあります。 例 STD-30DAYELEC-90DAY-WARRANTYFINAL-SALE-DEFECT | |||
| 返品ポリシーの遵守 ReturnPolicyAdherence | 返品ケースが定義された返品ポリシーに準拠しているかを示すフラグです。 | ||
| 説明 適用される返品ポリシーの基準を満たしているかを示す、計算されたブール型属性です。たとえば、許可された期間内に返品が開始されたか、返品理由が商品に対して有効かを確認します。 「返品ポリシー遵守状況」ダッシュボードを直接支援します。遵守率を数値化し、非準拠ケースを掘り下げて逸脱理由を確認できるため、ポリシーをより効果的に徹底できます。 重要な理由 業務ルールへの準拠状況を数値化し、収益性に影響したりプロセス上の例外を生じさせたりするポリシー違反の特定と削減に役立ちます。 入手先 業務ルールに基づいて計算します。たとえば、(返品開始日-元の購入日)<=[返品可能日数]です。元の購入日とポリシールールが必要です。 例 truefalse | |||
| 返品受注ステータス ReturnOrderStatus | 返品ケース全体の現在のステータスです。 | ||
| 説明 「オープン」、「処理中」、「クローズ済み」など、任意の時点における返品ケースの概要ステータスを示します。通常は、最後に完了した主要な節目から導出される集約ステータスです。 「現在の返品ケースステータスダッシュボード」に欠かせない情報です。現在の業務量とケース分布を把握し、各プロセス段階に何件のケースがあるかを確認できるため、リソース配分と業務量の管理に役立ちます。 重要な理由 各ケースがプロセスのどの段階にあるかを把握できます。現在の業務量とステータスを追跡する運用ダッシュボードに欠かせません。 入手先 関連する伝票のステータスフィールドから導出されます。たとえば、関連する販売受注(VBUK/VBUP)または納入伝票のヘッダーステータス(GBSTK)や明細ステータス(LFSTK)から取得します。 例 入荷待ち検査待ち返金待ちクローズ | |||
| 返品納入番号 ReturnDeliveryNumber | 返品納入伝票を識別する一意のIDです。 | ||
| 説明 顧客から商品が物理的に返品されると、入荷物流を管理するためにSAPで返品納入伝票が作成されます。この属性は、その伝票の一意の番号です。 返品商品の物理的な移動を追跡するために重要です。返品における財務面と物流面を結び付け、入庫や検査の段階を詳細に分析できます。 重要な理由 返品受注と商品の物理的な受領を結ぶ重要な情報です。物流や倉庫処理の所要時間を分析するために欠かせません。 入手先 納入ヘッダーテーブル(LIKP)の納入伝票番号(VBELN)です。伝票カテゴリによって返品納入であることが示されます。 例 840000128400001384000014 | |||
| 返金SLA目標日 RefundSlaTargetDate | 返品ケースの返金処理を完了すべき目標日です。 | ||
| 説明 返金処理に関するサービスレベル契約(SLA)の期限を定義します。通常は、返品承認日や商品の受領日から一定の日数を加算するなど、業務ルールに基づいて計算されます。 「返金SLA遵守状況モニタリング」ダッシュボードと関連KPIの基準となるフィールドです。SLA違反のリスクがあるケースを先回りして追跡し、遅延の根本原因を分析することで、顧客満足度の向上に役立ちます。 重要な理由 SLA遵守状況を測定する基準となり、パフォーマンスの監視、長期化したケースの優先順位付け、顧客満足度の向上に役立ちます。 入手先 ほぼ常に導出フィールドです。返品依頼の作成日などの基準日に、業務ルールで定義された期間を加算して算出します。顧客種別や返品理由などの要因によって期間が異なる場合があります。 例 2023-11-10T23:59:59Z2023-11-15T23:59:59Z2023-11-20T23:59:59Z | |||
| 返金SLA遵守 RefundSlaAdherence | 返金がサービスレベル合意(SLA)の目標期間内に処理されたかどうかを示すフラグです。 | ||
| 説明 この計算属性は、「返金処理済み」アクティビティが「返金SLA目標日」以前に発生したかどうかを確認します。ケースごとのSLAコンプライアンスを、trueまたはfalseで示します。 「返金SLA遵守モニタリング」ダッシュボードと「返金SLA遵守率」KPIの中核となる指標です。顧客との約束に対する実績を測定し、期待を満たせなかったケースを特定できます。これにより、遅延の根本原因を分析できます。 重要な理由 顧客向けの約束に対する実績を直接測定するため、サービス品質と顧客満足度を示す重要な指標です。 入手先 各ケースについて、「返金処理済み」アクティビティのEventTimeと「RefundSlaTargetDate」を比較して計算します。 例 truefalse | |||
| 返金依頼額 RequestedRefundAmount | プロセス開始時に依頼または想定された返金額です。 | ||
| 説明 初回の返品依頼に基づく返品商品の金額を記録します。最終的な返金額と比較する基準値になります。 「返金額差異分析」ダッシュボードに必要なフィールドです。依頼額と実際の返金額を比較することで、商品の破損、再入庫手数料、その他の調整による一部返金などの問題を特定し、財務の正確性と透明性を確保できます。 重要な理由 返金の正確性を測定する基準となり、想定額と実際の返金額の差異を特定・分析できます。 入手先 通常は、初回の返品販売受注に含まれる商品の正味額から取得されます。VBAPテーブルの該当明細にある正味額(NETWR)が使用されます。 例 125.501050.0049.99 | |||
返品・返金処理のアクティビティ
| アクティビティ | 説明 | ||
|---|---|---|---|
| クレジットメモ作成 | 返品された商品の代金を顧客の勘定に計上する正式な請求伝票が作成されます。クレジットメモ依頼からクレジットメモが生成された時点で、明示的なイベントとして記録されます。 | ||
| 重要な理由 クレジットメモの作成は、財務上の重要な節目です。返金額を確定し、支払い処理の開始を承認します。 入手先 クレジットメモを示す伝票カテゴリを持つ請求伝票が、テーブルVBRKに作成されたことから取得されます。これは、テーブルVBFAでクレジットメモ依頼と関連付けられます。 取得 新しいクレジットメモ請求伝票を保存すると、イベントが記録されます(例:トランザクションVF01の使用時)。 イベントタイプ explicit | |||
| クレジットメモ依頼作成 | 検査が正常に完了すると、このアクティビティによって顧客へのクレジット発行依頼の作成が記録されます。元の返品受注を参照する新しい販売伝票であるクレジットメモ依頼として記録されます。 | ||
| 重要な理由 返品プロセスにおける財務決済の開始点です。検査からこのステップまでの時間を分析することで、物流部門から財務部門への引き継ぎの効率を把握できます。 入手先 クレジットメモ依頼を示す伝票カテゴリを持つ販売伝票が、テーブルVBAKに作成されたことから取得されます。返品との関連付けは、伝票フローテーブルVBFAで管理されます。 取得 新しいクレジットメモ依頼伝票を保存すると、イベントが記録されます。 イベントタイプ explicit | |||
| 倉庫で商品を受領 | 返品商品が倉庫または処理センターに物理的に到着したことを示すイベントです。返品納入伝票に対して入庫転記(PGR)が実行され、品目伝票が作成されると、明示的に記録されます。 | ||
| 重要な理由 検査と処分方法の決定にかかる時間の起点となる重要な節目です。この時点までの遅延は顧客側の要因によるものですが、それ以降の遅延は社内要因によるものです。 入手先 返品に関連する入庫移動タイプについて、品目伝票テーブルMSEGおよびMKPFから取得します。転記日はMKPF-BUDATで示されます。 取得 返品納入伝票に対する入庫の転記に対応するイベントです。 イベントタイプ explicit | |||
| 商品の検査を完了 | 返品商品の品質と状態の評価が完了したことを示します。Advanced Returns Managementでは、検査結果を記録し、返金や廃棄などの次の処理を決定する明示的な手順であることが多いです。 | ||
| 重要な理由 検査にかかる時間と結果は、返金処理の所要時間と在庫管理に直接影響します。このアクティビティは、検査の効率と手戻りを分析するうえで重要です。 入手先 SAP Advanced Returns Management(ARM)では、検査トランザクションから明示的なイベントとして取得できます。また、検査結果を示す返品注文明細のステータス変更から判断することもできます。 取得 ARMにおける物流上の後続アクティビティに関するトランザクションログまたはステータス変更から取得します。 イベントタイプ explicit | |||
| 返品ケース完了 | 返品プロセスが完了し、ケースに対する追加対応が不要になったことを示す最終アクティビティです。通常は、返品受注伝票がシステム上で最終的な完了またはクローズ済みステータスになったことから推定されます。 | ||
| 重要な理由 このイベントにより、プロセスライフサイクルの終了が定義され、エンドツーエンドの総サイクル時間を計算できます。ケースが完全に解決されたことを確認できます。 入手先 テーブルVBAKの返品受注全体のステータス、またはVBAPの明細が「完了」または「クローズ済み」になったことから推定されます。判定は、システムのステータス管理設定に基づきます。 取得 返品受注伝票のステータスが「完了」に変更されたことから推定されます。 イベントタイプ inferred | |||
| 返品申請を開始 | 返品プロセスの開始点であり、システム上で返品注文が正式に作成される段階です。SAP S/4HANAで返品注文タイプの新しい販売伝票を保存すると、このイベントが明示的に記録されます。 | ||
| 重要な理由 このアクティビティは、返品ケースのライフサイクルが正式に始まったことを示します。このイベントから完了までの時間を分析することは、返品サイクル全体の所要時間と顧客体験を測定するうえで重要です。 入手先 VBAKテーブルで販売伝票が作成された際に記録される明示的なイベントです。伝票カテゴリ(VBAK-VBTYP)が返品注文を示し、作成日時はVBAK-ERDATです。 取得 新しい返品販売注文を保存した時点でイベントが記録されます(例:トランザクションVA01の使用)。 イベントタイプ explicit | |||
| 返金処理完了 | 返金プロセスの最終ステップです。財務上のクレジットが消し込まれ、顧客への支払いが完了したことを示します。財務モジュールで、顧客勘定の未消込クレジットを決済する消込伝票が作成されたことから推定されます。 | ||
| 重要な理由 顧客への実際の支払いが行われる時点です。返品の開始からこのステップに到達するまでの時間は、顧客満足度を大きく左右し、SLA遵守状況の測定にも欠かせません。 入手先 財務会計の明細テーブルBSEGにある消込伝票情報から推定されます。クレジットメモに関連する顧客明細の消込日(BSEG-AUGDT)により、返金処理の日時を確認できます。 取得 クレジットメモに関連する会計伝票の消込日フィールドに値が設定されたことから推定されます。 イベントタイプ inferred | |||
| 交換受注作成 | このアクティビティは、返金ではなく、交換品を顧客に発送するための新しい販売受注を作成する代替対応を表します。元の返品を参照する新しい販売受注が作成された時点で記録されます。 | ||
| 重要な理由 このアクティビティにより、返金を伴う返品と交換を伴う返品を区別できます。両者ではプロセス経路と顧客への結果が異なるため、バリアント分析に欠かせません。 入手先 返品受注と伝票フローテーブル(VBFA)で関連付けられた、新しい販売伝票がVBAKに作成されたことから取得されます。 取得 交換品として指定された新しい販売受注伝票を保存すると、イベントが記録されます。 イベントタイプ explicit | |||
| 会計伝票作成 | クレジットメモが財務会計モジュールに正常に転記されると、このイベントが発生します。総勘定元帳に対応する明細が作成され、会計上もクレジットが正式に確定します。 | ||
| 重要な理由 このアクティビティにより、クレジットが財務システムに取り込まれたことを確認できます。クレジットメモの作成から会計転記までの時間を確認することで、請求から財務への連携における問題を把握できます。 入手先 会計テーブルBKPFに伝票ヘッダーが作成されたことから取得されます。この伝票ヘッダーは、VBRKのクレジットメモ(VBRK-BELNR)と関連付けられます。 取得 請求伝票が財務会計に正常に転記されると、イベントが記録されます。 イベントタイプ explicit | |||
| 返品を却下 | 返品商品が返品ポリシーの基準を満たさず、返金またはクレジットの申請が却下されたことを示します。通常は、検査後に返品注文明細へ特定のステータスまたは理由コードが設定されたことで記録されます。 | ||
| 重要な理由 却下を追跡することで、返品ポリシーへの準拠状況を分析し、却下の一般的な理由を特定できます。これは、プロセスにおける重要な例外経路です。 入手先 返品受注明細に却下理由(VBAP-ABGRU)が設定されたこと、またはAdvanced Returns Managementの検査プロセス中に特定のステータスが割り当てられたことから推定されます。 取得 返品伝票明細に却下理由または特定の「却下」ステータスが設定されたことから推定されます。 イベントタイプ inferred | |||
| 返品注文を承認 | 返品注文が正式に承認またはリリースされ、次の段階へ進める状態になったことを示します。通常は、販売伝票のヘッダーまたは明細のステータス変更から、ブロックが解除されたことを判断します。 | ||
| 重要な理由 承認手順は、大きな遅延要因になることがあります。このアクティビティを追跡することで、返品プロセスの初期承認段階にあるボトルネックを特定できます。 入手先 ステータス管理テーブル、またはVBAKやVBAPテーブル内のステータス項目から判断します。リリースステータスの変更や出荷ブロック(VBAP-LIFSP)の解除が、承認を示す場合があります。 取得 返品注文のヘッダーまたは明細のステータス項目が、リリースまたは承認を示す値に変更されたことから判断します。 イベントタイプ inferred | |||
| 返品納入伝票を作成 | 返品商品の物理的な受領を管理する入荷納入伝票が作成されたことを示すアクティビティです。返品注文を参照する納入伝票が作成されると、システムに明示的な作成イベントとして記録されます。 | ||
| 重要な理由 物流上の重要な節目です。返品承認から納入伝票作成までの時間を確認することで、返品情報を倉庫や受入部門へ伝達する効率を把握できます。 入手先 LIKPテーブルで納入伝票ヘッダーが作成された際に記録されます。直前の返品注文とは、伝票フローテーブルVBFAを介して関連付けられます。 取得 新しい返品納入伝票を保存した時点でイベントが記録されます(例:トランザクションVL01Nの使用)。 イベントタイプ explicit | |||
抽出ガイド
ステップ
- 前提条件の確認:抽出を実行するユーザーアカウントに、必要なCore Data Services(CDS)ViewへアクセスするためのSAP S/4HANA権限があることを確認します。主なViewには、I_SalesDocument、I_SalesDocumentItem、I_SDDocumentFlow、I_DeliveryDocument、I_MaterialDocumentHeader、I_BillingDocument、I_JournalEntry、I_ClearedItemがあります。
- クエリツールへのアクセス:SAP S/4HANAデータベースへの接続が確立されているSQLクライアントまたはデータ統合ツールにログインします。SAP Analytics CloudなどのSAP製ツールや、サードパーティのETLプラットフォームを利用できます。
- クエリパラメータの設定:実行前に、提供されたSQLクエリを変更する必要があります。プレースホルダーを見つけ、環境に合ったパラメータへ置き換えます。[開始日]、[終了日]、[使用するソースシステムID]、[使用する返品注文タイプ]、その他の伝票タイプや会社コードのフィルターを設定します。
- 抽出クエリの実行:SQLクエリ全体をコピーし、ツールで実行します。このクエリは、複数のSELECT文の結果をUNIONして、指定されたすべてのアクティビティを1つのデータセットにまとめます。
- クエリロジックの理解:UNION ALL構造内の各SELECTブロックは、特定の1つのアクティビティを抽出します。複数のCDS Viewを結合して必要な属性を収集し、ActivityNameに固定文字列を設定し、EventTimeに該当するタイムスタンプを選択します。
- 生のデータの確認:クエリの完了後、出力結果を簡単に確認します。行数が妥当であること、ReturnCaseId、ActivityName、EventTimeなどの主要列に想定どおり値が入っていることを確認します。
- データ変換:このクエリは、フラットなイベントログ形式で出力されるように構成されています。通常、大幅な構造変換は必要ありません。ただし、対象システムの要件に応じて、タイムスタンプの形式やデータ型の調整が必要になる場合があります。
- イベントログのエクスポート:クエリ結果をCSVファイルとしてエクスポートします。特にユーザー名や商品説明で文字化けが起きないよう、UTF-8エンコーディングを使用してください。
- プロセスマイニングツールへのアップロード:生成されたCSVファイルを、ProcessMindなどのプロセスマイニングプラットフォームへアップロードできる状態にします。ファイルの列をツールの対応フィールドにマッピングします。たとえば、ReturnCaseIdをCase IDに、ActivityNameをActivityに、EventTimeをTimestampに割り当てます。
設定
- 前提条件:実行ユーザーには、販売伝票(VBAK)、納入(LIKP)、請求(VBRK)、会計(BSEG、BKPF)に関連するオブジェクトの表示権限が必要です。基盤となるCDS Viewへのアクセスも欠かせません。
- データ範囲のフィルター:返品プロセスを分離するため、特定の伝票タイプでクエリをフィルターすることが重要です。返品注文タイプ(例:'RE')、クレジットメモ依頼タイプ(例:'G2')、交換注文タイプ(例:'SO')のプレースホルダーを設定します。データ範囲を限定するため、CompanyCodeまたはSalesOrganizationによるフィルターも強く推奨します。
- 日付範囲のフィルター:性能とデータ量を管理するため、必ず日付範囲フィルターを適用してください。まずは直近3~6か月のデータから始めます。クエリでは、最初の返品注文の作成日(I_SalesDocument.CreationDate)を主なフィルター条件として使用します。
- 性能に関する考慮事項:複数の大規模なCDS Viewを結合する詳細なクエリです。ソースのS/4HANAシステムに大きな負荷がかかる可能性があります。影響を抑えるため、業務のピーク時間外に抽出をスケジュールしてください。非常に大規模なデータセットでは、増分ロード方式を検討してください。
a サンプルクエリ sql
WITH ReturnOrders AS (
SELECT
SalesDocument AS ReturnCaseId,
CreationDate,
CreationDateTime,
CreatedByUser,
OrderReason,
SoldToParty
FROM I_SalesDocument
WHERE SalesDocumentType = '[Your Return Order Type]' -- e.g., 'RE'
AND CreationDate BETWEEN '[Start Date]' AND '[End Date]'
AND CompanyCode = '[Your Company Code]'
)
-- 1. Return Request Initiated
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Return Request Initiated' AS "ActivityName",
RO.CreationDateTime AS "EventTime",
RO.CreationDateTime AS "EventEndTime",
RO.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM ReturnOrders RO
JOIN I_SalesDocumentItem I ON RO.ReturnCaseId = I.SalesDocument
UNION ALL
-- 2. Return Order Approved
SELECT
SD.SalesDocument AS "ReturnCaseId",
'Return Order Approved' AS "ActivityName",
SD.LastChangeDateTime AS "EventTime",
SD.LastChangeDateTime AS "EventEndTime",
SD.LastChangedByUser AS "UserName",
SD.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
SD.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocument AS SD
JOIN ReturnOrders RO ON SD.SalesDocument = RO.ReturnCaseId
JOIN I_SalesDocumentItem I ON SD.SalesDocument = I.SalesDocument
WHERE SD.OverallSDProcessStatus <> 'A' -- Not Open, implying it has been processed/approved
AND I.SDProcessStatus <> 'A'
UNION ALL
-- 3. Return Delivery Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Return Delivery Created' AS "ActivityName",
LH.CreationDateTime AS "EventTime",
LH.CreationDateTime AS "EventEndTime",
LH.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
LI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_DeliveryDocument AS LH ON DF.SubsequentDocument = LH.DeliveryDocument
JOIN I_DeliveryDocumentItem AS LI ON LH.DeliveryDocument = LI.DeliveryDocument
WHERE DF.PrecedingDocumentCategory = 'C' AND DF.SubsequentDocumentCategory = 'J'
UNION ALL
-- 4. Goods Received at Warehouse
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Goods Received at Warehouse' AS "ActivityName",
MH.CreationDateTime AS "EventTime",
MH.CreationDateTime AS "EventEndTime",
MH.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
MI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_DeliveryDocumentItem AS LI ON DF.SubsequentDocument = LI.DeliveryDocument AND DF.SubsequentDocumentItem = LI.DeliveryDocumentItem
JOIN I_MaterialDocumentItem AS MI ON LI.DeliveryDocument = MI.DeliveryDocument AND LI.DeliveryDocumentItem = MI.DeliveryDocumentItem
JOIN I_MaterialDocumentHeader AS MH ON MI.MaterialDocument = MH.MaterialDocument AND MI.MaterialDocumentYear = MH.MaterialDocumentYear
WHERE DF.SubsequentDocumentCategory = 'J' AND MH.GoodsMovementType = '[Your Return Goods Receipt MVT]' -- e.g., '651', '653'
UNION ALL
-- 5. Item Inspection Completed
SELECT
SDI.SalesDocument AS "ReturnCaseId",
'Item Inspection Completed' AS "ActivityName",
SDI.LastChangeDateTime AS "EventTime",
SDI.LastChangeDateTime AS "EventEndTime",
SDI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
SDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocumentItem AS SDI
JOIN ReturnOrders RO ON SDI.SalesDocument = RO.ReturnCaseId
WHERE SDI.ReturnsInspectionStatus = '4' -- 'Inspection Completed', adjust value based on your config
UNION ALL
-- 6. Return Rejected
SELECT
SDI.SalesDocument AS "ReturnCaseId",
'Return Rejected' AS "ActivityName",
SDI.LastChangeDateTime AS "EventTime",
SDI.LastChangeDateTime AS "EventEndTime",
SDI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
SDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocumentItem AS SDI
JOIN ReturnOrders RO ON SDI.SalesDocument = RO.ReturnCaseId
WHERE SDI.SalesDocumentItemRejectionReason <> ''
UNION ALL
-- 7. Credit Memo Request Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Credit Memo Request Created' AS "ActivityName",
CM_REQ.CreationDateTime AS "EventTime",
CM_REQ.CreationDateTime AS "EventEndTime",
CM_REQ.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_SalesDocument AS CM_REQ ON DF.SubsequentDocument = CM_REQ.SalesDocument
JOIN I_SalesDocumentItem I ON CM_REQ.SalesDocument = I.SalesDocument
WHERE CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]' -- e.g., 'CR'
UNION ALL
-- 8. Exchange Order Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Exchange Order Created' AS "ActivityName",
EX_ORD.CreationDateTime AS "EventTime",
EX_ORD.CreationDateTime AS "EventEndTime",
EX_ORD.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_SalesDocument AS EX_ORD ON DF.SubsequentDocument = EX_ORD.SalesDocument
JOIN I_SalesDocumentItem I ON EX_ORD.SalesDocument = I.SalesDocument
WHERE EX_ORD.SalesDocumentType = '[Your Exchange Order Type]' -- e.g., 'OR'
UNION ALL
-- 9. Credit Memo Created
SELECT
DF_CM.PrecedingDocument AS "ReturnCaseId",
'Credit Memo Created' AS "ActivityName",
BD.CreationDateTime AS "EventTime",
BD.CreationDateTime AS "EventEndTime",
BD.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
BD.TotalNetAmount AS "RefundAmount",
BDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN I_SalesDocument AS CM_REQ ON DF.SubsequentDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow AS DF_CM ON CM_REQ.SalesDocument = DF_CM.PrecedingDocument
JOIN I_BillingDocument AS BD ON DF_CM.SubsequentDocument = BD.BillingDocument
JOIN I_BillingDocumentItem AS BDI ON BD.BillingDocument = BDI.BillingDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE DF.PrecedingDocumentCategory = 'C'
UNION ALL
-- 10. Accounting Document Created
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Accounting Document Created' AS "ActivityName",
JE.CreationDateTime AS "EventTime",
JE.CreationDateTime AS "EventEndTime",
JE.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
JE.AmountInCompanyCodeCurrency AS "RefundAmount",
JRI.ProductName AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_JournalEntry AS JE
JOIN I_JournalEntryItem JRI ON JE.AccountingDocument = JRI.AccountingDocument
JOIN I_BillingDocument BD ON JE.ReferenceDocument = BD.BillingDocument
JOIN I_SDDocumentFlow DF_CM ON BD.BillingDocument = DF_CM.SubsequentDocument
JOIN I_SalesDocument CM_REQ ON DF_CM.PrecedingDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow DF ON CM_REQ.SalesDocument = DF.SubsequentDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE JE.OriginalReferenceDocumentType = 'VBRK'
UNION ALL
-- 11. Refund Processed
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Refund Processed' AS "ActivityName",
CI.ClearingDate AS "EventTime",
CI.ClearingDate AS "EventEndTime",
CI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CI.AmountInCompanyCodeCurrency AS "RefundAmount",
JRI.ProductName AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_ClearedItem AS CI
JOIN I_JournalEntryItem JRI ON CI.AccountingDocument = JRI.AccountingDocument AND CI.FiscalYear = JRI.FiscalYear AND CI.LedgerGLLineItem = JRI.LedgerGLLineItem
JOIN I_JournalEntry JE ON JRI.AccountingDocument = JE.AccountingDocument
JOIN I_BillingDocument BD ON JE.ReferenceDocument = BD.BillingDocument
JOIN I_SDDocumentFlow DF_CM ON BD.BillingDocument = DF_CM.SubsequentDocument
JOIN I_SalesDocument CM_REQ ON DF_CM.PrecedingDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow DF ON CM_REQ.SalesDocument = DF.SubsequentDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE JE.OriginalReferenceDocumentType = 'VBRK' AND CI.ClearingDate IS NOT NULL
UNION ALL
-- 12. Return Case Closed
SELECT
SD.SalesDocument AS "ReturnCaseId",
'Return Case Closed' AS "ActivityName",
SD.LastChangeDateTime AS "EventTime",
SD.LastChangeDateTime AS "EventEndTime",
SD.LastChangedByUser AS "UserName",
SD.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
SD.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocument AS SD
JOIN ReturnOrders RO ON SD.SalesDocument = RO.ReturnCaseId
JOIN I_SalesDocumentItem I ON SD.SalesDocument = I.SalesDocument
WHERE SD.OverallSDProcessStatus = 'C' -- 'Completed' ステップ
- 関連する販売、納入、請求、品目伝票、検品、ステータス、会計データを含むSAP HANAスキーマへの直接読み取りアクセスが利用できることを確認します。正確なスキーマ、View、フィールド名はSAP S/4HANAの導入環境によって異なるため、角括弧で示された各プレースホルダーを、システムで設定されたオブジェクトとフィールドに置き換えます。
- [開始日]、[終了日]、[会社コードフィルター]、[返品伝票タイプフィルター]を使って抽出範囲を定義します。最初は3~6か月の期間で抽出し、性能と完全性を確認してから期間を延長します。
- [使用する販売伝票ヘッダーテーブル]と[使用する販売伝票明細テーブル]から返品注文の対象データを特定します。[使用する返品注文伝票タイプ設定]で設定された返品注文伝票タイプに限定します。後続伝票との主要な紐付け情報として、返品注文番号と明細番号を保持します。
- [使用する伝票フローテーブルまたはView]を使い、返品注文から返品入荷、クレジットメモ依頼、交換注文、クレジットメモまでの伝票フローを解決します。伝票フローがVBAKまたはVBAPに保存されているとは限りません。システムで使用する伝票フローモデルに合わせて、関連フィールドを設定します。
- 関連する伝票ヘッダーと明細レコードから、明示的な作成イベントを抽出します。承認、却下、検品、クローズ、入庫、会計、消込のイベントは、設定されたステータス、検品、品目伝票、会計、消込のデータソースから抽出します。ProcessMindはイベントを推測しないため、各アクティビティを個別のイベント行として出力する必要があります。
- タイムスタンプを一貫したデータベースのタイムスタンプ型とタイムゾーンに正規化します。各アクティビティに設定されたイベントタイムスタンプの優先順位を使用します。日付と時刻しかない場合は、[使用するシステムタイムゾーン]に設定されたシステムタイムゾーンを使って結合します。
- すべてのイベントにReturnCaseIdを設定します。元の返品注文番号、またはAdvanced Returns Managementで別のケースキーが保存されている場合は、設定された返品ケース識別子を使用します。返品ケースに紐付けられないイベントは除外するか、修正用の例外出力に分けます。
- 必須列ReturnCaseId、ActivityName、EventTime、SourceSystemId、LastDataUpdateTimestampを設定します。利用できる場合は、EventEndTime、UserName、ReturnReason、RefundAmount、ProductId、CustomerIdなどの推奨列も設定します。アクティビティの発生1回につき1行とし、アクティビティを1つのケース行に集約しないでください。
- validationStepsのチェックを使って結果を検証します。12個すべてのアクティビティ名が存在すること、各ケース内のタイムスタンプが妥当な順序になっていること、伝票参照がソーステーブルと一致することを確認します。
- 結果をUTF-8のCSV、またはProcessMindが対応する別の表形式でエクスポートします。列名は正確に保持し、ヘッダー行は1行にします。タイムスタンプは曖昧さのないISO形式で保持し、ReturnCaseIdをケース識別子、ActivityNameをアクティビティ列として設定したイベントログをアップロードします。
設定
- 日付範囲:まずは3~6か月から始めます。[開始日]と[終了日]のパラメータを使い、選択期間より前に開始され、期間内に完了したケースも含められるだけの履歴を取得します。
- 返品対象:[使用する返品注文伝票タイプ設定]で設定された返品注文伝票タイプでフィルターします。対象システムで確認していない伝票タイプをハードコードしないでください。
- 組織フィルター:必要な場合に限り、[会社コードフィルター]、販売組織、流通チャネル、部門、プラント、顧客のフィルターを適用します。会社間取引や組織間取引の後続伝票がフィルターで除外されないことを確認します。
- ソースオブジェクト:[使用するテーブル名]と[使用するView名]のプレースホルダーを、承認済みのSAP S/4HANAテーブルまたはCDS Viewに置き換えます。導入環境によってはVBAK、VBAP、VBRK、VBRPを利用できますが、使用可否と拡張内容を実行前に確認してください。
- タイムスタンプの処理:各アクティビティのソースタイムスタンプフィールドとタイムゾーンを設定します。EventTimeとEventEndTimeは一貫した形式で保存し、できればUTCまたは合意済みのProcessMindタイムゾーンを使用します。
- ステータスの解釈:承認、却下、検品完了、ケースクローズを表す正確なステータス値、理由コード、検品結果、クローズ指標をシステムに合わせて設定します。
- ソースシステム識別子:[ソースシステム識別子]を、抽出プラットフォームで使用するSAPシステム識別子など、安定した値に置き換えます。
- 更新タイムスタンプ:[抽出タイムスタンプ]を、クエリの実行開始時刻またはソーススナップショットの作成時刻に置き換えます。行単位の更新タイムスタンプが必要な場合を除き、1回の抽出実行ではすべての行に同じ値を使用します。
- 性能:大規模な伝票フロー、会計、品目伝票、ステータスのデータソースを結合する前に、返品対象を絞り込みます。インデックス付きフィールドやパーティションプルーニングが可能なフィールドを使用し、無制限の全件スキャンを避けます。中間結果のマテリアライズは、データベース管理者の承認を得た場合に限って行います。
- 増分抽出:定期実行では、[前回の正常な抽出タイムスタンプ]と管理された重複期間を使い、遅れて更新されたデータを取得します。ReturnCaseId、ActivityName、ソース伝票キー、EventTimeを使って重複を排除します。
- 権限と前提条件:設定したすべてのソースオブジェクトとフィールドへの読み取り権限、データベースへの直接アクセスの承認、必要なSAPコンポーネントとAdvanced Returns Management機能が該当する場合に有効であることの確認を取得します。
- データ保護:顧客情報と財務項目は必要最小限に限定し、組織のプライバシー管理に従って、エクスポートしたファイルを安全に保管します。
a サンプルクエリ sql
WITH
parameters AS (
SELECT
CAST('[Start date]' AS TIMESTAMP) AS start_ts,
CAST('[End date]' AS TIMESTAMP) AS end_ts,
CAST('[Extraction timestamp]' AS TIMESTAMP) AS extraction_ts,
CAST('[Source system identifier]' AS NVARCHAR(100)) AS source_system_id
FROM DUMMY
),
return_orders AS (
SELECT
h.[Return order number] AS return_case_id,
i.[Return order item number] AS return_item_id,
h.[Return order creation timestamp] AS return_created_ts,
h.[Return order creator] AS return_creator,
h.[Customer number] AS customer_id,
i.[Product number] AS product_id,
i.[Return reason] AS return_reason,
i.[Return order quantity] AS return_quantity,
h.[Company code] AS company_code,
h.[Return order document type] AS return_document_type
FROM [Your sales document header table] h
INNER JOIN [Your sales document item table] i
ON h.[Sales document number] = i.[Sales document number]
CROSS JOIN parameters p
WHERE h.[Return order creation timestamp] >= p.start_ts
AND h.[Return order creation timestamp] < p.end_ts
AND h.[Return order document type] IN ([Your return order document type filter])
AND h.[Company code] IN ([Company Code filter])
),
document_flow AS (
SELECT
ro.return_case_id,
ro.return_item_id,
f.[Preceding document number] AS preceding_document_id,
f.[Preceding item number] AS preceding_item_id,
f.[Subsequent document number] AS subsequent_document_id,
f.[Subsequent item number] AS subsequent_item_id,
f.[Subsequent document category] AS subsequent_document_category,
f.[Document flow creation timestamp] AS flow_created_ts
FROM return_orders ro
LEFT JOIN [Your document flow table or view] f
ON f.[Preceding document number] = ro.return_case_id
AND f.[Preceding item number] = ro.return_item_id
),
return_delivery AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS delivery_id,
df.subsequent_item_id AS delivery_item_id,
d.[Delivery creation timestamp] AS delivery_created_ts,
d.[Delivery creator] AS delivery_creator,
d.[Delivery completion timestamp] AS delivery_completed_ts
FROM document_flow df
INNER JOIN [Your delivery header table] d
ON d.[Delivery number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Inbound delivery document category]'
),
credit_memo_requests AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS credit_memo_request_id,
df.subsequent_item_id AS credit_memo_request_item_id,
c.[Credit memo request creation timestamp] AS request_created_ts,
c.[Credit memo request creator] AS request_creator
FROM document_flow df
INNER JOIN [Your credit memo request header table] c
ON c.[Credit memo request number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Credit memo request document category]'
),
exchange_orders AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS exchange_order_id,
df.subsequent_item_id AS exchange_order_item_id,
e.[Exchange order creation timestamp] AS exchange_created_ts,
e.[Exchange order creator] AS exchange_creator
FROM document_flow df
INNER JOIN [Your exchange order header table] e
ON e.[Exchange order number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Exchange order document category]'
),
credit_memos AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS credit_memo_id,
df.subsequent_item_id AS credit_memo_item_id,
b.[Credit memo creation timestamp] AS credit_memo_created_ts,
b.[Credit memo creator] AS credit_memo_creator,
b.[Credit memo amount] AS refund_amount,
b.[Accounting document number] AS accounting_document_id,
b.[Company code] AS billing_company_code
FROM document_flow df
INNER JOIN [Your billing document header table] b
ON b.[Billing document number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Credit memo document category]'
),
approval_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
s.[Approval timestamp] AS event_ts,
s.[Approval user] AS user_name
FROM return_orders ro
INNER JOIN [Your return status table or view] s
ON s.[Return order number] = ro.return_case_id
AND s.[Return order item number] = ro.return_item_id
WHERE s.[Status code] IN ([Your approved or released status values])
),
inspection_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
q.[Inspection completion timestamp] AS event_ts,
q.[Inspection user] AS user_name
FROM return_orders ro
INNER JOIN [Your return inspection table or view] q
ON q.[Return order number] = ro.return_case_id
AND q.[Return order item number] = ro.return_item_id
WHERE q.[Inspection status] IN ([Your completed inspection status values])
),
rejection_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
q.[Rejection timestamp] AS event_ts,
q.[Rejection user] AS user_name
FROM return_orders ro
INNER JOIN [Your return inspection table or view] q
ON q.[Return order number] = ro.return_case_id
AND q.[Return order item number] = ro.return_item_id
WHERE q.[Inspection outcome or rejection code] IN ([Your rejection reason values])
),
goods_receipt_events AS (
SELECT
rd.return_case_id,
rd.return_item_id,
m.[Goods receipt posting timestamp] AS event_ts,
m.[Goods receipt posting user] AS user_name
FROM return_delivery rd
INNER JOIN [Your material document header table] m
ON m.[Reference delivery number] = rd.delivery_id
INNER JOIN [Your material document item table] mi
ON mi.[Material document number] = m.[Material document number]
AND mi.[Material document item number] = [Your material document item linkage]
WHERE m.[Goods movement type] IN ([Your goods receipt movement type values])
),
accounting_events AS (
SELECT
cm.return_case_id,
cm.return_item_id,
a.[Accounting posting timestamp] AS event_ts,
a.[Accounting user] AS user_name
FROM credit_memos cm
INNER JOIN [Your accounting document header table] a
ON a.[Accounting document number] = cm.accounting_document_id
AND a.[Company code] = cm.billing_company_code
WHERE a.[Accounting document status] IN ([Your posted accounting status values])
),
refund_events AS (
SELECT
cm.return_case_id,
cm.return_item_id,
cl.[Clearing timestamp] AS event_ts,
cl.[Clearing user] AS user_name
FROM credit_memos cm
INNER JOIN [Your customer clearing table or view] cl
ON cl.[Cleared accounting document number] = cm.accounting_document_id
WHERE cl.[Clearing status] IN ([Your completed clearing status values])
),
closure_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
s.[Closure timestamp] AS event_ts,
s.[Closure user] AS user_name
FROM return_orders ro
INNER JOIN [Your return status table or view] s
ON s.[Return order number] = ro.return_case_id
AND s.[Return order item number] = ro.return_item_id
WHERE s.[Status code] IN ([Your final closed status values])
),
events AS (
SELECT ro.return_case_id, ro.return_item_id, 'Return Request Initiated' AS activity_name, ro.return_created_ts AS event_time, CAST(NULL AS TIMESTAMP) AS event_end_time, ro.return_creator AS user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)) AS refund_amount, ro.product_id, ro.customer_id FROM return_orders ro
UNION ALL
SELECT ae.return_case_id, ae.return_item_id, 'Return Order Approved', ae.event_ts, CAST(NULL AS TIMESTAMP), ae.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM approval_events ae INNER JOIN return_orders ro ON ro.return_case_id = ae.return_case_id AND ro.return_item_id = ae.return_item_id
UNION ALL
SELECT rd.return_case_id, rd.return_item_id, 'Return Delivery Created', rd.delivery_created_ts, rd.delivery_completed_ts, rd.delivery_creator, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM return_delivery rd INNER JOIN return_orders ro ON ro.return_case_id = rd.return_case_id AND ro.return_item_id = rd.return_item_id
UNION ALL
SELECT gr.return_case_id, gr.return_item_id, 'Goods Received at Warehouse', gr.event_ts, CAST(NULL AS TIMESTAMP), gr.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM goods_receipt_events gr INNER JOIN return_orders ro ON ro.return_case_id = gr.return_case_id AND ro.return_item_id = gr.return_item_id
UNION ALL
SELECT ie.return_case_id, ie.return_item_id, 'Item Inspection Completed', ie.event_ts, CAST(NULL AS TIMESTAMP), ie.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM inspection_events ie INNER JOIN return_orders ro ON ro.return_case_id = ie.return_case_id AND ro.return_item_id = ie.return_item_id
UNION ALL
SELECT re.return_case_id, re.return_item_id, 'Return Rejected', re.event_ts, CAST(NULL AS TIMESTAMP), re.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM rejection_events re INNER JOIN return_orders ro ON ro.return_case_id = re.return_case_id AND ro.return_item_id = re.return_item_id
UNION ALL
SELECT cr.return_case_id, cr.return_item_id, 'Credit Memo Request Created', cr.request_created_ts, CAST(NULL AS TIMESTAMP), cr.request_creator, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM credit_memo_requests cr INNER JOIN return_orders ro ON ro.return_case_id = cr.return_case_id AND ro.return_item_id = cr.return_item_id
UNION ALL
SELECT eo.return_case_id, eo.return_item_id, 'Exchange Order Created', eo.exchange_created_ts, CAST(NULL AS TIMESTAMP), eo.exchange_creator, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM exchange_orders eo INNER JOIN return_orders ro ON ro.return_case_id = eo.return_case_id AND ro.return_item_id = eo.return_item_id
UNION ALL
SELECT cm.return_case_id, cm.return_item_id, 'Credit Memo Created', cm.credit_memo_created_ts, CAST(NULL AS TIMESTAMP), cm.credit_memo_creator, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM credit_memos cm INNER JOIN return_orders ro ON ro.return_case_id = cm.return_case_id AND ro.return_item_id = cm.return_item_id
UNION ALL
SELECT ac.return_case_id, ac.return_item_id, 'Accounting Document Created', ac.event_ts, CAST(NULL AS TIMESTAMP), ac.user_name, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM accounting_events ac INNER JOIN return_orders ro ON ro.return_case_id = ac.return_case_id AND ro.return_item_id = ac.return_item_id LEFT JOIN credit_memos cm ON cm.return_case_id = ac.return_case_id AND cm.return_item_id = ac.return_item_id
UNION ALL
SELECT rf.return_case_id, rf.return_item_id, 'Refund Processed', rf.event_ts, CAST(NULL AS TIMESTAMP), rf.user_name, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM refund_events rf INNER JOIN return_orders ro ON ro.return_case_id = rf.return_case_id AND ro.return_item_id = rf.return_item_id LEFT JOIN credit_memos cm ON cm.return_case_id = rf.return_case_id AND cm.return_item_id = rf.return_item_id
UNION ALL
SELECT ce.return_case_id, ce.return_item_id, 'Return Case Closed', ce.event_ts, CAST(NULL AS TIMESTAMP), ce.user_name, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM closure_events ce INNER JOIN return_orders ro ON ro.return_case_id = ce.return_case_id AND ro.return_item_id = ce.return_item_id LEFT JOIN credit_memos cm ON cm.return_case_id = ce.return_case_id AND cm.return_item_id = ce.return_item_id
)
SELECT
e.return_case_id AS "ReturnCaseId",
e.activity_name AS "ActivityName",
e.event_time AS "EventTime",
e.event_end_time AS "EventEndTime",
e.user_name AS "UserName",
e.return_reason AS "ReturnReason",
e.refund_amount AS "RefundAmount",
e.product_id AS "ProductId",
e.customer_id AS "CustomerId",
p.source_system_id AS "SourceSystemId",
p.extraction_ts AS "LastDataUpdateTimestamp"
FROM events e
CROSS JOIN parameters p
WHERE e.event_time IS NOT NULL
ORDER BY e.return_case_id, e.event_time, e.activity_name; 準備はできましたか?
このテンプレートにより、返品・返金処理データを抽出・分析するための基礎知識を身につけられます。今日からプロセスの継続的な改善に向けた取り組みを始めてください。
今すぐSAP S/4HANAの返品・返金処理を最適化
非効率を特定し、サイクルタイムを30%短縮して、顧客満足度を高めます。
クレジットカードは必要ありません。今日から最適化を始めてください。