Shown below is a close-up screenshot of the “Data Grid” quadrant of the Sales Predictor component. This section will describe this quadrant in detail.

The header name of any/all columns in the Data Grid can be changed to a custom value. For example, “Customer_TX” can be displayed as “Customer Description”.
There are two “modes” or “views” of the Data Grid. The condensed view shows a subset of the columns contained in the results table. Information is stored and presented by Customer/Item combination. The expanded view shows all columns contained in the results view. The view can be toggled back and forth by pressing the “Show Extra Columns” / “Hide Extra Columns” button in the Filter Pane.\ The results presented to the user are up-to-date as-of the “Last_Processed_Date”. Processing in the SQL job ensures that these records are processed at the frequency required for users.\ Descriptions column-by-column of the information provided in the grid using the default “Display As” names are provided below. Anything displayed in bold font is shown in the condensed view. Information in the Data Grid can be ordered by clicking a column header.
Customer_CD\ One of the two “Key” columns. The Customer code.
Customer_TX\ The Customer description or text value.
Item_CD\ One of the two “Key” columns. The Item code.
Item_TX\ The Item description or text value.
DepAttu1_TX\ The 1st dependent attribute value. Stored as text but can be anything, such as the result of a custom analysis.
DepAttu2_TX\ The 2nd dependent attribute value. Stored as text but can be anything, such as the result of a custom analysis.
DepAttu3_TX\ The 3rd dependent attribute value. Stored as text but can be anything, such as the result of a custom analysis.
Num_Data_Points\ The number of days with historical data for the timeseries. If source data was provided with multiple orders on the same day, the shipments are aggregated to present a single data point.
Last_Shipment_Qty\ The quantity value for the most recent data point of the timeseries. When runout is calculated using a usage rate, the system uses the calculated rate and determines the number of days at that rate it would take for this quantity to be depleted.
Last_Shipment_Date\ The date value for the most recent data point of the timeseries.
Shipment_Average\ The average quantity of all shipments in the timeseries.
Shipment_Sigma\ The standard deviation of all shipments in the timeseries.
Interval_Average\ The average number of days between consecutive shipments for the timeseries.
Interval_Sigma\ The standard deviation of the number of days between consecutive shipments for the timeseries.
Rate_Average\ The average usage rate between consecutive shipments for the timeseries. Usage rate is calculated as the shipment quantity divided by the amount of time before the next shipment.
Rate_Sigma\ The standard deviation of the usage rate between consecutive shipments for the timeseries.
Is_Statistically_Active\ The system looks at the time range of history available (last shipment date minus first shipment date) and the time since the last shipment (last processed date minus last shipment date). The time since the last shipment must be within X percent of the historical data range for the timeseries to be considered “Active”. The motivation behind this analysis is to try to flag timeseries that might be obsolete. The value of X is configurable using the “PctDataRange_Active” parameter with a default value of 100.
Is_Statistically_Valid\ The analysis behind the runout calculation utilizes an assumption of a normal distribution of shipment data. The validity of this assumption depends on the amount of historical data present. If the number of data points for a timeseries is less than X, the timeseries is considered to not be valid. The value of X is configurable using the “NumDataPoints_Valid” parameter with a default value of 2, the minimum required to calculate a standard deviation.
Runout_Interval_Minus_Sigma\ The date by which the Customer would run out of the Item if they consume the last shipment slightly more frequently than usual (Average - 1 x Standard Deviation).\ They should order by this date approximately 15.8% of the time.
Runout_Interval_Average\ The date by which the Customer would run out of the Item if they consume the last shipment as frequently as they usually do (Average).\ They should order by this date approximately 50% of the time.
Runout_Interval_Plus_Sigma\ The date by which the Customer would run out of the Item if they consume the last shipment slightly less frequently as they usually do (Average + 1 x Standard Deviation). They should order by this date approximately 84% of the time.
Runout_Interval_Plus_2_Sigma\ The date by which the Customer would run out of the Item if they consume the last shipment significantly less frequently than they usually do (Average + 2 x Standard Deviation). They should order by this date approximately 97.6% of the time.
Runout_Rate_Minus_Sigma\ The date by which the Customer would run out of the Item if they would consume it at a slightly faster rate than usual (Average - 1 x Standard Deviation).\ They should order by this date approximately 15.8% of the time.
Runout_Rate_Average\ The date by which the Customer would run out of the Item if they would consume it at the same rate they usually do (Average).\ They should order by this date approximately 50% of the time.
Runout_Rate_Plus_Sigma\ The date by which the Customer would run out of the Item if they would consume it at a slightly slower rate than usual (Average + 1 x Standard Deviation).\ They should order by this date approximately 84% of the time.
Runout_Rate_Plus_2_Sigma\ The date by which the Customer would run out of the Item if they would consume it at a significantly slower rate than usual (Average + 2 x Standard Deviation).\ They should order by this date approximately 97.6% of the time.
Runout_Score
The Runout_Score cell is colored according to the following scale.
Runout_Probability\ The cumulative distribution function of the normal distribution is used to compute the probability that the Customer has not ordered the Item based on the number of days since the last shipment date. Probabilities are calculated based on the interval and rate distributions. These results are averaged to provide a single number between 0 and 1.
Margin\ The amount of profit utilized by selling a single unit of the Item to the Customer. Stored as a dependent attribute.
Estimated_Value\ The estimated amount of profit that could be realized by following up on a lead.\ Calculated as Shipment_Average x Margin x Runout_Probability. Note, this calculation is not performed automatically by the system, and must be performed after the sink records have been processed. This allows the implementation of a custom calculation for Estimated_Value.
Last_Ack_Date\ The most recent date that a user has updated the status of the timeseries.
Last_Ack_User\ The last user to update the status of the timeseries.
Last_Ack_Status\ The last status entered against the timeseries. Can be free-form or selected from a configurable dropdown.
Last_Processed_Date\ The last time the timeseries was processed by the background service. All calculations are up-to-date as-of this date. Records should be processed daily or whenever the source data table is updated with new information.
The Sales Predictor component can be configured to integrate with Arkieva RLS. Integration with Arkieva RLS will pre-filter the Data Grid to Customers and/or Items that the logged-in user is allowed to interact with. This feature requires additional configuration in the Setup Manager and an additional daily step to ensure that RLS is synced with the data in the result table. This feature can be enabled/disabled using the “UseRLS” setting.
Shown below is a close-up screenshot of the “Filter Pane” quadrant of the Sales Predictor component. This section will describe this quadrant in detail.
The label text displayed in the application can be customized by the consultant. This includes the name of the pane “Filter Pane”, the text displayed to the left of each dropdown or entry box, and the text displayed on each button.
There are two types of filters available: dropdown list and numerical entry.\ The dropdown list filters are populated with the distinct set of values for the filtered column available in the unfiltered data set to the user, including any RLS restrictions. The dropdown list filters also allow text based filtering. Rather than selecting a single dropdown value by clicking the arrow at the right of the control, the user can click into the control and type. User-entered text is used as a “contains” filter. For example, if the user enters “72” into the Dependent Attribute 1 dropdown list, it will show all records in the Data Grid with a value of DepAttu1_TX containing the string “72”. The options available in the dropdown boxes are refreshed whenever the component is initially opened. Any RLS changes will not be reflected until the component is closed and re-opened by the user. Dropdown list filters can be reset by setting their value back to “All”.\ The numerical entry filters are based on the number of days between a date column value and the current date. Any record with that many days or greater between the column value and the current date is included in the Data Grid. Multiple filters can be applied at the same time.\ A description filter-by-filter of the options available to the user is shown below.
Customer\ Dropdown list populated with the distinct values of Customer_TX
Item\ Dropdown list populated with the distinct values of Item_TX
Dependent Attribute 1\ Dropdown list populated with the distinct values of DepAttu1_TX
Dependent Attribute 2\ Dropdown list populated with the distinct values of DepAttu2_TX
Dependent Attribute 3\ Dropdown list populated with the distinct values of DepAttu3_TX
Runout Score\ Dropdown list populated with the distinct values of Runout_Score
Is Statistically Active?\ Dropdown list populated with the distinct values of Is_Statistically_Active
Is Statistically Valid?\ Dropdown list populated with the distinct values of Is_Statistically_Valid
Days Since Last Ack\ Numerical entry filter with difference calculated between current date and Last_Ack_Date
Days Since Last Shipment\ Numerical entry filter with difference calculated between current date and Last_Shipment_Date
Filters are applied to the results in the Data Grid by clicking “Apply Filters”. The full or condensed view of the Data Grid is toggled by clicking “Show Extra Columns” or “Hide Extra Columns” (same button but the label will change depending on the current view of the grid). The Data Grid can be refreshed by clicking “Refresh Data”, this is useful if a user is about to call a Customer but is not sure if another user has called since the last time they’ve applied filters or refreshed data.
Shown below is a close-up screenshot of the “Information Pane” quadrant of the Sales Predictor component. This section will describe this quadrant in detail.

