使用 FetchXML 聚合
发布日期: 2016年11月
适用于: Dynamics CRM 2015
在 Microsoft Dynamics CRM 2015 和 Microsoft Dynamics CRM Online 中,FetchXML 包括使您能够计算总和、平均值、最小值、最大值和计数的分组和聚合函数。
支持以下聚合函数:
sum
avg
min
max
count(*)
count(属性名称)
本主题内容
关于聚合
平均
计数
最大值
最小
总和
多个聚合
分组依据
排序依据
关于聚合
若要创建聚合属性,请将关键字 aggregate 设置为 true,然后指定有效的实体名称、属性名称和别名(变量名称)。 您同时必须指定要执行的聚合的类型。
以下示例显示 FetchXML 中的某个简单聚合属性。
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='entity name'>
<attribute name='attribute name' aggregate='count' alias='alias name'/>
</entity>
</fetch>"
含有聚合属性的查询的结果与标准查询的结果有所不同。 别名值用作聚合结果的标记标识符。
以下示例显示聚合查询结果的格式。
<resultset morerecords="0"'>
<result>
<alias>aggregate value</alias>
</result>
</resultset>"
以下示例显示别名变量设置为 account_count 时的查询结果。
<resultset morerecords="0"'>
<result>
<account_count>20</account_count>
</result>
</resultset>"
平均
以下示例显示如何使用 avgaggregate 属性。
// Fetch the average of estimatedvalue for all opportunities. This is the equivalent of
// SELECT AVG(estimatedvalue) AS estimatedvalue_avg ... in SQL.
System.Console.WriteLine("===============================");
string estimatedvalue_avg = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='estimatedvalue' alias='estimatedvalue_avg' aggregate='avg' />
</entity>
</fetch>";
EntityCollection estimatedvalue_avg_result = _serviceProxy.RetrieveMultiple(new FetchExpression(estimatedvalue_avg));
foreach (var c in estimatedvalue_avg_result.Entities)
{
decimal aggregate1 = ((Money)((AliasedValue)c["estimatedvalue_avg"]).Value).Value;
System.Console.WriteLine("Average estimated value: " + aggregate1);
}
System.Console.WriteLine("===============================");
计算平均值时的 NULL 值限制
当Microsoft Dynamics 365计算数据的平均值时,不考虑空值。 但是,会使用零 (0)。
在下面的示例中,若使用以下数据,客户 1(两个条目)的平均值显示为 250,客户 2(两个条目)的平均值显示为 125。
主题 |
潜在客户 |
预计值 |
---|---|---|
商机 1 |
客户 1 |
null |
商机 2 |
客户 1 |
250 |
商机 3 |
客户 2 |
0 |
商机 4 |
客户 2 |
250 |
计数
以下示例显示如何使用 countaggregate 属性。
// *****************************************************************************************************************
// FetchXML opportunity_count Aggregate 2
// *****************************************************************************************************************
// Fetch the count of all opportunities. This is the equivalent of
// SELECT COUNT(*) AS opportunity_count ... in SQL.
string opportunity_count = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='name' alias='opportunity_count' aggregate='count'/>
</entity>
</fetch>";
EntityCollection opportunity_count_result = _serviceProxy.RetrieveMultiple(new FetchExpression(opportunity_count));
foreach (var c in opportunity_count_result.Entities)
{
Int32 aggregate2 = (Int32)((AliasedValue)c["opportunity_count"]).Value;
System.Console.WriteLine("Count of all opportunities: " + aggregate2);
}
System.Console.WriteLine("===============================");
CountColumn
以下示例显示如何使用 countcolumnaggregate 属性。
// *****************************************************************************************************************
// FetchXML opportunity_colcount Aggregate 3
// *****************************************************************************************************************
// Fetch the count of all opportunities. This is the equivalent of
// SELECT COUNT(name) AS opportunity_count ... in SQL.
string opportunity_colcount = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='name' alias='opportunity_colcount' aggregate='countcolumn'/>
</entity>
</fetch>";
EntityCollection opportunity_colcount_result = _serviceProxy.RetrieveMultiple(new FetchExpression(opportunity_colcount));
foreach (var c in opportunity_colcount_result.Entities)
{
Int32 aggregate3 = (Int32)((AliasedValue)c["opportunity_colcount"]).Value;
System.Console.WriteLine("Column count of all opportunities: " + aggregate3);
}
System.Console.WriteLine("===============================");
计算不同列
以下示例显示如何使用 countcolumnaggregate 属性计算不同的列。
// *****************************************************************************************************************
// FetchXML opportunity_distcount Aggregate 4
// *****************************************************************************************************************
// Fetch the count of distinct names for opportunities. This is the equivalent of
// SELECT COUNT(DISTINCT name) AS opportunity_count ... in SQL.
string opportunity_distcount = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='name' alias='opportunity_distcount' aggregate='countcolumn' distinct='true'/>
</entity>
</fetch>";
EntityCollection opportunity_distcount_result = _serviceProxy.RetrieveMultiple(new FetchExpression(opportunity_distcount));
foreach (var c in opportunity_distcount_result.Entities)
{
Int32 aggregate4 = (Int32)((AliasedValue)c["opportunity_distcount"]).Value;
System.Console.WriteLine("Distinct name count of all opportunities: " + aggregate4);
}
System.Console.WriteLine("===============================");
最大值
当Microsoft Dynamics 365计算数据的最大值时,不考虑空值。 但是,会使用零 (0)。
以下示例显示如何使用 maxaggregate 属性。
// *****************************************************************************************************************
// FetchXML estimatedvalue_max Aggregate 5
// *****************************************************************************************************************
// Fetch the maximum estimatedvalue of all opportunities. This is the equivalent of
// SELECT MAX(estimatedvalue) AS estimatedvalue_max ... in SQL.
string estimatedvalue_max = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='estimatedvalue' alias='estimatedvalue_max' aggregate='max' />
</entity>
</fetch>";
EntityCollection estimatedvalue_max_result = _serviceProxy.RetrieveMultiple(new FetchExpression(estimatedvalue_max));
foreach (var c in estimatedvalue_max_result.Entities)
{
decimal aggregate5 = ((Money)((AliasedValue)c["estimatedvalue_max"]).Value).Value;
System.Console.WriteLine("Max estimated value of all opportunities: " + aggregate5);
}
System.Console.WriteLine("===============================");
最小
当Microsoft Dynamics 365计算数据的最小值时,不考虑空值。 但是,会使用零 (0)。
以下示例显示如何使用 minaggregate 属性。
// *****************************************************************************************************************
// FetchXML estimatedvalue_min Aggregate 6
// *****************************************************************************************************************
// Fetch the minimum estimatedvalue of all opportunities. This is the equivalent of
// SELECT MIN(estimatedvalue) AS estimatedvalue_min ... in SQL.
string estimatedvalue_min = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='estimatedvalue' alias='estimatedvalue_min' aggregate='min' />
</entity>
</fetch>";
EntityCollection estimatedvalue_min_result = _serviceProxy.RetrieveMultiple(new FetchExpression(estimatedvalue_min));
foreach (var c in estimatedvalue_min_result.Entities)
{
decimal aggregate6 = ((Money)((AliasedValue)c["estimatedvalue_min"]).Value).Value;
System.Console.WriteLine("Minimum estimated value of all opportunities: " + aggregate6);
}
System.Console.WriteLine("===============================");
总和
以下示例显示如何使用 sumaggregate 属性。
// *****************************************************************************************************************
// FetchXML estimatedvalue_sum Aggregate 7
// *****************************************************************************************************************
// Fetch the sum of estimatedvalue for all opportunities. This is the equivalent of
// SELECT SUM(estimatedvalue) AS estimatedvalue_sum ... in SQL.
string estimatedvalue_sum = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum' />
</entity>
</fetch>";
EntityCollection estimatedvalue_sum_result = _serviceProxy.RetrieveMultiple(new FetchExpression(estimatedvalue_sum));
foreach (var c in estimatedvalue_sum_result.Entities)
{
decimal aggregate7 = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value;
System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate7);
}
System.Console.WriteLine("===============================");
多个聚合
以下示例显示如何使用多个 aggregate 属性设置最小值和最大值。
// *****************************************************************************************************************
// FetchXML estimatedvalue_avg, estimatedvalue_sum Aggregate 8
// *****************************************************************************************************************
// Fetch multiple aggregate values within a single query.
string estimatedvalue_avg2 = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='opportunityid' alias='opportunity_count' aggregate='count'/>
<attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum'/>
<attribute name='estimatedvalue' alias='estimatedvalue_avg' aggregate='avg'/>
</entity>
</fetch>";
EntityCollection estimatedvalue_avg2_result = _serviceProxy.RetrieveMultiple(new FetchExpression(estimatedvalue_avg2));
foreach (var c in estimatedvalue_avg2_result.Entities)
{
Int32 aggregate8a = (Int32)((AliasedValue)c["opportunity_count"]).Value;
System.Console.WriteLine("Count of all opportunities: " + aggregate8a);
decimal aggregate8b = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value;
System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate8b);
decimal aggregate8c = ((Money)((AliasedValue)c["estimatedvalue_avg"]).Value).Value;
System.Console.WriteLine("Average of estimated value of all opportunities: " + aggregate8c);
}
System.Console.WriteLine("===============================");
分组依据
以下示例显示如何使用多个 aggregate 属性和链接的 groupby 属性。
// *****************************************************************************************************************
// FetchXML groupby1 Aggregate 9
// *****************************************************************************************************************
// Fetch a list of users with a count of all the opportunities they own using groupby.
string groupby1 = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='name' alias='opportunity_count' aggregate='countcolumn' />
<attribute name='ownerid' alias='ownerid' groupby='true' />
</entity>
</fetch>";
EntityCollection groupby1_result = _serviceProxy.RetrieveMultiple(new FetchExpression(groupby1));
foreach (var c in groupby1_result.Entities)
{
Int32 aggregate9a = (Int32)((AliasedValue)c["opportunity_count"]).Value;
System.Console.WriteLine("Count of all opportunities: " + aggregate9a + "\n");
string aggregate9b = ((EntityReference)((AliasedValue)c["ownerid"]).Value).Name;
System.Console.WriteLine("Owner: " + aggregate9b);
string aggregate9c = (string)((AliasedValue)c["ownerid_owneridyominame"]).Value;
System.Console.WriteLine("Owner: " + aggregate9c);
string aggregate9d = (string)((AliasedValue)c["ownerid_owneridyominame"]).Value;
System.Console.WriteLine("Owner: " + aggregate9d);
}
System.Console.WriteLine("===============================");
下面的各示例显示以下分组依据示例:
按链接的实体进行分组
按年分组
按季度分组
按月分组
按周分组
按日分组
多个分组依据
按链接的实体进行分组
以下示例显示如何使用 sumaggregate 属性计算链接实体值的总和。
// *****************************************************************************************************************
// FetchXML groupby2 Aggregate 10
// *****************************************************************************************************************
// Fetch the number of opportunities each manager's direct reports
// own using a groupby within a link-entity.
string groupby2 = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='name' alias='opportunity_count' aggregate='countcolumn' />
<link-entity name='systemuser' from='systemuserid' to='ownerid'>
<attribute name='parentsystemuserid' alias='managerid' groupby='true' />
</link-entity>
</entity>
</fetch>";
EntityCollection groupby2_result = _serviceProxy.RetrieveMultiple(new FetchExpression(groupby2));
foreach (var c in groupby2_result.Entities)
{
int? aggregate10a = (int?)((AliasedValue)c["opportunity_count"]).Value;
System.Console.WriteLine("Count of all opportunities: " + aggregate10a + "\n");
}
System.Console.WriteLine("===============================");
按年分组
“分组依据”日期使用日、周、月、季度或年份值。 以下示例显示如何使用 aggregate 属性和 groupby 属性按年对结果进行分组。
// *****************************************************************************************************************
// FetchXML byyear Aggregate 11
// *****************************************************************************************************************
// Fetch aggregate information about the opportunities that have
// been won by year.
string byyear = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='opportunityid' alias='opportunity_count' aggregate='count'/>
<attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum'/>
<attribute name='estimatedvalue' alias='estimatedvalue_avg' aggregate='avg'/>
<attribute name='actualclosedate' groupby='true' dategrouping='year' alias='year' />
<filter type='and'>
<condition attribute='statecode' operator='eq' value='Won' />
</filter>
</entity>
</fetch>";
EntityCollection byyear_result = _serviceProxy.RetrieveMultiple(new FetchExpression(byyear));
foreach (var c in byyear_result.Entities)
{
Int32 aggregate11 = (Int32)((AliasedValue)c["year"]).Value;
System.Console.WriteLine("Year: " + aggregate11);
Int32 aggregate11a = (Int32)((AliasedValue)c["opportunity_count"]).Value;
System.Console.WriteLine("Count of all opportunities: " + aggregate11a);
decimal aggregate11b = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value;
System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate11b);
decimal aggregate11c = ((Money)((AliasedValue)c["estimatedvalue_avg"]).Value).Value;
System.Console.WriteLine("Average of estimated value of all opportunities: " + aggregate11c);
System.Console.WriteLine("----------------------------------------------");
}
System.Console.WriteLine("===============================");
按季度分组
以下示例显示如何使用 aggregate 属性和 groupby 属性按季度对结果进行分组。
// *****************************************************************************************************************
// FetchXML byquarter Aggregate 12
// *****************************************************************************************************************
// Fetch aggregate information about the opportunities that have
// been won by quarter.(returns 1-4)
string byquarter = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='opportunityid' alias='opportunity_count' aggregate='count'/>
<attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum'/>
<attribute name='estimatedvalue' alias='estimatedvalue_avg' aggregate='avg'/>
<attribute name='actualclosedate' groupby='true' dategrouping='quarter' alias='quarter' />
<filter type='and'>
<condition attribute='statecode' operator='eq' value='Won' />
</filter>
</entity>
</fetch>";
EntityCollection byquarter_result = _serviceProxy.RetrieveMultiple(new FetchExpression(byquarter));
foreach (var c in byquarter_result.Entities)
{
Int32 aggregate12 = (Int32)((AliasedValue)c["quarter"]).Value;
System.Console.WriteLine("Quarter: " + aggregate12);
Int32 aggregate12a = (Int32)((AliasedValue)c["opportunity_count"]).Value;
System.Console.WriteLine("Count of all opportunities: " + aggregate12a);
decimal aggregate12b = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value;
System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate12b);
decimal aggregate12c = ((Money)((AliasedValue)c["estimatedvalue_avg"]).Value).Value;
System.Console.WriteLine("Average of estimated value of all opportunities: " + aggregate12c);
System.Console.WriteLine("----------------------------------------------");
}
System.Console.WriteLine("===============================");
按月分组
以下示例显示如何使用 aggregate 属性和 groupby 属性按月对结果进行分组。
// *****************************************************************************************************************
// FetchXML bymonth Aggregate 13
// *****************************************************************************************************************
// Fetch aggregate information about the opportunities that have
// been won by month. (returns 1-12)
string bymonth = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='opportunityid' alias='opportunity_count' aggregate='count'/>
<attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum'/>
<attribute name='estimatedvalue' alias='estimatedvalue_avg' aggregate='avg'/>
<attribute name='actualclosedate' groupby='true' dategrouping='month' alias='month' />
<filter type='and'>
<condition attribute='statecode' operator='eq' value='Won' />
</filter>
</entity>
</fetch>";
EntityCollection bymonth_result = _serviceProxy.RetrieveMultiple(new FetchExpression(bymonth));
foreach (var c in bymonth_result.Entities)
{
Int32 aggregate13 = (Int32)((AliasedValue)c["month"]).Value;
System.Console.WriteLine("Month: " + aggregate13);
Int32 aggregate13a = (Int32)((AliasedValue)c["opportunity_count"]).Value;
System.Console.WriteLine("Count of all opportunities: " + aggregate13a);
decimal aggregate13b = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value;
System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate13b);
decimal aggregate13c = ((Money)((AliasedValue)c["estimatedvalue_avg"]).Value).Value;
System.Console.WriteLine("Average of estimated value of all opportunities: " + aggregate13c);
System.Console.WriteLine("----------------------------------------------");
}
System.Console.WriteLine("===============================");
按周分组
以下示例显示如何使用 aggregate 属性和 groupby 属性按周对结果进行分组。
// *****************************************************************************************************************
// FetchXML byweek Aggregate 14
// *****************************************************************************************************************
// Fetch aggregate information about the opportunities that have
// been won by week. (Returns 1-52)
string byweek = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='opportunityid' alias='opportunity_count' aggregate='count'/>
<attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum'/>
<attribute name='estimatedvalue' alias='estimatedvalue_avg' aggregate='avg'/>
<attribute name='actualclosedate' groupby='true' dategrouping='week' alias='week' />
<filter type='and'>
<condition attribute='statecode' operator='eq' value='Won' />
</filter>
</entity>
</fetch>";
EntityCollection byweek_result = _serviceProxy.RetrieveMultiple(new FetchExpression(byweek));
foreach (var c in byweek_result.Entities)
{
Int32 aggregate14 = (Int32)((AliasedValue)c["week"]).Value;
System.Console.WriteLine("Week: " + aggregate14);
Int32 aggregate14a = (Int32)((AliasedValue)c["opportunity_count"]).Value;
System.Console.WriteLine("Count of all opportunities: " + aggregate14a);
decimal aggregate14b = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value;
System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate14b);
decimal aggregate14c = ((Money)((AliasedValue)c["estimatedvalue_avg"]).Value).Value;
System.Console.WriteLine("Average of estimated value of all opportunities: " + aggregate14c);
System.Console.WriteLine("----------------------------------------------");
}
System.Console.WriteLine("===============================");
按日分组
以下示例显示如何使用 aggregate 属性和 groupby 属性按日对结果进行分组。
// *****************************************************************************************************************
// FetchXML byday Aggregate 15
// *****************************************************************************************************************
// Fetch aggregate information about the opportunities that have
// been won by day. (Returns 1-31)
string byday = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='opportunityid' alias='opportunity_count' aggregate='count'/>
<attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum'/>
<attribute name='estimatedvalue' alias='estimatedvalue_avg' aggregate='avg'/>
<attribute name='actualclosedate' groupby='true' dategrouping='day' alias='day' />
<filter type='and'>
<condition attribute='statecode' operator='eq' value='Won' />
</filter>
</entity>
</fetch>";
EntityCollection byday_result = _serviceProxy.RetrieveMultiple(new FetchExpression(byday));
foreach (var c in byday_result.Entities)
{
Int32 aggregate15 = (Int32)((AliasedValue)c["day"]).Value;
System.Console.WriteLine("Day: " + aggregate15);
Int32 aggregate15a = (Int32)((AliasedValue)c["opportunity_count"]).Value;
System.Console.WriteLine("Count of all opportunities: " + aggregate15a);
decimal aggregate15b = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value;
System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate15b);
decimal aggregate15c = ((Money)((AliasedValue)c["estimatedvalue_avg"]).Value).Value;
System.Console.WriteLine("Average of estimated value of all opportunities: " + aggregate15c);
System.Console.WriteLine("----------------------------------------------");
}
System.Console.WriteLine("===============================");
多个分组依据
以下示例显示如何使用 aggregate 属性和多个 groupby 子句。
// *****************************************************************************************************************
// FetchXML byyrqtr Aggregate 16
// *****************************************************************************************************************
// Fetch aggregate information about the opportunities that have
// been won by year and quarter.
string byyrqtr = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='opportunityid' alias='opportunity_count' aggregate='count'/>
<attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum'/>
<attribute name='estimatedvalue' alias='estimatedvalue_avg' aggregate='avg'/>
<attribute name='actualclosedate' groupby='true' dategrouping='quarter' alias='quarter' />
<attribute name='actualclosedate' groupby='true' dategrouping='year' alias='year' />
<filter type='and'>
<condition attribute='statecode' operator='eq' value='Won' />
</filter>
</entity>
</fetch>";
EntityCollection byyrqtr_result = _serviceProxy.RetrieveMultiple(new FetchExpression(byyrqtr));
foreach (var c in byyrqtr_result.Entities)
{
Int32 aggregate16d = (Int32)((AliasedValue)c["year"]).Value;
System.Console.WriteLine("Year: " + aggregate16d);
Int32 aggregate16 = (Int32)((AliasedValue)c["quarter"]).Value;
System.Console.WriteLine("Quarter: " + aggregate16);
Int32 aggregate16a = (Int32)((AliasedValue)c["opportunity_count"]).Value;
System.Console.WriteLine("Count of all opportunities: " + aggregate16a);
decimal aggregate16b = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value;
System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate16b);
decimal aggregate16c = ((Money)((AliasedValue)c["estimatedvalue_avg"]).Value).Value;
System.Console.WriteLine("Average of estimated value of all opportunities: " + aggregate16c);
System.Console.WriteLine("----------------------------------------------");
}
System.Console.WriteLine("===============================");
排序依据
以下示例显示如何使用 aggregate 属性和多个 orderby 子句。
// *****************************************************************************************************************
// FetchXML byyrqtr2 Aggregate 17
// *****************************************************************************************************************
// Specify the result order for the previous sample. Order by year, then quarter.
string byyrqtr2 = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='opportunityid' alias='opportunity_count' aggregate='count'/>
<attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum'/>
<attribute name='estimatedvalue' alias='estimatedvalue_avg' aggregate='avg'/>
<attribute name='actualclosedate' groupby='true' dategrouping='quarter' alias='quarter' />
<attribute name='actualclosedate' groupby='true' dategrouping='year' alias='year' />
<order alias='year' descending='false' />
<order alias='quarter' descending='false' />
<filter type='and'>
<condition attribute='statecode' operator='eq' value='Won' />
</filter>
</entity>
</fetch>";
EntityCollection byyrqtr2_result = _serviceProxy.RetrieveMultiple(new FetchExpression(byyrqtr2));
foreach (var c in byyrqtr2_result.Entities)
{
Int32 aggregate17 = (Int32)((AliasedValue)c["quarter"]).Value;
System.Console.WriteLine("Quarter: " + aggregate17);
Int32 aggregate17d = (Int32)((AliasedValue)c["year"]).Value;
System.Console.WriteLine("Year: " + aggregate17d);
Int32 aggregate17a = (Int32)((AliasedValue)c["opportunity_count"]).Value;
System.Console.WriteLine("Count of all opportunities: " + aggregate17a);
decimal aggregate17b = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value;
System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate17b);
decimal aggregate17c = ((Money)((AliasedValue)c["estimatedvalue_avg"]).Value).Value;
System.Console.WriteLine("Average of estimated value of all opportunities: " + aggregate17c);
System.Console.WriteLine("----------------------------------------------");
}
System.Console.WriteLine("===============================");
另请参阅
RetrieveMultiple
RetrieveMultipleRequest
FetchExpression
使用 FetchXML 构建查询
使用 FetchXML 对大型结果集进行分页
FetchXML schema
© 2017 Microsoft。 保留所有权利。 版权