買掛金支払い処理用データテンプレート
買掛金支払い処理用データテンプレート
- 財務分析に必要なプロセス固有の属性
- 支払い状況を追跡するための主要なアクティビティ
- Dynamics 365からデータを抽出する詳細手順
買掛金支払い処理の属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ Activity | 発生した特定のタスクまたはステータス変更です。 | ||
| 説明 この属性は、プロセスで実行されたイベントまたはステップを表します。たとえば、「Invoice Created」、「Invoice Approved」、「Payment Posted」などです。技術的な取引種別やワークフローのステータス変更を、読みやすい業務イベントに変換します。 Dynamics 365では、通常、テーブルへのレコード挿入(例: 重要な理由 プロセスフローとプロセスマップ上のイベント順序を定義します。 入手先 さまざまな取引テーブルとワークフロー履歴ログから導出 例 請求書作成請求書承認支払生成 | |||
| イベント時刻 EventTime | アクティビティが発生した時点のタイムスタンプです。 | ||
| 説明 この属性は、特定のアクティビティが発生した正確な日時を記録します。イベントを時系列に並べ、ステップ間の所要時間を計算するために使用します。 Dynamics 365では、照会するテーブルに応じて、通常は 重要な理由 サイクル時間やリードタイムの計算、ボトルネックの特定に欠かせません。 入手先 取引テーブルのシステムフィールドCreatedDateTimeまたはModifiedDateTime 例 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| 請求書番号 InvoiceNumber | 仕入先請求書に割り当てられた一意の識別子です。 | ||
| 説明 Invoice Numberは、このプロセスビューにおける確定的なケース識別子です。単一の仕入先請求書に関するすべてのイベントを一意にまとめ、受領から決済までの経過を詳細に分析できます。 Microsoft Dynamics 365では、通常、 重要な理由 分散した買掛金アクティビティを1つのプロセスインスタンスに結び付ける基本キーです。 入手先 テーブル:VendInvoiceJour、フィールド:InvoiceId 例 INV-2023-00198223344ACME-OCT-22 | |||
| ソースシステム SourceSystem | データの取得元となったシステムの名称です。 | ||
| 説明 プロセスデータを抽出したソフトウェアまたは環境を特定します。この場合は、Microsoft Dynamics 365のインスタンスを一貫して示します。 ERPや外部スキャンソリューションなど、複数のシステムからデータを統合する環境で特に役立ちます。 重要な理由 複数システムの分析におけるデータの系譜と追跡可能性を確保します。 入手先 抽出時にハードコードまたは設定 例 Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| 最終データ更新 LastDataUpdate | データが抽出または更新された時点のタイムスタンプです。 | ||
| 説明 分析に使用するデータの鮮度を示します。リアルタイムデータを見ているのか、過去の期間のスナップショットを見ているのかを把握できます。 通常、Dynamics 365自体のフィールドではなく、ETL(Extract、Transform、Load)プロセスによって生成されます。 重要な理由 ダッシュボードとKPIへの信頼を確立するうえで重要です。 入手先 抽出スクリプトによって生成 例 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| ユーザーID UserId | アクティビティを実行したユーザーの識別子です。 | ||
| 説明 請求書の承認や支払の転記など、特定のアクティビティを担当したシステムユーザーを識別します。D365の 「支払ブロックと滞留の分析」で、特定の担当者が他の担当者より多くブロックを発生させていないか確認するために使用します。 重要な理由 リソースの行動と職務分掌を分析できます。 入手先 取引テーブル/履歴テーブルのシステム項目CreatedBy/ModifiedBy 例 jdoeadminworkflow_sys | |||
| 仕入先勘定 VendorAccount | 仕入先に割り当てられた一意の勘定番号です。 | ||
| 説明 取引に関係する仕入先を一意に識別します。Dynamics 365では、 この属性は「仕入先関係の複雑性ビュー」の中心となり、仕入先ごとのパフォーマンスと滞留を分析できます。 重要な理由 仕入先別にプロセスパフォーマンスを分類して分析できます。 入手先 テーブル:VendInvoiceJour、フィールド:InvoiceAccountまたはOrderAccount 例 US-101V000452001 | |||
| 仕入先名 VendorName | 仕入先組織の名称です。 | ||
| 説明 仕入先の説明名です。D365では、仕入先アカウントがGlobal Address Book( 人が読みやすい名前を指定すると、「仕入先関係の複雑性ビュー」を利用しやすくなり、業務ユーザーもダッシュボードを確認しやすくなります。 重要な理由 仕入先勘定番号の背景情報を提供します。 入手先 テーブル:DirPartyTable(VendTable経由)、フィールド:Name 例 Contoso Office SupplyFabrikam ElectronicsLitware Inc. | |||
| 会社コード CompanyCode | 法人または子会社を識別するコードです。 | ||
| 説明 請求書が処理される組織内の法人を表します。Microsoft Dynamics 365では、 この属性は「エンドツーエンドのリードタイム分析」に欠かせません。異なる子会社や地域単位を比較できます。 重要な理由 異なる事業部門や国を比較して分析できます。 入手先 テーブル:VendInvoiceJour、フィールド:DataAreaId 例 USMFDEMFGBSI | |||
| 支払期日 DueDate | 請求書の支払期限です。 | ||
| 説明 違約金を避けるために支払いを完了すべき契約上の日付です。Dynamics 365では、請求書ヘッダーまたは取引レコードの 「期日どおりの支払率」KPIの主要な基準値であり、「買掛金プロセスの処理量とボリューム」ビューで作業の優先順位を決める際にも役立ちます。 重要な理由 期日どおりの支払パフォーマンスを測定する基準です。 入手先 テーブル:VendInvoiceJourまたはVendTrans、フィールド:DueDate 例 2023-11-302023-12-15 | |||
| 発注書番号 PurchaseOrderNumber | 関連する発注書の参照番号です。 | ||
| 説明 請求書を元の購買書類にリンクします。Dynamics 365では、 この属性は「PO照合と差異傾向」ダッシュボードを支援し、発注書に基づく請求書と、発注書のない請求書を区別できます。 重要な理由 調達から支払いまでの照合率を分析するうえで欠かせません。 入手先 テーブル:VendInvoiceJour、フィールド:PurchId 例 PO-000455000342PO-22-998 | |||
| 請求書日付 InvoiceDate | 請求書に記載された書類日付です。 | ||
| 説明 仕入先の請求書に印字された日付です。Dynamics 365では、 「エンドツーエンドのリードタイム分析」で、仕入先側から見たライフサイクル全体の期間を測定するために使用します。 重要な理由 請求書の経過期間の起点を定義します。 入手先 テーブル:VendInvoiceJour、フィールド:InvoiceDate 例 2023-10-012023-10-15 | |||
| 請求金額 InvoiceAmount | 請求書の合計金額です。 | ||
| 説明 取引通貨で表示した請求書の合計金額です。Dynamics 365では、請求書仕訳テーブル内の 「重複支払リスク検出」ダッシュボードで、金額と仕入先情報の関連付けに使用します。 重要な理由 支出規模と財務リスクを分析するうえで重要です。 入手先 テーブル:VendInvoiceJour、フィールド:InvoiceAmount 例 1500.00245.5010000.00 | |||
| 部門 Department | 費用を担当する部門です。 | ||
| 説明 社内部門を示す財務ディメンションです。Dynamics 365では、ディメンションは動的に保存されるため(多くの場合 この属性は「仕入先関係の複雑性ビュー」で、どの社内部門が買掛金処理を最も多く発生させているかを確認するために使用します。 重要な理由 組織単位でのドリルダウンと責任の分析を可能にします。 入手先 テーブル:VendInvoiceJour、フィールド:DefaultDimension(DimensionAttributeLevelValueビューが必要) 例 IT財務オペレーション | |||
| 伝票番号 VoucherNumber | 取引に関連付けられた元帳伝票番号です。 | ||
| 説明 会計仕訳を識別する総勘定元帳の内部IDです。Dynamics 365では、 技術的な項目ですが、「プロセス経路とコンプライアンス監査」では、照合のために仕訳を総勘定元帳まで追跡する際に役立ちます。 重要な理由 財務監査と照合に必要なキーです。 入手先 テーブル:VendInvoiceJour、フィールド:LedgerVoucher 例 VOU-10023INV-ACC-992 | |||
| 支払ブロック中かどうか IsPaymentBlocked | 請求書が現在、支払ブロックの対象になっているかを示すフラグです。 | ||
| 説明 請求書が保留中かどうかを示すブール値です。Dynamics 365では、通常、 「支払ブロックと処理停滞の分析」の中心となる項目であり、プロセスの中断箇所を明らかにします。 重要な理由 直ちに対応が必要な停滞箇所と手作業による介入を特定します。 入手先 テーブル:VendTrans、フィールド:Approved(反転)または専用のHoldフィールド 例 truefalse | |||
| 支払方法 PaymentMethod | 請求書の支払いに使用する方法(例:小切手、電信送金、EFT)。 | ||
| 説明 仕入先への資金の振込方法を定義します。Dynamics 365では、 この属性は、「支払実行リードタイム」ダッシュボードで、支払バッチの種類ごとの効率を評価するために使用します。 重要な理由 支払実行フェーズにおける差異の要因を説明します。 入手先 テーブル:VendInvoiceJour(PaymMode情報と結合)またはVendTrans 例 小切手ACH電信送金 | |||
| 支払条件 PaymentTerms | 合意した支払条件を表すコードです。 | ||
| 説明 支払期日と割引を決める設定コードです(例:Net30)。Dynamics 365では、 「サイクルタイム」と併せて分析し、プロセスの遅延によって合意した条件に違反していないかを確認します。 重要な理由 支払期日の計算に必要な背景情報を提供します。 入手先 テーブル:VendInvoiceJour、フィールド:PaymTermId 例 30日後払い10日以内2%割引、30日後払いCOD | |||
| 現金割引日 CashDiscountDate | 割引を受けるために支払いを完了すべき日付です。 | ||
| 説明 早期支払割引を受けるための期限です。Dynamics 365では、 この属性は「現金割引の取得実績」ダッシュボードで使用し、取り逃した節約機会を組織として定量化できます。 重要な理由 プロセスの財務効率KPIに直接影響します。 入手先 テーブル:VendInvoiceJourまたはVendTrans、フィールド:CashDiscDate 例 2023-10-102023-10-20 | |||
| 通貨 Currency | 請求書の通貨コードです。 | ||
| 説明 請求書の発行通貨を示すISOコードです。Dynamics 365では、 複数通貨の換算が必要な場合、「アクティビティ金額」マッピングで金額を標準化するために重要です。 重要な理由 財務数値を解釈するために必要な背景情報です。 入手先 テーブル:VendInvoiceJour、フィールド:CurrencyCode 例 USDEURGBP | |||
買掛金支払い処理のアクティビティ
| アクティビティ | 説明 | ||
|---|---|---|---|
| 支払仕訳作成 | 請求書が選択され、支払仕訳行に追加された状態です。支払の意思を示し、通常は支払確認ワークフローを開始します。 | ||
| 重要な理由 債務処理から現金支出処理へ移行したことを示します。支払実行リードタイムの測定に使用します。 入手先 LedgerJournalTrans.CreatedDateTimeを使用します。請求書はMarkedInvoiceフィールドまたは決済テーブルを介してリンクされます。 取得 LedgerJournalTransでレコードが作成された時点で記録 イベントタイプ explicit | |||
| 支払生成 | システムが支払ファイル(EFT、ISO20022)を生成するか、小切手を印刷した状態です。仕訳行の支払ステータスがSentまたはGeneratedに更新されます。 | ||
| 重要な理由 Approved-to-Executed Lag Time KPIを支援します。支払指示が生成されたことを確認できます。 入手先 LedgerJournalTrans.PaymentStatusがSentまたはRecievedに変わった状態です。多くの場合、行の更新から推定します。 取得 前後のPaymentStatusフィールドを比較 イベントタイプ inferred | |||
| 支払転記 | 支払仕訳が総勘定元帳に転記され、請求書が決済され、仕入先残高が消し込まれた状態です。財務プロセスが完了します。 | ||
| 重要な理由 平均請求書・支払サイクル時間における最終アクティビティです。現金減少に関する会計仕訳が確定したことを確認します。 入手先 LedgerJournalTransが転記済みになった状態です。VendTransが更新され、決済済みであることが示されます。実際のイベントは仕訳の転記です。 取得 取引Xが実行された時点で記録 イベントタイプ explicit | |||
| 請求書を発注書と照合 | システムが請求書明細行を発注書または入荷記録に正常にリンクした状態です。このアクティビティは、調達注文に対する請求書の検証を示します。 | ||
| 重要な理由 First-Pass PO Matching Rate KPIに欠かせません。手作業なしで処理された請求書と、手動介入が必要な請求書を区別できます。 入手先 VendInvoiceInfoLine.PurchIdとVendInvoiceInfoTable.MatchStatusを使用します。MatchStatusがPassedに変わった時点で推定します。 取得 前後のMatchStatusフィールドを比較 イベントタイプ inferred | |||
| 請求書作成 | 保留中の仕入先請求書レコードをシステムに初めて作成することです。手動入力またはデータエンティティのインポートによって、請求書がDynamics 365のワークフローに登録されたことを示します。 | ||
| 重要な理由 プロセスのリードタイム計算における開始時刻を設定します。請求書が処理または転記されるまで、システム内にどのくらい滞留しているかを測定できます。 入手先 VendInvoiceInfoTable.CreatedDateTimeまたはVendInvoiceInfoTable.RecIdの作成タイムスタンプです。保留中の仕入先請求書ヘッダーを表します。 取得 VendInvoiceInfoTableでレコードが作成された時点で記録 イベントタイプ explicit | |||
| 請求書承認 | 保留中の請求書に対するワークフローインスタンスが完了または承認済みの状態に達した状態です。請求書は元帳への転記が可能になります。 | ||
| 重要な理由 平均承認リードタイムを計算します。この段階の遅延は、早期支払割引を受けられるかどうかに直接影響します。 入手先 TrackingStatusがCompletedであるWorkflowTrackingStatusTable.CreatedDateTimeを使用します。別の方法として、VendInvoiceInfoTable.RequestStatusがApprovedであることを確認します。 取得 ワークフローインスタンスが完了した時点で記録 イベントタイプ explicit | |||
| 請求書転記 | 請求書が総勘定元帳に転記され、システムに債務が計上された状態です。レコードは保留テーブルから転記済み取引テーブルへ移動します。 | ||
| 重要な理由 債務を財務上認識したことを示す主要なマイルストーンです。このアクティビティにより、請求書を支払対象として選択できます。 入手先 VendInvoiceJourとVendTransにレコードが作成されたことを示します。TransDateは転記日です。 取得 取引Xが実行された時点で記録 イベントタイプ explicit | |||
| 支払ブロック適用 | 仕入先取引に保留が設定され、支払提案の対象として選択できない状態です。紛争対応のため、手動で設定されることがよくあります。 | ||
| 重要な理由 Payment Block and Friction Analysisを支援します。キャッシュ流出を遅らせる手動介入を明らかにします。 入手先 VendTrans.ApprovedフラグがNoに設定されるか、特定のOnHoldステータスフィールドに値が設定された状態です。VendTransの更新を追跡する必要があります。 取得 前後のステータスフィールドを比較 イベントタイプ inferred | |||
| 支払仕訳承認 | 支払仕訳ワークフローが承認され、支払の生成が許可された状態です。資金移動の準備前に行う最終確認です。 | ||
| 重要な理由 支払の事務的な準備と、承認上のボトルネックを区別します。 入手先 LedgerJournalTable(ヘッダー)IDにリンクするWorkflowTrackingStatusTableを使用します。StatusはCompletedです。 取得 ワークフローインスタンスが完了した時点で記録 イベントタイプ explicit | |||
| 請求書を承認申請 | 保留中の請求書がレビューのためワークフローエンジンに送信された状態です。データ入力・照合の段階から承認段階へ移行したことを示します。 | ||
| 重要な理由 承認サイクル時間の開始点を示します。社内の承認階層の効率を分析するうえで欠かせません。 入手先 ContextTableIdがVendInvoiceInfoTable IDと一致し、StatusがSubmittedであるWorkflowTrackingStatusTable.CreatedDateTimeを使用します。 取得 ワークフローインスタンスが開始された時点で記録 イベントタイプ explicit | |||
| 請求書更新 | 転記前に請求書ヘッダーまたは明細行へ加えられた変更を記録します。更新頻度が高い場合、データ抽出の問題や、検証中に必要となる手動修正が示唆されます。 | ||
| 重要な理由 更新頻度が高い場合、手戻りループや、元データの品質不良(OCRエラーなど)が考えられます。Rework and Data Accuracy Monitorを支援します。 入手先 有効化されている場合はVendInvoiceInfoTableのデータベースログ(SysDatabaseLog)を使用します。有効でない場合は、ポーリング頻度が高ければModifiedDateTimeの変更から推定します。 取得 後続の抽出結果でModifiedDateTimeを比較 イベントタイプ inferred | |||
| 請求書照合失敗 | 照合プロセスで、請求書と発注書または入荷記録の間に差異(価格または数量の差)が見つかった状態です。解決するまでプロセスが停止することがあります。 | ||
| 重要な理由 照合プロセスにおける具体的な滞留箇所を特定します。PO Match and Discrepancy Trendsダッシュボードを支援します。 入手先 VendInvoiceInfoTable.MatchStatusがFailedまたはDiscrepancyに変わったことを示します。VendInvoiceInfoLineの照合差異にも表示されます。 取得 前後のMatchStatusフィールドを比較 イベントタイプ inferred | |||
抽出ガイド
ステップ
Data Management Workspaceへのアクセス:Microsoft Dynamics 365 Finance環境にログインします。Workspacesに移動し、Data Managementを選択します。ここがデータエクスポートプロジェクトを設定するための中心的な画面です。
エクスポートプロジェクトの作成:Exportタイルをクリックして、新しいデータプロジェクトを作成します。プロジェクトには、たとえばProcessMining_AP_Exportのように、内容が分かる名前を付けます。Target data formatフィールドで、接続先の形式(BYODの場合はAzure SQL DB、ファイルベースのエクスポートの場合はCSVなど)を選択します。
データエンティティの追加:次の標準データエンティティを、1つずつプロジェクトに追加します:VendorInvoiceHeaderEntity(未処理の請求書)、VendorInvoiceLineEntity(請求書明細)、VendorInvoiceJournalHeaderEntity(転記済み請求書)、VendorPaymentJournalLineEntity(支払い)、WorkflowHistoryEntity(承認ログ)。WorkflowHistoryEntityが標準で利用できない場合は、エクスポート用に公開されたカスタムエンティティまたは特定のシステムエンティティを有効にする必要があります。
エンティティフィルターの設定:各エンティティでFilterアイコンをクリックします。対象のCompanyInfo(DataAreaId)にデータを限定するフィルターを適用し、CreatedDateTimeまたはInvoiceDateフィールドに日付範囲を設定して、指定した分析期間(例:過去12か月)のデータだけを抽出します。
定期エクスポートの設定:イベントログを最新の状態に保つため、定期データジョブを作成します。実行頻度(例:毎日または毎時)を設定し、対応している場合はIncremental pushを有効にします。変更されたレコードだけをエクスポートするため、システム負荷を抑えられます。
初回エクスポートの実行:Export nowをクリックして、初回はプロジェクトを手動で実行します。Execution summaryを監視し、すべてのレコードがエラーなく正常にエクスポートされたことを確認します。
データの変換:データを接続先(Azure SQLまたはファイル)にエクスポートしたら、Queryセクションに記載されたSQLスクリプトを使ってテーブルを結合します。この変換ロジックにより、異なるエンティティのレコードが1つの時系列イベントログにまとめられます。
属性のマッピング:プロセスマイニングツールの要件に従い、作成したデータセットでInvoiceNumberをケースID、EventTimeをタイムスタンプ、Activityをアクティビティ名にマッピングします。
検証とアップロード:以下に記載された検証チェックを実行し、データの正確性を確認します。確認後、最終結果をCSVまたはParquetファイルとしてエクスポートし、ProcessMindにアップロードします。
設定
- Entity Selection:転記前のプロセスステップにはVendorInvoiceHeaderEntityとVendorInvoiceLineEntityを使用します。法的に有効な転記済み文書にはVendorInvoiceJournalHeaderEntityを使用します。支払いの追跡にはVendorPaymentJournalLineEntityを使用します。
- Incremental Push:初回の全件ロード後に、新規または変更されたレコードだけをエクスポートするため、データ管理プロジェクトでこの設定を有効にします。パフォーマンスを維持するうえで重要です。
- Date Ranges:InvoiceDate >= [Start Date]でフィルターします。タイムアウトを避けるため、範囲を指定しないエクスポートは行わないでください。
- Company Filter:D365は複数の組織を扱うシステムです。組織をまたいだ分析が目的でない限り、異なる法人のデータが混在しないよう、必ずDataAreaIdでフィルターします。
- Workflow History:ワークフロー履歴の標準エンティティはデータ量が大きくなる場合があります。データ量を管理しやすくするため、VendInvoiceタイプに関連する履歴だけをエクスポートしてください。
a サンプルクエリ sql
/*
SQL Transformation Script for D365 Finance AP Process
Assumes data is loaded into Staging tables in a SQL environment (BYOD/Data Lake)
*/
SELECT
I.InvoiceNumber AS [InvoiceNumber],
'Invoice Created' AS [Activity],
I.CreatedDateTime AS [EventTime],
I.DataAreaId AS [CompanyCode],
I.InvoiceAccount AS [VendorAccount],
I.InvoiceAmount AS [InvoiceAmount],
I.CurrencyCode AS [Currency],
'D365 FO' AS [SourceSystem],
GETDATE() AS [LastDataUpdate]
FROM Staging_VendorInvoiceHeaderEntity I
UNION ALL
/* Capture updates to invoice headers */
SELECT
I.InvoiceNumber,
'Invoice Updated',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.ModifiedDateTime > I.CreatedDateTime
UNION ALL
/* Invoice Matching Activities */
SELECT
I.InvoiceNumber,
'Invoice Matched to PO',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.MatchStatus = 'Matched' -- Adjust value based on system config
UNION ALL
SELECT
I.InvoiceNumber,
'Invoice Match Failed',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.MatchStatus = 'Failed'
UNION ALL
/* Workflow Activities */
SELECT
RelatedContext AS InvoiceNumber,
CASE
WHEN Status = 'Submitted' THEN 'Invoice Submitted for Approval'
WHEN Status = 'Approved' THEN 'Invoice Approved'
ELSE 'Workflow Activity'
END AS [Activity],
CreatedDateTime AS [EventTime],
DataAreaId,
NULL AS [VendorAccount],
NULL AS [InvoiceAmount],
NULL AS [Currency],
'D365 FO',
GETDATE()
FROM Staging_WorkflowHistoryEntity
WHERE ContextTableId = 12345 -- Replace with TableId for VendInvoiceInfoTable
AND Status IN ('Submitted', 'Approved')
UNION ALL
/* Invoice Posted */
SELECT
J.InvoiceNumber,
'Invoice Posted',
J.PostedDateTime,
J.DataAreaId,
J.InvoiceAccount,
J.InvoiceAmount,
J.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceJournalHeaderEntity J
UNION ALL
/* Payment Block */
SELECT
I.InvoiceNumber,
'Payment Block Applied',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceJournalHeaderEntity I
WHERE I.OnHold = 'Yes'
UNION ALL
/* Payment Activities */
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Journal Created' AS [Activity],
P.CreatedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue AS [VendorAccount],
P.DebitAmount AS [InvoiceAmount],
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Journal Approved' AS [Activity],
P.ModifiedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.PaymentStatus = 'Approved'
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Generated' AS [Activity],
P.ModifiedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.PaymentStatus = 'Sent'
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Posted' AS [Activity],
P.PostedDate AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.IsPosted = 'Yes' ステップ
BYOD接続を確認:SQL Server Management Studio(SSMS)または同等のツールがインストールされ、Dynamics 365 Finance & Operations環境のBring Your Own Database(BYOD)出力先として設定されたAzure SQL Databaseに接続できることを確認します。
エンティティのエクスポートを確認:Dynamics 365の「データ管理」ワークスペースを開きます。次のエンティティ(または基盤となるテーブル)がBYODデータベースへのエクスポート対象として設定されていることを確認します:VendInvoiceInfoTable(未処理請求書)、VendInvoiceInfoLine(未処理明細)、VendInvoiceJour(転記済み請求書)、VendTrans(仕入先取引)、LedgerJournalTrans(仕訳明細)、LedgerJournalTable(仕訳ヘッダー)、WorkflowTrackingStatusTable(ワークフロー履歴)。
エクスポートジョブを設定:これらのテーブルが現在エクスポートされていない場合は、新しいエクスポートジョブを作成します。「対象データ形式」にBYOD SQLデータベースを設定します。「Incremental Push」を選択し、全件再エクスポートを行わずにデータを同期します。ジョブを実行してテーブルにデータを格納します。
SQL環境を準備:SSMSを開き、BYOD Azure SQLデータベースに接続します。新しいクエリウィンドウを開きます。
パラメーターを設定:以下のスクリプトの先頭にある変数宣言部分を確認します。@StartDateと@EndDateの変数を、分析対象期間に合わせて更新します。特定の法人でフィルターする場合は、DATAAREAIDのフィルター条件を更新します。
スクリプトを実行:T-SQLスクリプト全体を実行します。このスクリプトではUNION ALLを使って複数のテーブルのデータを結合し、標準化された1つのイベントログにまとめます。
データを検証:InvoiceNumberまたはEventTime列にNULL値がないか確認します。また、転記済み請求書(VendInvoiceJour)と未処理請求書(VendInvoiceInfoTable)の両方が表示されていることを確認します。
結果をエクスポート:SSMSの結果グリッドを右クリックし、「結果を名前を付けて保存…」を選択します。ファイルはCSV(コンマ区切り)形式で保存します。
アップロード用に整形:ExcelまたはテキストエディターでCSVを開き、ProcessMindで必要な場合は日付形式がISO 8601(YYYY-MM-DD HH:MM:SS)に準拠していることを確認します。スクリプトが正常に実行されていれば、それ以上の変換は通常必要ありません。
ProcessMindにアップロード:CSVファイルをProcessMindにインポートし、InvoiceNumberをCase ID、ActivityをActivity Name、EventTimeをTimestampにマッピングします。
設定
- Export Strategy:LedgerJournalTransやVendTransなどデータ量の多いテーブルでは、BYODの負荷を抑えるため「Incremental Push」を使用します。データの不整合が疑われる場合に限り、Full Pushを使用してください。
- Timezone Handling:Dynamics 365はデータをUTCで保存します。スクリプトもUTCを前提としています。現地時刻で分析する場合は、スクリプト内またはProcessMindへのインポート時にDATEADDで調整します。
- Company Filtering:DataAreaId列は法人を表します。スクリプトはデフォルトで全組織のデータを抽出します。特定の子会社に限定する場合は、WHERE DataAreaId = 'usmf'(例)を追加します。
- Workflow History:WorkflowTrackingStatusTableは承認日時の取得に欠かせません。デフォルトでは除外されることが多いため、BYODのエクスポート設定にこのテーブルが含まれていることを確認します。
- Data Retention:D365のクリーンアップ処理によって、完了済みのワークフロー履歴や転記済み仕訳明細が削除される場合があります。これにより、プロセスマイニングで分析できる履歴の範囲が限られる点に注意してください。
a サンプルクエリ sql
/* T-SQL Extraction Script for D365 AP Payment Processing */
/* Tables required: VendInvoiceInfoTable, VendInvoiceInfoLine, VendInvoiceJour, VendTrans, LedgerJournalTrans, LedgerJournalTable, WorkflowTrackingStatusTable */
DECLARE @StartDate DATETIME = '2023-01-01 00:00:00';
DECLARE @EndDate DATETIME = GETDATE();
WITH RawData AS (
/* 1. Invoice Created: Pending Invoice Header Creation */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Created' AS Activity,
T1.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
T1.CreatedBy AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoTable T1
WHERE T1.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 2. Invoice Updated: Modifications to Pending Invoice */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Updated' AS Activity,
T1.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
T1.ModifiedBy AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoTable T1
WHERE T1.ModifiedDateTime BETWEEN @StartDate AND @EndDate
AND T1.ModifiedDateTime > T1.CreatedDateTime
UNION ALL
/* 3. Invoice Matched to PO: Line Matching Success */
SELECT
H.Num AS InvoiceNumber,
'Invoice Matched to PO' AS Activity,
L.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.InvoiceAccount AS VendorAccount,
H.DataAreaId AS CompanyCode,
CAST(H.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
H.DueDate AS DueDate,
H.PurchId AS PurchaseOrderNumber,
L.ModifiedBy AS UserId,
H.VendorName AS VendorName,
H.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoLine L
JOIN dbo.VendInvoiceInfoTable H ON L.TableRefId = H.TableRefId AND L.DataAreaId = H.DataAreaId
WHERE L.MatchStatus = 1 /* 1 usually denotes Matched/Passed in enum */
AND L.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 4. Invoice Match Failed: Line Matching Discrepancy */
SELECT
H.Num AS InvoiceNumber,
'Invoice Match Failed' AS Activity,
L.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.InvoiceAccount AS VendorAccount,
H.DataAreaId AS CompanyCode,
CAST(H.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
H.DueDate AS DueDate,
H.PurchId AS PurchaseOrderNumber,
L.ModifiedBy AS UserId,
H.VendorName AS VendorName,
H.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoLine L
JOIN dbo.VendInvoiceInfoTable H ON L.TableRefId = H.TableRefId AND L.DataAreaId = H.DataAreaId
WHERE L.MatchStatus = 2 /* 2 usually denotes Failed in enum */
AND L.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 5. Invoice Submitted for Approval: Workflow Submission */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Submitted for Approval' AS Activity,
W.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
W.User AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.WorkflowTrackingStatusTable W
JOIN dbo.VendInvoiceInfoTable T1 ON W.ContextRecId = T1.RecId
WHERE W.TrackingStatus = 1 /* Submitted */
AND W.ContextTableId = 1425 /* TableId for VendInvoiceInfoTable, adjust if different in version */
AND W.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 6. Invoice Approved: Workflow Completion */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Approved' AS Activity,
W.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
W.User AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.WorkflowTrackingStatusTable W
JOIN dbo.VendInvoiceInfoTable T1 ON W.ContextRecId = T1.RecId
WHERE W.TrackingStatus = 2 /* Completed/Approved */
AND W.ContextTableId = 1425
AND W.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 7. Invoice Posted: Creation of VendInvoiceJour */
SELECT
J.InvoiceId AS InvoiceNumber,
'Invoice Posted' AS Activity,
J.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
J.InvoiceAccount AS VendorAccount,
J.DataAreaId AS CompanyCode,
CAST(J.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
J.DueDate AS DueDate,
J.PurchId AS PurchaseOrderNumber,
J.CreatedBy AS UserId,
J.InvoicingName AS VendorName,
J.InvoiceDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceJour J
WHERE J.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 8. Payment Block Applied: Updated on VendTrans */
SELECT
J.InvoiceId AS InvoiceNumber,
'Payment Block Applied' AS Activity,
VT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
J.InvoiceAccount AS VendorAccount,
J.DataAreaId AS CompanyCode,
CAST(J.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
J.DueDate AS DueDate,
J.PurchId AS PurchaseOrderNumber,
VT.ModifiedBy AS UserId,
J.InvoicingName AS VendorName,
J.InvoiceDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendTrans VT
JOIN dbo.VendInvoiceJour J ON VT.Invoice = J.InvoiceId AND VT.AccountNum = J.InvoiceAccount AND VT.DataAreaId = J.DataAreaId
WHERE VT.Approved = 0 /* 0 indicates Not Approved/Blocked */
AND VT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 9. Payment Journal Created: Line added to Journal */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Journal Created' AS Activity,
LJT.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.CreatedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.AccountType = 2 /* Vendor */
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 10. Payment Journal Approved: Workflow on Journal Header */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Journal Approved' AS Activity,
LJH.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJH.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTable LJH
JOIN dbo.LedgerJournalTrans LJT ON LJH.JournalNum = LJT.JournalNum AND LJH.DataAreaId = LJT.DataAreaId
WHERE LJH.WorkflowApprovalStatus = 2 /* Approved */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJH.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 11. Payment Generated: Payment Status Changed to Sent */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Generated' AS Activity,
LJT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.PaymentStatus = 2 /* Sent/Generated */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 12. Payment Posted: Journal Line Posted */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Posted' AS Activity,
LJT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.Posted = 1 /* Posted */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
)
SELECT *
FROM RawData
WHERE InvoiceNumber IS NOT NULL AND InvoiceNumber <> ''
ORDER BY InvoiceNumber, EventTime; 準備はできましたか?
このテンプレートを使ってデータ基盤を整備し、今すぐ支払いワークフローの最適化を始めましょう。Dynamics 365の特定のテーブルをマッピングする際にサポートが必要な場合は、担当チームが支援します。
今すぐ買掛金支払い処理を最適化
サイクルタイムを30%短縮し、D365の遅延を解消します。
クレジットカードは不要です。5分で設定できます。