The label text displayed in the application can be customized. This includes the name of the panes (“Lead Info”, “Statistical Summary”, and “Runout Summary”), the text displayed to the left or above each variable, and the text displayed on each button.\ The text displayed in the “Runout Message” (colored tile) can be customized as well for the value of each score. For example, a Runout_Score of 4, 5, and 6 can display a message of “Call Now!” while a Runout_Score of 0, 1, 2, and 3 can display a message of “Don’t Call”. The message can be custom for each value of Runout_Score as well. The color of the tile matches the color in the Data Grid.
The “Information Pane” is split up into the following sections: Lead Info, Statistical Summary, Runout Summary
Lead Info\ The “Lead Info” section contains basic information about the Sales Lead, i.e. the Customer and Item along with the runout score. It also contains the “Snooze this Lead”, “Forward this Lead”, and “Publish to SalesForce” buttons.
Button Actions\ The “Snooze This Lead” button opens a “Status Box” popup window (shown below). The user can type in a custom status for the lead or select a pre-configured value from the dropdown list. Pressing “OK” will update the value of Last_Ack_Status with the value in the Status box, update the value of Last_Ack_Date with the current date, update the value of Last_Ack_User with the logged in user, and refresh the Data Grid.

The “Forward this Lead” button will open a pre-populated email template using a mailto:// link (shown below). The email will populate the subject line, and body of the email. The email body will contain the Customer_TX and Item_TX values for the lead.

