在SharePoint2010中可以通过Microsoft.Office.Server.WebAnalytics.Reporting.AnalyticsReportFunction类获得Web 分析报告,但是在SharePoint 2013中Web Analytics Service Application被并入了Search Service Application中,所以如果像在SharePoint2010中引入Microsoft.Office.Server.WebAnalytics.dll and Microsoft.Office.Server.WebAnalytics.UI.dll两个类库在2013中是无法获得Web Analytics Report的,在SharPoint 2013中需要引入Microsoft.Office.Server.Search.dll,可用的方法有:

-GetSearchRePort

-GetRollUpAnalyticsItemData

    Search analytics data 被存储在名叫AnalyticsReportingStore的数据库中,GetSearchRePort方法是通过调用名为ar_procGetTopSearchReport的存储过程实现的,GetRollupAnalyticsItemData方法 是通过调用 ar_procGetAnalyticsItemData实现的

    

     GetSearchReport 有以下参数:

  • reportType -int:报告的类型,1 代表 top queries

  • tenantId  -  GUID:SharePoint租户的ID。如果在SharePoint Farm安装时没有具体的设置,则可以设为空的Guid

  • siteId – guid : 网站集 id.若要获取包含网站集则设为空的GUID

  • reportDate  - DateTime:报告的时间

  • bDaily  - bool: true 则返回RePortDate设置的当天的结果, false 则返回RePortDate所在整个月的结果

  •  maxRows – uint : 搜索结果的最大条数


     下面的例子展示了如何获得某个月的Top 搜索关键词

SPSecurity.RunWithElevatedPrivileges(delegate
 {
 
// You can use SPContext.Current.Site.ID if you have HttpContext
 
using (var site = new SPSite(siteId))
     {
        var context = SPServiceContext.GetContext(site);
        var searchProxy = context.GetDefaultProxy(typeof(SearchServiceApplicationProxy)) as SearchServiceApplicationProxy;
        var topQueries = searchProxy.GetSearchReport(1, Guid.Empty, Guid.Empty, startDate, false, maxRows);
        foreach (var query in topQueries)
          {
               //process top search term
           }
     }
  });

     GetRollupAnalyticsItemData 有如下参数:

  • eventType – int :事件类型 e.g. 1 代表 Site Usage Reports

  • tenantId – guid :和GetSearchReport中参数意义一样

  • siteId – guid : 网站集ID

  • scopeId – guid : 子网站id, 如果需要返回整个网站集下的ID则设为Guid.Empty

    下面的代码展示了如何获取 the daily and monthly usage reports of Hits and Users count:

SPSecurity.RunWithElevatedPrivileges(delegate
 {
    // You can use SPContext.Current.Site.ID if you have HttpContext
    using (var site = new SPSite(siteId))
       {
         var context = SPServiceContext.GetContext(site);
         var searchProxy = context.GetDefaultProxy(typeof(SearchServiceApplicationProxy)) as       SearchServiceApplicationProxy;
         var usageData= searchProxy.GetRollupAnalyticsItemData(1,Guid.Empty,site.ID,Guid.Empty);
 
usageData.GetHitCountForDay(date);
         usageData.GetHitCountForMonth(date);
        }
 });
原文链接:http://radutut.wordpress.com/2013/01/27/how-to-get-search-analytics-reports-programmatically-in-sharepoint-2013/