Goals and Thresholds

Goal setting is a powerful exercise for reaching desired milestones, both long-term and day-to-day. They might be linked to real-world incentives, such as bonuses or awards for positive performance, or termination for negative performance. By knowing precisely what needs to be done and when it needs to be completed, the company can better determine where to concentrate resources and efforts. To assist you, Medallia offers capabilities that help you set goals for business units, and allows users to assess their performance through targeted dashboard reporting. 

Important: Medallia recommends setting goals only for units. Goal setting at the unit-group level can cause maintenance issues when the Medallia Experience Cloud instance is upgraded. If the company requests unit-group goals, contact your Medallia Expert Services representative or a Solutions Architect.

Begin by working with the company to understand what goals they want to set, and how they want to use survey data to measure progress. Help the company format their goals in a file you can import using Auto Importer. Lastly, build or modify custom reports to overlay goal data on charts, graphs, and other data visualizations.

Importing goals

You must import the company's goals using Auto Importer. For detailed information about importing data, see Importing.

Warning: The company is likely to provide their goals in a format that does not match that required by the Auto Importer XML specification. Use the Experience Cloud data transformation capabilities to ensure that the data is in a format usable by your specification. For information about transforming data, see Auto Importer Preprocessors.

Like all Auto Importer specifications, the XML specification you define for importing goals needs the following structure:

Begin with a declaration and input definitions that describe the structure of the source file. At minimum, ensure that your input includes columns for reporting_field, unit, calculation_dropdowngoal, and goal_time_period, For example:

<import-spec inputType="CSV" columnsCheck="ALLOW_EXTRA_OR_MISSING_COLUMNS" name="[UTILITY] Goal Import AI">
	<input-column heading="reporting_field" />
	<input-column heading="unit" />
	<input-column heading="unit_group" />
	<input-column heading="benchmark_unit_group" />
	<input-column heading="calculation_dropdown" />
	<input-column heading="goal" />
	<input-column heading="thresholds" />
	<input-column heading="goal_time_period" />
	<input-column heading="thresholds_time_period" />
	<input-column heading="min" />
	<input-column heading="max" />
	<input-column heading="start_date" />
	<input-column heading="end_date" />

In the output-column-group element, include the Goal plugin. Also specify the import mode. For example:

	<output-column-group pluginName="Goal" recordUpdateMode="CREATE_AND_UPDATE" multiUpdateMode="UPDATE_ALL">

Add output-column elements to map the input fields to Goal fields in Experience Cloud. Note that values for the fieldName attribute do not specify field names used in surveys. Experience Cloud creates a database table specifically for goal data, with columns named according to the fieldName values you define in the XML specification. For example:

	<output-column>
		<input-column heading="unit" />
		<target-field fieldId="unit" fieldName="Unit" requiredness="OPTIONAL_USED_FOR_DUPLICATE_CHECK" type="UNIT">
			<enumerated-field-parse-options mappingKey="IDENTIFIER" />
		</target-field>
	</output-column>
	...
</import-spec>

The following example shows a properly formatted XML specification for importing goals:

