FetchXML - Complete Reference
FetchXML Summary
FetchXML is a query language used in Microsoft Dynamics CRM and has following features:
- FetchXML can be used for retrieving data from Microsoft Dynamics CRM.
- FetchXML cannot be used for Create, Update and Delete operations.
- FetchXML can perform aggregations like Sum, Average, Minimum, Maximum, Count(*), Count(attributename)
- FetchXML query can do GoupBy, Sorting and Filter on linked entity.
- FetchXML queries are defined in XML format.
- FetchXML query can retrieve upto 5000 records in a single request.
- FetchXML allows paging results using paging cookie.
- FetchXML can be saved as user-owned view in the userquery entity and as an organization-owned view in the savedquery entity.
Retrieve All Attributes - FetchXML Query
In the following example, the FetchXML statement retrieves all attributes for account records:
Explanation
- <all-attributes /> clause makes FetchXML query to retrive all attributes for an entity.
As a best-practice retrieve only the required attributes for better performance. Retrieving selected attributes is explained below.
Retrieve All Records - FetchXML Query
In the following example, the FetchXML statement retrieves all accounts, with selected attributes:
Explanation
- FetchXML query will return all the records if no filter applied.
- To retrieve the selected attributes for an entity specify each attribute separately.
Filter Records Based On Related Entity
In the following example, the FetchXML statement retrieves all accounts where the last name of the owning user is not equal to Cannon:
Explanation
- To filter entity records add <link-entity> clause, ex <link-entity name='systemuser' to='owninguser'> . Where name attributes contains linked entity logical name and to attribute contains logical name of attribute in main entity which is linked to related entity
- Specify filter clause within link-entity.
- Within filter specify the filter criteria using <condition attribute='lastname' operator='ne' value='Cannon' /> . Where attribute contains logical name of attribute in related entity, operator defines the comparison type here ne means not-equal and value defines the value to compare.
Complete List Of FetchXML Operators
FetchXML Operator | Descritption |
---|---|
lt | Less Than |
gt | Greater Than |
le | Less Than or Equal To |
ge | Greater Than or Equal To |
eq | Equals |
ne | Not Equals |
neq | Not Equal To |
null | Does Not Contain Data |
not-null | Contains Data |
in | Is In |
not-in | Is Not In |
between | Between |
not-between | Is Not Between |
like | Like |
not-like | Not Like |
yesterday | Yesterday |
today | Today |
tomorrow | Tomorrow |
next-seven-days | Next Seven Days |
last-seven-days | Last Seven Days |
next-week | Next Week |
last-week | Last Week |
this-month | This Month |
last-month | Last Month |
next-month | Next Month |
on | On |
on-or-before | On or Before |
on-or-after | On on After |
this-year | This Year |
last-year | Last Year |
next-year | Next Year |
eq-userid | Equals Current User |
ne-userid | Does Not Equal Current User |
eq-businessid | Equals Current Business Unit |
ne-businessid | Does Not Equal Current Business Unit |
this-week | This Week |
last-x-months | Last X Months |
eq-userlanguage | Equals User Language |
eq-userteams | Equals Current User’s Teams |
in-fiscal-year | In Fiscal Year |
in-fiscal-period | In Fiscal Period |
in-fiscal-period-and-year | In Fiscal Period and Year |
in-or-after-fiscal-period-and-year | In or After Fiscal Period and Year |
in-or-before-fiscal-period-and-year | In or Before Fiscal Period and Year |
last-fiscal-year | Last Fiscal Year |
this-fiscal-year | This Fiscal Year |
next-fiscal-year | Next Fiscal Year |
last-x-fiscal-years | Last X Fiscal Years |
next-x-fiscal-years | Next X Fiscal Years |
last-fiscal-period | Last Fiscal Period |
this-fiscal-period | This Fiscal Period |
next-fiscal-period | Next Fiscal Period |
last-x-fiscal-periods | Last X Fiscal Periods |
next-x-fiscal-periods | Next X Fiscal Periods |
Limit Maximum Number Of Records Returned.
In the below example, the FetchXML returns top 3 records of account.
Explanation
- To limit maximum number of records returned specify count attribute in fetch node.
- Maximum 5000 records can be returned from FetchXML query.
Inner Join In FetchXML.
In the below example, the FetchXML performs inner join on account and contact entity and returns contacts where accountid of account matches parentcustomerid of contact.
Explanation
- To perform inner join in FetchXML query set following attributes in link-entity clause.
- Set name attribute to logical name of related entity.
- Set to attribute to linking attribute in primary entity.
- Set from attribute to linking attribute in related entity.
- Set link-type attribute to inner.
- Now within link-entity clause specify attributes from related entity to retrieve
Left Outer Join In FetchXML
A left outer join returns each row that satisfies the join of the first input with the second input. It also returns any rows from the first input that had no matching rows in the second input. The nonmatching rows in the second input are returned as null values.
In the below example, the FetchXML finds all accounts that have no leads
Explanation
You can perform a left outer join in FetchXML by using the entityname attribute as a condition operator. The entityname attribute is valid in conditions, filters, and nested filters.
- To perform left outer join in FetchXML query set following attributes in link-entity clause.
- Set name attribute to logical name of related entity.
- Set to attribute to linking attribute in primary entity.
- Set from attribute to linking attribute in related entity.
- Set link-type attribute to outer.
- In filter clause specify the condition with following attrbutes
- Set entityname attribute to logical name of related entity.
- Set attribute to linking attribute in related entity
- Set operator to valid FetchXML operator(null in this case).
Aggregates in FetchXML
In Microsoft Dynamics CRM FetchXML includes grouping and aggregation features that let you calculate sum, average, minimum, maximum and count.
The following aggregate functions are supported:
- sum
- avg
- min
- max
- count(*)
- count(attribute name)
About Aggregation
To create an aggregate attribute,
- Set the keyword aggregate to true in fetch node.
- Specify a valid entity name, attribute name, and alias (variable name).
- You must also specify the type of aggregation you want to perform, for example count, min, max etc.
The following example shows a simple aggregate attribute in FetchXML.
Average Aggregates
Following FetchXML calculates average of estimated value from opportunity.
Explanation
To calculate average set following:- Set aggregate to true in <fetch> clause.
- In <aggregate> attribute set aggregate to avg
Limitation with null values while computing average
Null values are not considered when Microsoft Dynamics CRM computes the average of data. However, zero (0) is used.In the following example, with the following data, the average for Account 1 (two entries) is shown as 250 whereas the average for Account 2 (two entries) is shown as 125.
Topic | Potential Customer | Estimated value |
---|---|---|
Opportunity 1 | Account 1 | null |
Opportunity 2 | Account 1 | 250 |
Opportunity 3 | Account 2 | 0 |
Opportunity 4 | Account 2 | 250 |
Count Aggregate
The following FetchXML counts opportunity records
Explanation
To calculate count set following:- Set aggregate to true in <fetch> clause.
- In <aggregate> attribute set aggregate to count
Countcolumn Aggregate
Countcolumn aggregate counts records where specified column don’t have null.
In the following FetchXML opportunity count is returned where name column don’t have null values.
Explanation
To use countcolumn aggregate- Set aggregate to true in <fetch> clause.
- Set aggregate to countcolumn in aggregate attribute.
Count Distinct Columns
The following FetchXML counts all opportunities with distinct names
Explanation
To count distinct column values- Set aggregate to true in fetch clause.
- Set aggregate to countcoumn in aggregate attribute
- Set distinct to true
Max Aggregate
Max aggregate returns the maximum value in a specified column.
Null values are not considered when Microsoft Dynamics CRM computes the maximum of data. However, zero (0) is used.
The following FetchXML shows how to get the maximum value from estimated column of opportunity entity.
Explanation
To get maximum value from a column set:- Set aggregate to true in fetch node.
- Set aggregate to max in aggregate attribute.
Min Aggregate
Min aggregate returns the minimum value in a specified column.
Null values are not considered when Microsoft Dynamics CRM computes the minimum of data. However, zero (0) is used.
The following FetchXML shows how to get the maximum value from estimated column of opportunity entity.
Explanation
To get minimum value from a column set:- Set aggregate to true in fetch node.
- Set aggregate to min in aggregate attribute.
Sum Aggregate
The following FetchXML calculates the sum of estimated value from opportunity entity.
Explanation
To get the sum of values in a column:- Set aggregate to true in fetch node.
- Set aggregate to sum in aggregate attribute.
Multiple Aggregates
Multiple aggregates can be computed in a single FetchXML query.
Following FetchXML calculates count, sum and avg from opportunity entity.
Explanation
To calculate multiple aggregate in single FetchXML query- Set aggregate to true in fetch node.
- For each type of aggregate add separate aggregate attribute and set aggregate value accordingly.
Group By
Aggregates can be grouped in FetchXML, to group aggregates set groupby attribute to true.
The following example returns opportunity records grouped by their owners.
Explanation
To group aggregates in FetchXML query- Set aggregate to true in fetch node.
- Add required aggregate attribute.
- Add group by attribute and set keyword groupby to true.
Group by with linked entity
The following FetchXML returns opportunities grouped by opportunity owner’s managers.
Explanation
To create group by with linked entity FetchXML- Set aggregate to true in fetch node.
- Add required aggregate attribute in entity clause.
- Add link-entity clause in entity clause.
- Add group by attribute in link-entity clause and set keyword groupby to true.
Group By Year
Group By for dates uses the day, week, month, quarter or year value.
The following FetchXML query shows how to use the aggregate attribute and the groupby attribute to group the results by year.
Explanation
To create group by Year FetchXML query:- Set aggregate to true in fetch node.
- Add required aggregate attribute in entity clause.
- Add group by attribute set keyword groupby to true and dategrouping to year.
Group By Quarter
The following example shows how to use the aggregate attribute and the groupby attribute to group the results by quarter.
Explanation
To create group by Quarter FetchXML query:- Set aggregate to true in fetch node.
- Add required aggregate attribute in entity clause.
- Add group by attribute set keyword groupby to true and dategrouping to quarter.
Group By Month
The following FetchXML shows how to use the aggregate attribute and the groupby attribute to group the results by month.
Explanation
To create group by Month FetchXML query:- Set aggregate to true in fetch node.
- Add required aggregate attribute in entity clause.
- Add group by attribute set keyword groupby to true and dategrouping to month.
Group By Week
The following FetchXML shows how to use the aggregate attribute and the groupby attribute to group the results by week.
Explanation
To create group by Week FetchXML query:- Set aggregate to true in fetch node.
- Add required aggregate attribute in entity clause.
- Add group by attribute set keyword groupby to true and dategrouping to week.
Group By Day
The following FetchXML shows how to use the aggregate attribute and the groupby attribute to group the results by week.
Explanation
To create group by Day FetchXML query:- Set aggregate to true in fetch node.
- Add required aggregate attribute in entity clause.
- Add group by attribute set keyword groupby to true and dategrouping to day.
Multiple group by
The following FetchXML shows how to use the aggregate attribute and multiple groupby clauses.
Explanation
To create multiple group by FetchXML query:- Set aggregate to true in fetch node.
- Add required aggregate attributes in entity clause.
- Add multiple group by attributes by setting keyword groupby to true.
Order by
The following FetchXML query shows how to use the aggregate attribute and multiple orderby clauses.
Explanation
To create order by FetchXML query:- Add order clause in entity and set descending keyword to true or false.
Fiscal Date in FetchXML
A FetchXML query can query data on fiscal dates. For example, a FetchXML query can find all orders fulfilled in the last fiscal month or urgent cases with high severity that are older than 15 minutes.
For all fiscal date queries, the FetchXML query uses the organization’s fiscal year settings.
Last Fiscal Period FetchXML Query
The following example shows a FetchXML expression that finds all orders fulfilled in the last fiscal period, according to the organization’s fiscal year settings.
For example, if the organization uses fiscal months, the query returns orders fulfilled in the last fiscal month. If the organization uses fiscal quarters, the query returns orders fulfilled in the last fiscal quarter. If the organization uses fiscal semesters, orders fulfilled in the last fiscal semester are returned.
Explanation
To create last fiscal period FetchXML query:- In condition attribute set operator keyword to last-fiscal-period.
In Fiscal Year FetchXML Query
The following example shows a FetchXML expression that finds all accounts created in fiscal year 2013.
Explanation
To create In Fiscal Year FetchXML query:- In condition attribute set operator keyword to in-fiscal-year.
next-x-fiscal-years Query
The following example shows a FetchXML expression that finds all opportunities with an estimated close date in the next three fiscal years, based on the organization’s fiscal year settings.
Explanation
To create next-x-fiscal-years FetchXML query:- In condition attribute set operator keyword to next-x-fiscal-years.
- Specify value of x in value attribute of condition tag.
in-fiscal-period FetchXML Query
The following example shows a FetchXML expression that finds all orders fulfilled in period three of any fiscal year, according to the organization’s fiscal year settings. The fiscal period value is specified in the value attribute of the condition tag. If the organization uses fiscal months, the query returns results from month three. If the organization uses fiscal quarters, the query returns results from quarter three. If the organization uses fiscal semesters, no results are returned; there are only two semesters, and the value supplied is therefore out-of-range.
Explanation
To create in-fiscal-period FetchXML query:- In condition attribute set operator keyword to in-fiscal-period.
- Specify value of fiscal period in value attribute of condition tag.
in-fiscal-period-and-year Query
The following example shows a FetchXML expression that finds all orders fulfilled in period three of fiscal year 2013, according to the organization’s fiscal year settings. If the organization uses fiscal months, the query returns results from month three. If the organization uses fiscal quarters, the query returns results from quarter three. If the organization uses fiscal semesters, no results are returned; there are only two semesters, and the value supplied is therefore out-of-range.
Explanation
To create in-fiscal-period-and-year FetchXML query:- In condition attribute set operator keyword to in-fiscal-period-and-year.
- Specify value of fiscal period in value attribute of condition tag.
- Specify value of fiscal year in another value attribute of condition tag.
fiscal-period FetchXML Query
The following example shows a FetchXML aggregation expression that sums the total amount of orders fulfilled and groups the result by fiscal semester and fiscal year.
Explanation
To create group by with linked entity FetchXML:- Create an aggregate query
- Add link-entity node for entity which contains group by attribute (systemuser entity in this case.)
- In link-entity node add required attribute containing groupby keyword with value set to true.
Using "older than" clauses for date and time values in FetchXML Query
The following example shows a FetchXML that finds incidents that are older than 30 minutes.
Use the following syntax to specify various older than clauses in a FetchXML expression.
Clause | Syntax |
---|---|
Older than X minutes |
This clause is not supported for date and time attributes with DateOnly behavior.
|
Older than X hours |
This clause is not supported for date and time attributes with DateOnly behavior.
|
Older than X days | |
Older than X weeks | |
Older than X months | |
Older than X years |