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

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

      Excellent Information!

      Author's profile photo Xavier Le Garrec
      Xavier Le Garrec

      Hi venkatakrishna thogara

      Great blog ! following a discussion on the Compensation Partner Delivery Community forum over the past days, forwarding some information that can be helpful to many who are trying to build custom VarPay statements :

      "If you would like to obtain the xml mapping for varpay data to create a statement :

      1. You have to load this template and load it into SAP, then launch it against completed varpay forms.
      2. These outputs are viewable in HTML ONLY so after launch, you’d have to ensure permissions are set to be able to view the generated extract from employee profile or from the comp form (if enabled).
      3. Even then, some of the mappings are vague and you’d need to compare the html output against completed forms to verify all the data aligns"

      Hope it helps.

      Also adding below some knowledge shared on the Partner Delivery Community forum recently :

      Author's profile photo Mohd Shahvez
      Mohd Shahvez

      Hi Xavier Le Garrec


      Can you please help me with this, what content should we load in the template & where should we load in SAP & how to launch the same for completed variable pay forms.


      Mohd Shahvez

      Author's profile photo Xavier Le Garrec
      Xavier Le Garrec

      Hi Mohd Shahvez

      Unfortunately I don't build custom statements. We have a specific Custom Reporting team at SAP that builds them for customers.

      All the best,


      Author's profile photo Carole Le Garrec
      Carole Le Garrec

      Hi venkatakrishna thogara,

      Many thanks for those informations. It is very helpful !

      In my combined statement, I managed to display the goals payout amounts in the different assignments and the different business goals of my client but I can't get the amount for the individual goals. In your example the code is for the individual section amount, but I need to show the individual amount. I thaugth I could switch the individual section amount code by the individual amount id, but it looks like it does not want to be so easy.

      Have you ever done this with the individual amount? if, yes, I would be so greatful to you if you could help me!

      here a screenshot of the field I need to have in my combined statement : Many thanks

      Have a nice day