<import-spec inputType="CSV" columnsCheck="ALLOW_EXTRA_OR_MISSING_COLUMNS" name="[UTILITY] Goal Import AI">
	<input-column heading="reporting_field" />
	<input-column heading="unit" />
	<input-column heading="unit_group" />
	<input-column heading="benchmark_unit_group" />
	<input-column heading="apply_to_individual_units" />
	<input-column heading="calculation_dropdown" />
	<input-column heading="goal" />
	<input-column heading="thresholds" />
	<input-column heading="goal_time_period" />
	<input-column heading="thresholds_time_period" />
	<input-column heading="min" />
	<input-column heading="max" />
	<input-column heading="start_date" />
	<input-column heading="end_date" />
	<output-column-group pluginName="Goal" recordUpdateMode="CREATE_AND_UPDATE" multiUpdateMode="UPDATE_ALL">
		<output-column>
			<input-column heading="reporting_field" />
			<target-field fieldId="reporting_field" fieldName="Reporting Field" requiredness="REQUIRED_USED_FOR_DUPLICATE_CHECK" type="ENUMERATED">
				<enumerated-field-parse-options mappingKey="IDENTIFIER" />
			</target-field>
		</output-column>
		<output-column>
			<input-column heading="unit" />
			<target-field fieldId="unit" fieldName="Unit" requiredness="OPTIONAL_USED_FOR_DUPLICATE_CHECK" type="UNIT">
				<enumerated-field-parse-options mappingKey="IDENTIFIER" />
			</target-field>
		</output-column>
		<output-column>
			<input-column heading="unit_group" />
			<target-field fieldId="unit_group" fieldName="Unit Group" requiredness="OPTIONAL_USED_FOR_DUPLICATE_CHECK" type="UNIT_GROUP">
				<enumerated-field-parse-options mappingKey="IDENTIFIER" />
			</target-field>
		</output-column>
		<output-column>
			<input-column heading="benchmark_unit_group" />
			<target-field fieldId="benchmark_unit_group" fieldName="Benchmark Unit Group" requiredness="OPTIONAL" type="UNIT_GROUP">
				<enumerated-field-parse-options mappingKey="IDENTIFIER" />
			</target-field>
		</output-column>		
		<output-column>
			<input-column heading="apply_to_individual_units" />
			<target-field fieldId="apply_to_individual_units" fieldName="Apply To Individual Units" requiredness="REQUIRED_USED_FOR_DUPLICATE_CHECK" type="ENUMERATED">
				<enumerated-field-parse-options mappingKey="NAME" />
			</target-field>
		</output-column>
		<output-column>
			<input-column heading="calculation_dropdown" />
			<target-field fieldId="calculation_dropdown" fieldName="Calculation" requiredness="REQUIRED_USED_FOR_DUPLICATE_CHECK" type="ENUMERATED">
				<enumerated-field-parse-options mappingKey="LABEL" />
			</target-field>
		</output-column>
		<output-column>
			<input-column heading="goal" />
			<target-field fieldId="goal" fieldName="Goal" requiredness="OPTIONAL" type="GOAL_VALUE" />
		</output-column>
		<output-column>
			<input-column heading="thresholds" />
			<target-field fieldId="thresholds" fieldName="Thresholds" requiredness="OPTIONAL" type="THRESHOLDS">
				<thresholds-field-parse-options delimiter="|" />
			</target-field>
		</output-column>
		<output-column>
			<input-column heading="goal_time_period" />
			<target-field fieldId="goal_time_period" fieldName="Goal Time Period" requiredness="OPTIONAL" type="ENUMERATED">
				<enumerated-field-parse-options mappingKey="LABEL" />
			</target-field>
		</output-column>
		<output-column>
			<input-column heading="thresholds_time_period" />
			<target-field fieldId="thresholds_time_period" fieldName="Thresholds Time Period" requiredness="OPTIONAL" type="ENUMERATED">
				<enumerated-field-parse-options mappingKey="LABEL" />
			</target-field>
		</output-column>
		<output-column>
			<input-column heading="min" />
			<target-field fieldId="min" fieldName="Min" requiredness="OPTIONAL" type="FRACTIONAL" />
		</output-column>
		<output-column>
			<input-column heading="max" />
			<target-field fieldId="max" fieldName="Max" requiredness="OPTIONAL" type="FRACTIONAL" />
		</output-column>
		<output-column>
			<input-column heading="start_date" />
			<target-field fieldId="start_date" fieldName="Start Date" requiredness="REQUIRED_USED_FOR_DUPLICATE_CHECK" type="DATE">
				<date-field-parse-options format="yyyy/MM/dd" />
			</target-field>
		</output-column>
		<output-column>
			<input-column heading="end_date" />
			<target-field fieldId="end_date" fieldName="End Date" requiredness="REQUIRED_USED_FOR_DUPLICATE_CHECK" type="DATE">
				<date-field-parse-options format="MM/dd/yyyy" />
			</target-field>
		</output-column>
	</output-column-group>
</import-spec>

Goal table

You can view (but not edit) imported goal data on the Reporting > Report Helpers > Goals screen. For example:

Imported Goal data on the Goals screen

Key values

The Goals Table acts a lookup, allowing Experience Cloud to match goal entries to reporting as reports are rendered. If no goal is found, no value is returned in reports. The lookup (and therefore the uniqueness of goals entries) is based on the following key attributes:

  • Unit — Set goals individually for each unit (Unit ID), or to all units within a unit-group (UG ID). If you are setting a goal for all units within a unit-group Apply to Units must be true. Otherwise, Experience Cloud assumes the goal applies to the unit-group itself, which is not supported.
  • Fields — Set goals on individual fields, from any of the major field types (Q, E, K, and R).
  • Calculation Dropdown — Set goals independently for each calculation type. This is required, even for R-fields.
  • Date Range — Goals may span any date range, but are never combined across time periods.

Each goal entry in the goal table can have multiple values, composed of a goal and/or one or more thresholds. When you build your reports you can choose to show the goal, specific thresholds, all thresholds, or any combination of the goal and thresholds. A goal is a single value to be displayed in reporting, used when there is one clear goal. Thresholds are multiple values that you can use to create performance bands.

