貴社の買掛金支払処理データ``テンプレート
貴社の買掛金支払処理データ``テンプレート
- 財務分析のための`プロセス`固有の`属性`
- 支払い追跡のための重要な活動マイルストーン
- Dynamics 365の詳細な抽出手順
買掛金支払処理属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ Activity | 発生した特定の`タスク`または`ステータス`変更です。 | ||
| 説明 「請求書作成」「請求書承認」「支払転記」など、プロセス内で実行されたイベントやステップを記述する属性です。テクニカルなトランザクションタイプやワークフローのステータス変更を、理解しやすいビジネスイベントに変換します。 Dynamics 365では、これらのアクティビティは通常、テーブルへの挿入(例: その重要性 プロセスマップのプロセスフローとイベントの順序を定義します。 取得元 様々な取引テーブルとワークフロー履歴ログから派生 例 請求書作成請求書承認済み支払生成済み | |||
| イベント日時 EventTime | アクティビティが発生したタイムスタンプです。 | ||
| 説明 特定のアクティビティが発生した正確な日時を記録する属性です。イベントを時系列に並べ、ステップ間の所要時間を計算するために使用されます。 Dynamics 365の場合、クエリ対象のテーブルに応じて、通常 その重要性 サイクルタイム、リードタイムの計算、およびボトルネックの特定に不可欠です。 取得元
例 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| 請求書番号 InvoiceNumber | `ベンダー`請求書に割り当てられた一意の識別子です。 | ||
| 説明 「請求書番号」は、このプロセスにおける確定的なケースIDとして機能します。1件の仕入先請求書に関するすべてのイベントを一意にグループ化し、受領から決済までの道のりを包括的に分析できるようにします。 Microsoft Dynamics 365では、通常 その重要性 ばらばらな買掛金(AP)活動を単一のプロセスインスタンスにリンクするための基本的なキーです。 取得元
例 INV-2023-00198223344ACME-OCT-22 | |||
| ソースシステム SourceSystem | `データ`の`発信元``システム`名です。 | ||
| 説明 プロセスデータが抽出されたソースソフトウェアまたは環境を識別します。この文脈では、常にMicrosoft Dynamics 365インスタンスを示します。 これは、ERPや外部スキャンソリューションからデータが混在するマルチシステム環境で特に役立ちます。 その重要性 マルチシステム分析におけるデータリネージとトレーサビリティを保証します。 取得元 抽出時にハードコードまたは設定済み 例 Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| 最終データ更新 LastDataUpdate | データが抽出または更新されたときのタイムスタンプ。 | ||
| 説明 分析に使用されるデータの鮮度を示します。ユーザーがリアルタイムデータを見ているのか、それとも以前の期間のスナップショットを見ているのかを理解するのに役立ちます。 これは通常、Dynamics 365自体のフィールドではなく、ETL(抽出、変換、ロード)プロセスによって生成されます。 その重要性 ダッシュボードとKPIへの信頼を確立するために不可欠です。 取得元 抽出スクリプトによって生成されます 例 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| ベンダー口座 VendorAccount | `ベンダー`の一意の`アカウント`番号です。 | ||
| 説明 取引に関連する仕入先の一意の識別子です。Dynamics 365では、 この属性は「仕入先関係の複雑性ビュー」の中心となるもので、特定の仕入先ごとにパフォーマンスやプロセスの摩擦を分析することを可能にします。 その重要性 サプライヤーごとのプロセスパフォーマンスのセグメンテーションを可能にします。 取得元
例 US-101V000452001 | |||
| ユーザー`ID` UserId | 活動を実行したユーザーの識別子。 | ||
| 説明 請求書の承認や支払いの転記など、特定の活動を担当するシステムユーザーを識別します。D365の 「支払ブロックと摩擦分析」で使用され、特定の処理担当者が他の担当者よりも多くのブロックを引き起こしているかどうかを確認します。 その重要性 リソースの行動と職務分掌の分析を可能にします。 取得元
例 jdoeadminworkflow_sys | |||
| 仕入先名 VendorName | `ベンダー`組織名です。 | ||
| 説明 仕入先の正式名称です。Dynamics 365では、仕入先アカウントはグローバル アドレス帳( 人間が読みやすい名称を使用することで、「仕入先関係の複雑性ビュー」の分析が容易になり、ビジネスユーザーにとっても理解しやすいダッシュボードになります。 その重要性
取得元
例 Contoso Office SupplyFabrikam ElectronicsLitware Inc. | |||
| 会社コード CompanyCode | `法`人`エンティティ`または子会社の識別子です。 | ||
| 説明 請求書が処理されている組織内の この その重要性 異なる事業単位や国間での比較分析を可能にします。 取得元
例 USMFDEMFGBSI | |||
| 支払期日 DueDate | 請求書が支払われるべき日付です。 | ||
| 説明 違約金を避けるために支払いが決済されなければならない契約上の日付です。Dynamics 365では、これは請求書 これは「期日内支払率 その重要性 期日内支払 取得元
例 2023-11-302023-12-15 | |||
| 発注書番号 PurchaseOrderNumber | 関連する購買`オーダー`の参照番号です。 | ||
| 説明 請求書を元の購買文書にリンクします。Dynamics 365では、これは この属性は、POに裏打ちされた請求書とPOなしの請求書を区別することで、「PO照合と不一致トレンド」ダッシュボードをサポートします。 その重要性 調達から支払いまでの照合率を分析するために不可欠です。 取得元
例 PO-000455000342PO-22-998 | |||
| 請求日 InvoiceDate | 請求書に記載されている`文書`日付です。 | ||
| 説明
「 その重要性 請求書の未払い期間の開始を定義します。 取得元
例 2023-10-012023-10-15 | |||
| 請求金額 InvoiceAmount | 請求書の合計金額。 | ||
| 説明 取引通貨での請求書合計額です。Dynamics 365では、請求書ジャーナルテーブルの 「二重支払リスク検知」ダッシュボードで使用され、金額と仕入先の詳細を関連付けて分析するために利用します。 その重要性 支出量と財務リスクの分析に不可欠です。 取得元
例 1500.00245.5010000.00 | |||
| 部署 Department | `コスト`に責任を持つ部門です。 | ||
| 説明 内部部門を示す この その重要性 組織的なドリルダウンと説明責任分析を可能にします。 取得元
例 IT財務運用 | |||
| 伝票番号 VoucherNumber | トランザクションに関連付けられた元帳伝票番号です。 | ||
| 説明 会計仕訳のための内部的な一般会計識別子です。Dynamics 365では、 テクニカルな項目ですが、「プロセスパスとコンプライアンス監査」において、照合のために元帳まで遡って追跡する際に役立ちます。 その重要性 財務監査および照合の鍵となります。 取得元
例 VOU-10023INV-ACC-992 | |||
| 支払いはブロックされていますか IsPaymentBlocked | 請求書が現在支払いブロックされているかを示すフラグ。 | ||
| 説明 請求書が保留中であるかを示すブール値インジケーターです。Dynamics 365では、これは これは「支払ブロックと摩擦分析」の主要な推進力であり、プロセスの中断を浮き彫りにします。 その重要性 即座の摩擦点と手動介入を特定します。 取得元
例 truefalse | |||
| 支払方法 PaymentMethod | 請求書の支払いに使用された方法です(例:`チェック`、`電信送金`、`EFT`)。 | ||
| 説明 ベンダーへの資金振替方法を定義します。Dynamics 365では、これは この属性は、「支払い実行リードタイム」ダッシュボードで異なる支払いバッチタイプの効率を評価するために使用されます。 その重要性 支払い実行フェーズにおける変動を説明します。 取得元
例 CHECKACH`WIRE` | |||
| 支払条件 PaymentTerms | 合意された支払条件を表す`コード`です。 | ||
| 説明 期日と割引を規定する
その重要性 期日計算の 取得元
例 Net302%10Net30COD | |||
| 現金割引日 CashDiscountDate | 割引を受けるために支払いが実行されなければならない日付です。 | ||
| 説明 早期支払奨励金を獲得するための この その重要性 プロセスの財務効率KPIに直接影響します。 取得元
例 2023-10-102023-10-20 | |||
| 通貨 Currency | 請求書の通貨`コード`です。 | ||
| 説明 請求書が発行された 多通貨正規化が必要な場合、「 その重要性 財務数値を解釈するために必要な 取得元
例 USDEURGBP | |||
買掛金支払処理活動
| アクティビティ | 説明 | ||
|---|---|---|---|
| 支払い計上 | 支払仕訳帳が総勘定元帳に転記され、請求書が決済されて仕入先残高が消し込まれた状態。これにより財務プロセスが完了します。 | ||
| その重要性 平均請求書支払 取得元 LedgerJournalTransが転記されます。VendTransを更新して決済を表示します。実際のイベントは仕訳帳の転記です。 取得 トランザクションXが実行されたときにログ記録されます イベントタイプ explicit | |||
| 支払仕訳作成済み | 請求書が選択され、支払仕訳明細に追加されます。これは支払の意図を示し、通常、支払`レビュー``ワークフロー`を開始します。 | ||
| その重要性 債務から 取得元 LedgerJournalTrans.CreatedDateTime。請求書はMarkedInvoiceフィールドまたは決済テーブルを通じてリンクされます。 取得 LedgerJournalTransでレコードが作成されたときにログ記録されます イベントタイプ explicit | |||
| 支払生成済み | `システム`は支払`ファイル`(`EFT`、ISO20022)を生成するか、`チェック`を印刷します。仕訳明細の支払`ステータス`は「送信済み」または「生成済み」に`更新`されます。 | ||
| その重要性 承認から実行までの遅延 取得元 LedgerJournalTrans.PaymentStatusがSent/Receivedに変更されます。これは多くの場合、明細行の更新から推測されます。 取得 PaymentStatusフィールドを前後で比較する イベントタイプ inferred | |||
| 請求書をPOと照合済み | システムが請求書明細を発注書(PO)または製品受領書と正常に紐付けた状態。このアクティビティは、調達オーダーに対して請求書の内容が検証されたことを意味します。 | ||
| その重要性 初回PO照合率KPIにとって重要です。これは、タッチレス処理と手動介入が必要な請求書を区別します。 取得元 VendInvoiceInfoLine.PurchId および VendInvoiceInfoTable.MatchStatus。MatchStatusがPassedに変更されたときに 取得 MatchStatusフィールドを前後で比較する イベントタイプ inferred | |||
| 請求書仕訳計上済み | 請求書は`総勘定元帳`に`転記`され、`システム`内に負債が作成されます。この記録は、保留中の`テーブル`から`転記`済み`トランザクション``テーブル`に移動します。 | ||
| その重要性 債務の財務認識を示す主要なマイルストーンです。この活動により、請求書が支払いのために選択できるようになります。 取得元 VendInvoiceJourおよびVendTransへのレコード作成。TransDateは転記日を表します。 取得 トランザクションXが実行されたときにログ記録されます イベントタイプ explicit | |||
| 請求書作成 | システム上での未承認の仕入先請求書レコードの初回作成。手動入力またはデータエンティティのインポートにより、請求書がDynamics 365のワークフローに投入されたことを示します。 | ||
| その重要性 プロセスリードタイム計算の開始時間を確立します。これにより、組織は請求書がシステム内で処理または転記されるまでにどれくらいの時間滞留しているかを測定できます。 取得元 VendInvoiceInfoTable.CreatedDateTime または VendInvoiceInfoTable.RecId の作成タイムスタンプ。これは「未承認の仕入先請求書」のヘッダーを表します。 取得 VendInvoiceInfoTableでレコードが作成されたときにログ記録されます イベントタイプ explicit | |||
| 請求書承認済み | 未承認請求書のワークフローインスタンスが完了または承認ステータスに達した状態。これにより、請求書を元帳に転記する準備が整いました。 | ||
| その重要性 平均承認リードタイムを計算します。ここでの遅延は、早期支払割引の獲得能力に直接影響します。 取得元 WorkflowTrackingStatusTable.CreatedDateTime ( 取得 ワークフローインスタンスが完了したときにログ記録されます イベントタイプ explicit | |||
| 承認のために請求書提出済み | 未承認の請求書がレビューのためにワークフローエンジンに送信された状態。データ入力や照合の段階から、承認フェーズへと移行したことを示します。 | ||
| その重要性 承認 取得元 WorkflowTrackingStatusTable.CreatedDateTime ( 取得 ワークフローインスタンスが開始されたときにログ記録されます イベントタイプ explicit | |||
| 支払仕訳承認済み | 支払仕訳`ワークフロー`が承認され、支払の生成が`認可`されます。これは、資金が送金準備される前の最終確認です。 | ||
| その重要性 支払いの事務的準備を承認 取得元 LedgerJournalTable ( 取得 ワークフローインスタンスが完了したときにログ記録されます イベントタイプ explicit | |||
| 支払保留適用済み | ベンダー取引に保留が設定され、支払提案で選択されないようにします。これは紛争の場合に手動で行われることがよくあります。 | ||
| その重要性 支払保留および 取得元 VendTrans.Approved フラグが No に設定されているか、特定の OnHold ステータスフィールドに値が入っている状態。VendTrans への更新を追跡する必要があります。 取得 ステータスフィールドを前後で比較する イベントタイプ inferred | |||
| 請求書更新済み | `転記`前の請求書`ヘッダー`または`明細`に対する変更を記録します。頻繁な`更新`は、`データ`抽出の`問題`や`検証`中に必要となる手動修正を示唆する可能性があります。 | ||
| その重要性 更新頻度が高いことは、手戻りループや、ソースからのデータ品質の低さ(例:OCRエラー)を示唆しています。これは、手戻りおよびデータ精度モニターをサポートします。 取得元 VendInvoiceInfoTable上のデータベースログ(SysDatabaseLog、有効な場合)、またはポーリング頻度が高い場合はModifiedDateTimeの変更から推測されます。 取得 後続の抽出でModifiedDateTimeを比較する イベントタイプ inferred | |||
| 請求書照合失敗 | 照合プロセスにおいて、請求書と発注書(PO)または受領書との間に不一致(価格や数量の差異)が検出された状態。解決されるまでプロセスは停止することが一般的です。 | ||
| その重要性 照合プロセスにおける特定の摩擦点を特定します。PO照合および不一致トレンドダッシュボードをサポートします。 取得元 VendInvoiceInfoTable.MatchStatus が Failed または Discrepancy に変更されます。VendInvoiceInfoLine の照合差異でも確認できます。 取得 MatchStatusフィールドを前後で比較する イベントタイプ inferred | |||
抽出ガイド
ステップ
データ管理ワークスペースへのアクセス: Microsoft Dynamics 365 Finance環境にログインします。ワークスペースに移動し、「データ管理」を選択します。これはデータエクスポートプロジェクトを設定するための中心的なハブです。
エクスポートプロジェクトの作成: 「エクスポート」タイルをクリックして新しいデータプロジェクトを作成します。プロジェクト名を明確に付けます(例:ProcessMining_AP_Export)。「ターゲットデータ形式」フィールドで、宛先形式(例:BYOD用のAzure SQL DBまたはファイルベースエクスポート用のCSV)を選択します。
データエンティティの追加: 次の標準データエンティティをプロジェクトに1つずつ追加します: VendorInvoiceHeaderEntity(保留中の請求書用)、VendorInvoiceLineEntity(請求書明細行用)、VendorInvoiceJournalHeaderEntity(転記済み請求書用)、VendorPaymentJournalLineEntity(支払い用)、WorkflowHistoryEntity(承認ログ用)。WorkflowHistoryEntityがデフォルトで利用できない場合は、カスタムエンティティまたはエクスポート用に公開された特定のシステムエンティティを有効にする必要がある場合があります。
エンティティフィルターの設定: 各エンティティについて、フィルターアイコンをクリックします。関連するCompanyInfo(DataAreaId)にデータを制限し、希望する分析期間(例:過去12ヶ月間)のデータのみを抽出するために、CreatedDateTimeまたはInvoiceDateフィールドに日付範囲を設定するフィルターを適用します。
定期エクスポートの設定: イベントログを最新の状態に保つため、定期的なデータジョブを作成します。繰り返し頻度(例:毎日または毎時)を定義し、サポートされている場合はインクリメンタルプッシュを有効にします。これにより、変更されたレコードのみをエクスポートすることでシステム負荷が軽減されます。
初回エクスポートの実行: 「今すぐエクスポート」をクリックして、プロジェクトを初めて手動で実行します。実行概要を監視し、すべてのレコードがエラーなく正常にエクスポートされたことを確認します。
データの変換: データが宛先(Azure SQLまたはファイル)にエクスポートされたら、「クエリ」セクションに記載されているSQLスクリプトを使用してこれらのテーブルを結合します。この変換ロジックは、異なるエンティティレコードを単一の時系列イベントログに変換します。
属性のマッピング: 結果のデータセットが、プロセスマイニングツールの要件に従って、InvoiceNumberをケースIDに、EventTimeをタイムスタンプに、Activityをアクティビティ名にマップしていることを確認します。
検証とアップロード: データ精度を確認するために、以下にリストされている検証チェックを実行します。検証後、最終結果をCSVまたはParquetファイルとしてエクスポートし、ProcessMindにアップロードします。
設定
- エンティティ選択: 転記前のプロセスステップには
VendorInvoiceHeaderEntityとVendorInvoiceLineEntityを使用します。正式な転記済みドキュメントにはVendorInvoiceJournalHeaderEntityを、支払い追跡にはVendorPaymentJournalLineEntityを使用します。 - インクリメンタルプッシュ: 初回フルロード後に新規または変更されたレコードのみをエクスポートするために、データ管理プロジェクトでこの設定を有効にしてください。これはパフォーマンスにとって非常に重要です。
- 日付範囲:
InvoiceDate>= [開始日] でフィルターをかけます。無制限のエクスポートはタイムアウトの原因となるため避けてください。 - 会社フィルター: D365は複数エンティティシステムです。クロス会社分析を意図しない限り、異なる法的エンティティのデータが混在するのを避けるために、常に
DataAreaIdでフィルターをかけてください。 - ワークフロー履歴: ワークフロー履歴の標準エンティティは容量が大きくなる場合があります。ボリュームを管理可能に保つため、
VendInvoiceタイプに関連する履歴のみをエクスポートするようにしてください。
a クエリ例 config
/*
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データベースに設定します。完全な再エクスポートなしでデータを同期し続けるためにインクリメンタルプッシュを選択します。ジョブを実行してテーブルにデータを投入します。
SQL環境の準備: SSMSを開き、BYOD Azure SQLデータベースに接続します。新しいクエリウィンドウを開きます。
パラメータの設定: 以下に示すスクリプトの先頭にある変数宣言セクションを見つけます。分析したい期間に合わせて
@StartDateと@EndDate変数を更新します。特定の法的エンティティでフィルタリングする必要がある場合は、DATAAREAIDフィルター条件を更新します。スクリプトの実行: 完全なT-SQLスクリプトを実行します。このスクリプトは
UNION ALLを使用して、複数のテーブルからのデータを単一の標準化されたイベントログ形式に結合します。データの検証: 結果で
InvoiceNumberまたはEventTime列のnull値を確認します。転記済み請求書(VendInvoiceJourから)と保留中の請求書(VendInvoiceInfoTableから)の両方が表示されていることを確認します。結果のエクスポート: SSMSの結果グリッドを右クリックし、「結果を名前を付けて保存...」を選択します。ファイルをCSV(コンマ区切り)ファイルとして保存します。
アップロード用の形式設定: 必要に応じて、ProcessMindで要求される日付形式がISO 8601準拠(YYYY-MM-DD HH:MM:SS)であることを確認するために、CSVをExcelまたはテキストエディタで開きます。スクリプトが正常に実行された場合は、それ以上の変換は必要ありません。
ProcessMindへのアップロード: CSVファイルをProcessMindにインポートし、
InvoiceNumberをケースID、Activityをアクティビティ名、EventTimeをタイムスタンプにマッピングします。
設定
- エクスポート戦略:
LedgerJournalTransやVendTransのような大量のテーブルには、BYODの負荷を最小限に抑えるためにインクリメンタルプッシュを使用します。データの一貫性に疑いがある場合にのみフルプッシュを使用してください。 - タイムゾーン処理: Dynamics 365はデータをUTCで保存します。スクリプトはUTCを前提としています。分析に現地時間が必要な場合は、スクリプト内またはProcessMindへのインポート中に
DATEADD調整を適用してください。 - 会社フィルタリング:
DataAreaId列は法的エンティティを表します。スクリプトはデフォルトですべてのエンティティのデータを抽出します。特定のグループ会社にフィルターをかけるには、WHERE DataAreaId = 'usmf'(例)を追加してください。 - ワークフロー履歴:
WorkflowTrackingStatusTableテーブルは承認タイムスタンプにとって非常に重要です。このテーブルはデフォルトで省略されることが多いですが、BYODエクスポート構成に含めるようにしてください。 - データ保持: 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;