Tag: Temporal Function

Temporal Reasoning in Oracle Policy Automation #3 : Time Travel

Temporal Reasoning in Oracle Policy Automation #3 : Time Travel

Following on from the previous parts of this series (which looked at the basics of Temporal Reasoning and Temporal Functions), this third post continues our investigation of temporal calculations in general, this time with a focus on another series of functions and concepts, that are closely involved in using temporal data to calculate numeric or currency amounts.

In the previous chapter of this series, we saw how the functions such as WhenLast() give us the capability to investigate the temporal data at our disposal and find out what was happening on a given date, according to the information you have.

How much would I have saved if?

Taking the example from the previous post and turning it upside-down, we can use Oracle Policy Automation to find out how much money would could save if we had been good and put money in our bank account. There are two principles here :

  1. We need to know how much money we are willing to save
  2. We need to know how regularly we are willing to put it in the bank account.

In real life, you might say to me:

“Richard, if I saved $1 a day, every day, since the beginning of the year : – how much money would I have now?”

In Oracle Policy Automation we can ask the same sort of question.  And of course, get the answer. The key points here are the daily sum, and the date range. In a sense, you are creating your own change points daily in order to calculate the result.

Again, it probably will not surprise you to know that there are a whole raft of Temporal Reasoning functions that work in similar ways to this one.  Suppose you admit to me, that you cannot save money on the weekend, because you like to go out and spend it instead.

“Richard, if I saved $1 a day every week day since the beginning of the year:- how much money would I have now?”

Your familiarity with Oracle Policy Automation probably helps you guess that the function IntervalDailySumIf exists, so you decide to use it, as in the example below.

At first glance, this looks alright. But it really isn’t. The problem is a common one when imagining Temporal Reasoning. The Boolean attribute “you are not spending the money instead” is not going to be very useful, since it is not a temporal value. You get to set it once in the Debugger – not for every weekend:

So mixing a Boolean and our temporal calculation produces a not very useful result. But thankfully Oracle Policy Automation can help. It includes a function to let us know if a day is a weekday or not, based on a range of dates. It returns a set of values that illustrate the changes. It is another example of a temporal reasoning function.

In the above case, the day is a weekday returns a set of change points showing you the way:


In the next episode of this series, we will look at the display of Temporal data to the end user, in a way that is easily readable.

Have fun

Temporal Reasoning in Oracle Policy Automation #1 : Time Travel

Temporal Reasoning in Oracle Policy Automation #1 : Time Travel

A while ago I was asking a friend what was the most frustrating and complicated thing when they started working with Oracle Policy Automation. Temporal reasoning came up pretty quickly, and after speaking with other friends and colleagues it definitely ranks highly on the list of most people’s bugbears. There have been lots of excellent articles and posts about this subject on other sites, and in the final part of the series I will share a set of useful links. But we are going to examine the topic over the course of the next few posts on the OPA Hub Website.

But now, into the subject. Let’s first of all consider some of the basics. What is all this about. Consider the following situation: I ask you for your date of birth, so that I can find out how old you are.

If I ask you the question this time next year, then the answer will be of course, different. But nothing has changed in my input data. You still have the same date of birth. But the nature of the response is that it changes over time. If that didn’t make sense, then my favourite is definitely the most obvious one for many people. How much money do you have in your bank account? And did you have the same amount in there last week?

This bank account example usually does it for most people! And what is more, the bank account example allows us to consider the next part of the temporal puzzle. Open a new Project in Oracle Policy Automation and create a new attribute called the temporal bank balance, of type Currency. Start the Debugger. Enter a value of 1200 for the bank balance.

Temporal Reasoning in Oracle Policy Automation Introduction

But what does that value actually mean? When did you have that money in your account?

Let’s add some more data to our Debugger session. Open the Change points >> dialog and add three lines. This is where the magic happens. This data will help us begin to see the concept of temporal reasoning.

Temporal Reasoning in Oracle Policy Automation Change Points Debugger

Add three change points, for the first, second and third of July (1000, 1100, 1500) . Looking at the data, we can use some Oracle Policy Automation Functions to understand how this data is actually represented.

In a Word document, enter the following rules (note that the dates are based on the ones I suggested):

Temporal Reasoning in Oracle Policy Automation Rules 1

Return to the Debugger and let’s look at the values.

Temporal Reasoning in Oracle Policy Automation Debug Result

Observe the values for the  three days in July are perhaps exactly what you are expecting. The ValueAt function has provided you the value on the date you specified. The surprises perhaps are from the other two. The bank balance today (assuming today is a date after the third of July and that you used the same data as my example ) is listed as 1500. In this case, Oracle Policy Automation has found that the last change point was July 3rd, and gives you that value. In summary – according to the data you entered, there was no change after the 3rd. Finally, the amount on June 30th, outside the data points you gave, is the amount you entered in the debugger right at the beginning.

If you right-click the temporal bank balance, and select Temporal Visualisation, then click the Temporal Visualisation tab on the left, the data is displayed visually:

Temporal Reasoning in Oracle Policy Automation Final

So in this first post, we have learned how to enter temporal data, and we have used a new temporal reasoning function to get the value on a specific date. In the second part of the post series, we will look at some more typical cases using temporal data and some more functions. More details can be found online of course.

Thanks for reading and see you soon!


Logo by Southpaw Projects LLC