Goal and threshold types

Goals and thresholds can be of the following types:

  • Fixed — The goal or threshold value is a specific number, such as 7.8 or 95.
  • Relative - Percentile — The value is based on the unit's performance relative to its peers. The specific value at any point in time is the score required to move the unit into a certain performance percentile within the reference unit group.
  • Relative - Average — For goals, this returns the score for the individual unit. This is useful if a unit's goal is relative to itself in another time period (such as "Exceed your score for the previous year"). In this case, set the Goal Timeperiod to a previous-year time period. For thresholds, this returns the score for the reference unit group. This is useful if a unit's goal is relative to its peer group (such as "Above average performance in your region").

Relative goals and thresholds are relative to a reference unit-group. If you are setting a goal for all units within a unit-group, the unit-group in question (identified in the UG ID column) acts as the reference unit-group. Otherwise, you must specify a reference unit group by populating the Benchmark UG column.

Time periods

The Goal Timeperiod and Threshold Timeperiod columns define the time period over which relative targets are calculated. For example, a Threshold Timeperiod of Last 12 Months instructs Experience Cloud to look at the last twelve months of data when calculating an average or percentile threshold. These columns have no impact on fixed goals.

If there is no Goal Timeperiod or Threshold Timeperiod specified for a relative target, Experience Cloud uses the time period shown in the report.

To be used as a Goal Timeperiod or Threshold Timeperiod, the time period must have the Goals and Thresholds and Advanced Analytics kinds. For more information about creating time periods, see Timeperiods.

Warning: Time periods are calculated according to the end of the period being shown for each data point. Do not confuse this with the Start and End columns, which control when the goal entry applies (as opposed to how it is calculated).

Min and Max

The Min and Max columns set lower and upper bounds on the calculation of the target.

Displaying goals in custom report modules

To make progress toward goals evident to users, overlay goal information in a custom report. To do this, add one or more goal elements to the XML of a Custom Module

You can use a single goal element to display some or all of the goals or thresholds for a particular field. However, if the reporting application cannot find a specific goal for the unique combination of time period, unit, calculation, and field in the survey data, the goal element does not appear in the report. This is not the same as displaying a null value in an empty row or column. Rather, the report acts as though the goal element does not exist.

You can define the following attributes in each goal element:

AttributeDescription
goal-text Specifies the label for the goal in the legend. If you do not specify a value, the report displays "GOAL" in the legend.
field Specifies a field from which to do the calculations. If you do not specify a field, the field selected in the question-dropdown element or split is used.
thresholds-text Specifies the labels (separated by commas) for the threshold rows in the legend. If you specify nothing, the report displays the actual threshold values.
display-thresholds Specifies which thresholds to display (if not all). Indexing starts with 1, and proceeds numerically. For example, "1,5,6" displays the first, fifth and sixth defined thresholds. Use this attribute in with thresholds-text.
flags

Defines the splits (one or many) of the goal and/or thresholds. You can specify multiple flags for this attribute, with values separated by commas:

  • EXCLUDE_GOAL— If not set and there is no goal value, an empty entry is displayed. If included, the goal slice is not displayed.

  • EXCLUDE_NULL_BAND— Include this flag if you want to use Thresholds in any other chart except a dial chart. This removes the extra null threshold band that is needed in the dial chart.

  • EXCLUDE_THRESHOLDS— Threshold slices are not displayed.

  • INCLUDE_BOUNDS— Includes the MIN and MAX goal values. If either are not specified, dummy values are added to keep the structure of the table the same.

  • INCLUDE_EMPTY_SERIES— Includes all values, even if they are empty, which is useful to complete a table. Do not use this with dials, because it creates extra cells to accommodate a rectangular table when data is missing.

  • MERGE_THRESHOLDS— If a dynamic threshold is greater than a hardcoded threshold, then the dynamic threshold does not cross the absolute threshold value.

  • REVERSE_THRESHOLDS— Reverses the sorting of thresholds. No other types (for example, Goal, Min, and Max) are affected.

  • USE_CLOSE_OPEN_INTERVAL — Uses close-open intervals for thresholds when used in dynamic css comparisons, to include or exclude thresholds values from comparison. For example, you can decide to turn 89.0 either green or red if the goal is exactly 89.0. By default, the interval is open-close (start, end];. Adding this flag changes the interval to [start, end).

If you add neither EXCLUDE_THRESHOLDS nor INCLUDE_BOUNDS, another blank column or row is added. This functionality is specifically for speed dial custom reports, which is the only use case where the default behavior is beneficial.