The “Publish to SalesForce” button will open an Error popup unless integration with the Arkieva Data Connector and SalesForce is configured (shown below). Integration with SalesForce is not discussed in this guide.

Statistical Summary\ The “Statistical Summary” section presents information contained in the Data Grid in a more readable format.
Runout Summary\ The “Runout Summary” section presents information contained in the Data Grid in a more readable format.
Shown below is a close-up screenshot of the “Chart Pane” quadrant of the Sales Predictor component. This section will describe this quadrant in detail.

The chart text displayed in the application can be customized by the consultant. This includes the names of the charts (“Shipment History” and “Runout Calculation”) and the names of the series plotted in the charts.
The “Charts Pane” is split up into two sections, each with a chart: Shipment History, Runout Calculation.
Shipment History\ The “Shipment History” chart displays the historical orders by day in the Source Data table for the selected Customer and Item. The value of Shipment_Average is also plotted as a dashed line.
\ Runout Calculation\ The “Runout Calculation” chart displays the last shipment, and the runout dates used to determine the Runout_Score and Runout_Probablity. An annotated version of the “Runout Calculation” chart with matching descriptions is shown below.

📘 Note
Note that the Runout_Score for the above timeseries would be 6 as the Arrow is to the right of all 6 runout dates. If the Arrow was between annotations 4 and 5, for example, its Runout_Score would be 3. Also note that the solid lines will not always be to the left of the dashed lines. Large variability in shipment intervals, for example, can cause wider spacing of runout dates calculated from the interval than from the rate. Despite the larger variability in shipment intervals, correspondingly higher or lower shipment quantities for higher or lower intervals could result in a calculated rate with low variability.
This section provides a walk-through sample calculation for Customer/Item combination from anonymized data performed on 2019-08-27.
The sample calculation will use the following sample dataset.
| 486933 | 28 | 2017-11-13 | 45.36 |
| 486933 | 28 | 2018-01-26 | 45.36 |
| 486933 | 28 | 2018-10-22 | 90.72 |
This section shows a calculation item-by-item of information displayed in the “Statistical Summary”.
σ_d=(σ_r×Last_Shipment_Qty)/(Rate_Average)^2
(2σ)_d=2×(σ_r×Last_Shipment_Qty)/(Rate_Average)^2
This section shows how the runout dates are qualified/quantified into their corresponding score or probability.
Runout_Score
Runout_Probability\ Center a normal distribution on Runout_Interval_Average such that x is the days after the calculated value for Runout_Interval_Average. Calculate the value of x using Last_Processed_Date 2019-08-27, the value is 138. Calculate the value of the cumulative distribution function using the following formula (1) below. This is the probability that a shipment has not been made by the Last_Processed_Date based on the distribution of observed usage intervals. The value is 0.92. Center a normal distribution on Runout_Rate_Average such that x is the days after the calculated value for Runout_Rate_Average. Calculate the value of x using Last_Processed_Date 2019-08-27, the value is 77. Calculate the value of the cumulative distribution function using the following formula (2) below. This is the probability that a shipment has not been made by the Last_Processed_Date based on the distribution of observed usage rates. The value is 0.72. Calculate the average of these probabilities. The value of Runout_Probability is 0.82.
Formula 1: CDF=1/2 [1+erf(x/(σ_i √2))]
Formula 2: CDF=1/2 [1+erf(x/(σ_d √2))]
The standard estimation for the value of a sales lead is a function of the probability of converting into an actual sale, the expected quantity of the sale, and the margin of each unit of the sale.
Estimated_Value
This section shows a few tips and tricks for customizing an Arkieva Sales Predictor implementation.
Uses for result data
Get creative with the use of “Dependent Attributes”
Custom documentation page
