Try OpenEdge Now
skip to main content
Application Developer's Guide
Developing Balanced Scorecard applications : Balanced scorecard infopads : Defining rule file syntax for balanced scorecard infopads : Finance, customer, innovation/growth, and internal infopads rule file syntax
 
Finance, customer, innovation/growth, and internal infopads rule file syntax
The examples provided represent the FinanceInfoPad, but also apply to the Customer, Innovation, and Internal InfoPads. In the following sample, the defined infopad is presented in code formatted text, immediately followed by the infopad explanation.

Syntax

Finance := new persistent
infopad<cell{WorstValue:float,BestValue:float,CurrentValue:float,
RelativeWeight:float,Score:float,NegativeRange:string,Description:
string,Unit:string}>[][7]("Finance");
The infopad is defined with an unspecified length in the rows. One row is added for each new time period, typically a month. The value seven signifies the number of KPIs plus one. The extra column is for the sum of the perspective values Score and RelativeWeight.
The infopad contains six custom slots in addition to the default count slot. WorstValue contains the worst-case value for a specific KPI. BestValue contains the value that represents the goal for that KPI. If the company achieves the best value, then it is equal to 10. CurrentValue holds the value collected by the processes. RelativeWeight contains the weight that this KPI contributes to the total perspective score. Again weights should add up to one in the aggregate, but you can normalize later when calculating. Score holds the score for this KPI, calculated from the best, worst, and current values. NegativeRange is either T or F. In the case of T, it indicates that the best and worst values define a negative range. An example of a negative range would be 35 to 4. A KPI which exhibits this would be EmployeeTurnover where 35% is bad and 4% is good. If NegativeRange is F, then it indicates a normal range such as 5 to 50 percent exhibited by the return on investment KPI.
Finance.addColLabels("KPI", list{"Product Revenues", "Service
Revenues", "Product Revenue Growth", "Service Revenue Growth",
"Profit Margin", "Sales Pipeline", "FinanceScore"});
This line defines the column labels. The first value is title for the collective group of column titles, in this case, "KPI." The last value is artificial, and consists of the perspective name, Finance, appended with Score. This represents the column for the totals, that is the overall finance perspective score and relative weight. All of the titles in between are the titles of the individual KPI for the finance perspective.
Finance.addRowLabels("Months",
list{common::common_rules::MonthLookupInfopad[NOW.month()][1].nonth
Name+NOW.year()});
This line defines the row label for the first and the only row so far. As the infopad was defined with unspecified row length, it only has one default row. However, you can schedule an event later which adds additional rows at the given time. This line assumes you want to name the rows with the name of the month appended with the year. For example, March2005. A similar naming pattern is followed for additional rows.
Finance[1][1].WorstValue := 125000.0;
This slot holds the worst-case value for this KPI. If the current value is equal to this value, then the score is 0.
Finance[1][1].BestValue := 1500000.0;
This slot holds the best value for this KPI. If the current value is equal to this value, then the score is 10.
Finance[1][1].CurrentValue := 1250000.0;
This slot holds the current value of this KPI. This value is updated from a rule triggered by the periodically-run collection process.
Finance[1][1].Unit := "dollars";
Finance[1][1].Description := "Finance - Product Revenues";
These slots define the unit and description.
Finance[1][1].RelativeWeight := 0.25;
This slot holds the weight for this KPI.
Finance[1][1].NegativeRange := "F";
We recommend you set the negative range explicitly to the correct value for each KPI.
Finance[1][1].Score := 8.181818;
This slot holds the score for this KPI. This is computed dynamically when the best, worst, or current values or relative weights change.
Same steps are repeated for all the KPIs.
Finance[1]["FinanceScore"].BestValue := 1.0;
Finance[1]["FinanceScore"].WorstValue := 0.0;
For the Finance perspective, best and worst values are defined, that are used for the graphical display on a dial.
Finance[1]["FinanceScore"].Score := 8.151753;
This slot holds the score for the perspective. Note that this is the cell in the last column and the last row.
Finance[1]["FinanceScore"].RelativeWeight := 1.0;
This slot holds the sum of the relative weights of all the KPI in this perspective. This value normalizes the perspective score.
Finance.check("worstcheckFinance","WorstValue","NE","slot[
WorstValue]","absolute");
This action sets an alarm condition which sends an event every time the condition is triggered. In this case, every time the Worst Value is updated, the name is sent with the alarm event. When the event corresponding to this event is sent, the worst value from the FinanceInfopad is modified. You can streamline your rules using this information. Similar shortcuts apply for other alarm generated events as well.
Finance.check("bestcheckFinance","BestValue","NE","slot
[BestValue]","absolute");
This action sends an event every time the BestValue is updated.
Finance.check("currentcheckFinance","CurrentValue","NE","slot[
CurrentValue]","absolute");
This action sends an event every time the CurrentValue is updated.
Finance.check("relativecheckFinance","RelativeWeight","NE","slot[
RelativeWeight]","absolute");
This action sends an event every time the RelativeWeight is updated.
Finance.check("scorecheckFinance","Score","NE","slot[Score]","
absolute");
This action sends an event every time the Score is updated for both the KPI and perspective scores.