css-class One or more CSS classes (separated by spaces) to apply to the rows or columns produced by this split.
min-sample-size Hides any rows or columns where the sample size is less than this value.
max-sample-size Hides any rows or columns where the sample size is greater than this value.
tag A hidden tag added to generated rows or columns. This is useful only for traceability when generating JSON data.

Basic table example

If you need only a basic table report to show goals and any thresholds, you can use the goal element with minimal attributes. For example, the following table shows a goal of 7.5 with thresholds of 3|AVG|80%:

Using the goal element to create a simple table

The following XML defines this report. Note that this report includes an extra null row because none of the EXCLUDE_THRESHOLDS, EXCLUDE_NULL_BAND, or INCLUDE_BOUNDS flags was set.

<analytics-report>
	<axis axis="Time">
		<optionbox-filter plugins="UNIT,TIMEPERIOD,RATEBY,RATEBY2,CALCULATION" />
		<timeperiod-dropdown-split/>
	</axis>
	<axis axis="Fields">
		<field-split fields="q_company_branch_ltr_5pt_na"/>
		<heading-blank />
		<goal field="q_company_branch_ltr_5pt_na" goal-text="My Goal" flags="EXCLUDE_THRESHOLDS" />
		<heading-blank />
		<goal field="q_company_branch_ltr_5pt_na" thresholds-text="Lower Bound,Upper Bound" display-thresholds="1,3" flags="MERGE_THRESHOLDS" />
	</axis>
</analytics-report>

Enhanced table example

The following table report includes more information than the basic table example, with additional attributes specified for the goal element:

Enhanced table using the goal attribute

The following XML defines this report:

<analytics-report>
	<axis axis="Time">
		<optionbox-filter plugins="UNIT,TIMEPERIOD,RATEBY,RATEBY2,CALCULATION" />
		<timeperiod-dropdown-split/>
	</axis>
	<axis axis="Fields">
		<field-split fields="q_company_branch_ltr_5pt_na"/>
		<heading-blank />
		<goal field="q_company_branch_ltr_5pt_na" goal-text="My Goal" 
			  flags="EXCLUDE_THRESHOLDS"
			  css-class="background-green"/>
		<heading-blank />
		<goal field="q_company_branch_ltr_5pt_na" 
			  thresholds-text="Lower Bound,Upper Bound" 
			  display-thresholds="1,3"
			  flags="MERGE_THRESHOLDS,EXCLUDE_GOAL,EXCLUDE_NULL_BAND"
			  css-class="background-gray" />
	</axis>
</analytics-report>

Bar chart example

The following bar chart includes overlaid threshold lines:

Bar chart example with threshold lines

The following XML defines this report:

<analytics-report>
	<chart type="COLUMN">
		<secondary type="SPLINE"  data-labels-enabled="true" />
	</chart>
	<axis axis="Time">
		<optionbox-filter plugins="UNIT,TIMEPERIOD,RATEBY,RATEBY2,CALCULATION" />
		<timeperiod-dropdown-split/>
	</axis>
	<axis axis="Fields">
		<field-split fields="q_company_branch_ltr_5pt_na"/>
		<chart-axis-separator />
		<goal field="q_company_branch_ltr_5pt_na" goal-text="My Goal" 
			  flags="EXCLUDE_THRESHOLDS"
			  css-class="background-green"/>
		<goal field="q_company_branch_ltr_5pt_na" 
			  thresholds-text="Lower Bound,Upper Bound" 
			  display-thresholds="1,3"
			  flags="MERGE_THRESHOLDS,EXCLUDE_GOAL,EXCLUDE_NULL_BAND"
			  css-class="background-gray" />
	</axis>
</analytics-report>

Troubleshooting

If a goal does not appear on a report, check that all four of the lookup attributes are set for the report, and have a matching goal entry. If the problem persists, check the following:

  • Do you want the report to show an individual unit only? You can accomplish this by using a filter attribute or a unit-split element in your report. If you use a unit-split element, make sure it appears before the goal element. This generally means the unit-split must be in the first axis. Remember to set a goal for the field referenced in the goal node.
  • Is there a goal set for that specific unit, or for a parent unit group with Apply to Units set to true?
  • Is there a calculation dropdown selected? The goals feature performs its lookup on whatever calculation is selected, even for r-fields. If you have the goal set for a particular calculation, be sure to define your report to use that calculation.
  • Is there a goal in the date range of every data point? The goal applied for each data point is based on the last day that data point covers. For example, a set of annual columns shows the goals set as of December 31st each year.

Displaying goals in Medallia Alchemy Experience report modules

If your company is using Medallia Alchemy Experience Reporting, you can display configure the following modules in Admin Suite to display goals: