Skip to Content
Technical Articles
Author's profile photo venkatakrishna thogara

How to build Custom Variable Pay Combined Statement in SAP SuccessFactors !

We are all aware of having less information on how to build custom statements in variable pay. So, I would like to present my experience on VP custom combined statements.

What is covered:

  • Variable declaration of commonly asked fields that are not available in the standard statement
  • A couple of XSL functions.

What is not covered:

  • Design Principle
  • HTML and CSS details
  • Any other statement configuration or optimization
  • Lookup Tables

Tools required for development:

  •  Text Editor of your choice – I use Notepad+ +


  • Knowledge on SuccessFactors Variable Pay (at least as an end-user)
  • Intermediate to advanced HTML Knowledge (especially Tables)
  • Some knowledge of XSL functions

Target Audience

  • Experienced SuccessFactors Variable Pay Consultants
  • End Users

Requirements that are covered:

  • Multiple Goals Section Weightages with multiple assignments
  • Goal result Payout Amount of each Goal section
  • PM ratings
  • Individual Section amount
  • Sum of all Sections Achievements
  • Excluding of Goal section with zero weightage.
  • Populating Statement details based on Assignment count.


  • Multiple Goals Section Weightages with multiple assignments:

Variable to Pick Section Weight:

In general, vp-section-weight tag will pick the section weightage from Worksheet, but the XSL variable is different based on each condition.

Condition 1:Only one Goal section:

<xsl:variable name="SectionWeight" select="vp-bonus- assignment/ vp-business-section/ vp-section-weight"/>

Condition 2: Multiple Goal sections

<xsl:variable name="SectionWeight" select="vp-bonus- assignment/ vp-business-section[1]/ vp-section-weight"/>

<xsl:variable name="SectionWeight" select="vp-bonus- assignment/ vp-business-section[2]/ vp-section-weight"/>

Condition 3: Multiple Assignments for Employee

<xsl:variable name="SectionWeight" select="vp-bonus- assignment[1]/ vp-business-section[1]/ vp-section-weight"/>

<xsl:variable name="SectionWeight" select="vp-bonus- assignment[2]/ vp-business-section[1]/ vp-section-weight"/>

Condition4: Combined statement

<xsl:variablename="SectionlWeight-300" select="./vp-total-payout-report[@formTemplateId='300']/vp-bonus-assignment[1]/vp-business-section[1]/vp-section-weight"/>

Printing Variable Value:

<xsl:value-ofselect="$SectionlWeight-300 * 100"/>%</td>


  • Goal result Payout Amount of each Goal section:


Variable to Pick first Section Payout Amount:

<xsl:variablename="GoalPayoutamount--300" select="sum(./vp-total-payout-report[@formTemplateId='300']/vp-bonus-assignment[1]/vp-bonus-payout-item-list[1]/vp-bonus-payout-item/vp-bonus-payout-item-goal-payout-amount)"/>

Note: In order to pick second Section Payout Amount,we need to replace vp-bonus-payout-item-list[1] with vp-bonus-payout-item-list[2]

Printing Variable Value:

<xsl:value-ofselect="format-number($GoalPayoutamount --300, $userLocaleSpecificMoneyFormat, $userLocaleSpecificDecimalFormatter)"/>
  • Performance forms ratings:

As we know, we have a configuration check to present PM ratings as 1) Numeric values or 2) rating labels or 3) Both Numeric – rating labels in worksheets. But in statements, the standard vp-form-rating tag allows only numeric values.

variable to pick PM ratings:

<xsl:variablename="ratingstring--300" select="./vp-total-payout-report[@formTemplateId='300']/vp-form-rating”/>

Printing Variable Value:



To achieve rating as a label or (ratings – label) in a statement then we have two possible ways:

Method 1:

·       Create a custom field and use VLOOK UP TABLEs to get the output based on actual ratings.

·       Use the above custom field in the Statement.

Variable to pick custom fields:

<xsl:variablename="ratingstring--300" select="./vp-total-payout-report[@formTemplateId='300']/vp-custom-data/vp-custom-field[@id='ratingstring']"/>

Method 2:

Use <Xsl:choose> functionality to pick the ratings as labels .

Variable to pick PM ratings as (Numeric + Label):


<xsl:whentest="$ratingstring--300 = '5.0' ">

<b><xsl:value-ofselect="concat($ratingstring--300, ' ')"/>Extraordinary</b>


<xsl:whentest="$ratingstring--300 = '4.0' ">

<b><xsl:value-ofselect="concat($ratingstring--300, ' ')"/>Outstanding</b>


<xsl:whentest="$ratingstring--300 = '3.0' ">
<b><xsl:value-ofselect="concat($ratingstring--300, ' ')"/>Meets Expectations</b>


<xsl:whentest="$ratingstring--300 = '2.0' ">

<b><xsl:value-ofselect="concat($ratingstring--300, ' ')"/>Needs Development</b>


<xsl:whentest="$ratingstring--300 = '1.0 '">

<b><xsl:value-ofselect="concat($ratingstring--300, ' ')"/>Unsatisfactory</b>


  • Individual section Amount:


  • Variable to Pick Individual Section Amount:
<xsl:variablename="SectionlIndAmount--300" select="./vp-total-payout-report[@formTemplateId='300']/vp-bonus-assignment[1]/vp-individual-section/vp-section-amt"/>

Printing Variable Value:

<xsl:value-ofselect="format-number($SectionlIndAmount--300, $userLocaleSpecificMoneyFormat, $userLocaleSpecificDecimalFormatter)"/></td>


·Sum of all sections amount:

Printing Variable Value:

<xsl:value-ofselect="format-number($SectionlIndAmount--300 +$GoalPayoutamount--300 +$GoalPayoutamount2--300+ $GoalPayoutamount3--300, $userLocaleSpecificMoneyFormat, $userLocaleSpecificDecimalFormatter)"/></td>


  • Excluding  zero weightage Goal sections:

For example, we have multiple sections in the worksheet, and we must hide in statements based on the weightage of the section. To achieve this, we need to use “IF” conditions in Statements.

Here is the sample code to hide if user section weight is equal to zero.

<xsl:iftest="$SectionlWeight--300 * 100 &gt; 0.0">


<!-- Input your XSL Code Here à



Now it will populate the goal section in statements for those sections weightage is more than zero else it will be hidden.

  • Populating Statement details based on Assignment count:

It’s very common to the users having multiple assignments in an organization for a year and statement details need to be populated based on Assignment count.

EX: Employee A only one Assignment in 20/21 and Employee B having 3 Assignments in the same year 20/21, Now Employee A should see only 1 Assignment detail and Employee B should see all his 3 Assignment details in the statement.

To achieve this, we need to use the below XSL Variable to pick the count of Assignments for the user.

<xsl:variablename="count" select="count(./vp-total-payout-report[@formTemplateId='300']/vp-bonus-assignment)"/>

An above-mentioned variable gives us no. of Assignments then we need to use “IF” conditions in Statements to hide other assignments for users.

<xsl:iftest="$count = '1'">


<!—Input XSL code here à




Thank you for reading my blog, I hope this will help us to save a significant amount of time while building custom VP Statements for customers/clients.

Professional Certified – PMGM|CDP|SP



Assigned tags

      1 Comment
      You must be Logged on to comment or reply to a post.
      Author's profile photo Arijit Sardar
      Arijit Sardar

      Excellent Information!