PO Monitoring: Finding transmitted order not responded by the supplier
This article shows you how to search for open purchase orders that haven’t been acknowledged by the supplier after receiving the order. This is a key performance indicator for companies that need to monitor purchase order (PO) lifecycles. PO monitoring plays a critical role in maintaining effective communication and coordination between buyers and suppliers, ensuring that all parties are aligned and informed throughout the process, and enhancing overall supply chain visibility. A proactive approach minimizes the risk of errors or delays, enabling businesses to maintain efficient operations and uphold customer satisfaction.
KPI search example
It is important to identify which suppliers are having trouble sending acknowledgments. To analyze this, you can focus on those suppliers who have not sent PO acknowledgments (EDI 855) and investigate further to determine which suppliers are experiencing the most issues with their EDI systems. By using the now()
function to calculate the current time and comparing it with the PO transmission time, you can determine the time difference and gain visibility into orders that might be delayed due to the supplier's lack of response.
The search also uses the stats
command to count transactions by each transaction ID
, which allows you to identify EDI transactions for which no acknowledgment has been received. If the count is 2, then an acknowledgment has been received; if the count is 1, no acknowledgment has been received. For transactions with a count of 1, the duration between the transaction event and the current time will be calculated.
index=supply_chain_edi sourcetype="edi:x12" edi_code IN (850 855) | table _time edi_ack_status edi_buyer edi_code edi_code_ack edi_cont_num edi_date edi_flag edi_requestor edi_responder edi_seller edi_sequence edi_time edi_tr_id edi_type | eval edi_ack_status_combo=edi_code+"-"+edi_code_ack+"-"+edi_ack_status | eval edi_code_groupby=if(isnull(edi_code_ack), edi_code, edi_code_ack) | stats last(_time) AS _time, earliest(_time) AS time_po, latest(_time) AS time_po_ack, last(edi_requestor) AS edi_requestor, last(edi_responder) AS edi_responder, first(edi_code) AS edi_type, values(edi_code) AS edi_code, dc(edi_code) AS edi_code_cnt, last(edi_ack_status) AS edi_ack_status BY edi_tr_id | eval time_current=now() | eval time_wait_po_ack=(time_current-time_po)/60/60/24 | eval po_ack_status=if(edi_code_cnt==2, "PO_acknowledged", "NOT_acknowledged") | search time_wait_po_ack>=6 po_ack_status=NOT_acknowledged
The result shows which suppliers have not responded to the PO EDI 850 by comparing the current time with when the order was originally sent. This could indicate technical issues on the supplier’s side in recognizing EDIs, or business/process challenges in processing the orders. Identifying these delays early on provides a valuable opportunity to proactively address potential future disruptions.
Search explanations
Splunk search | Explanation |
---|---|
index=supply_chain_edi sourcetype="edi:x12" edi_code IN (850 855) |
Select EDI X12 data by selecting sourcetype of edi:x12 . |
| table _time edi_ack_status edi_buyer edi_code edi_code_ack edi_cont_num edi_date edi_flag edi_requestor edi_responder edi_seller edi_sequence edi_time edi_tr_id edi_type |
Format the relevant fields into a table. |
| eval edi_ack_status_combo=edi_code+"-"+edi_code_ack+"-"+edi_ack_status |
Create a new evaluated field edi_ack_status_combo that combines edi_code , edi_code_ack , edi_ack_ status field. Use another eval command to create edi_code_groupby field to join all EDI events with EDI 997 acknowledgment events. |
| stats last(_time) AS _time, earliest(_time) AS time_po, latest(_time) AS time_po_ack, last(edi_requestor) AS edi_requestor, last(edi_responder) AS edi_responder, first(edi_code) AS edi_type, values(edi_code) AS edi_code, dc(edi_code) AS edi_code_cnt, last(edi_ack_status) AS edi_ack_status BY edi_tr_id |
Join all EDI events with EDI 997 (acknowledgment) events into a single event. A successfully joined event will have EDI Events with null values in Add a time element into search, the first time of the event matched. |
| eval time_current=now() |
Calculate Then calculate |
| eval po_ack_status=if(edi_code_cnt==2, "PO_acknowledged", "NOT_acknowledged") |
Create a filter criteria for not acknowledged PO. |
| search time_wait_po_ack>=6 po_ack_status=NOT_acknowledged |
Apply the filter for EDI 850 purchase orders have no business level acknowledgement. |
Next steps
When you have this search running in your Splunk platform, return to the Monitoring purchase order lifecycles use case to learn how to share the results with stakeholders and to find other KPIs you might want to measure. You can also review the Supply Chain Optimization Solution Accelerator for more great use cases to help you use the Splunk platform to be successful in your supply chain operations.