SSRS报告动态crm具有用作参数的当前记录id

时间:2017-03-13 18:39:22

标签: dynamics-crm ssrs-2008-r2 ssrs-2012

您好我的ssrs报告在动态crm中,我要求当报告针对某条记录运行时,记录会传递记录ID,以便只显示相关结果。

这怎么可能?提供的步骤也很棒

使用SQL创建报告。

针对广告系列实体

运行

1 个答案:

答案 0 :(得分:1)

针对CRM的SSRS报告具有为您启用此功能的特殊参数。要按所选记录(或您打开的当前记录)进行过滤,您可以使用名为" CRM_Filtered [Entity]"的隐藏参数。其中entity是您将报告链接到的相关实体。

在您的情况下,即对于广告系列实体,此隐藏参数将被称为CRM_FilteredCampaign。对于SQL报告,这将是一个文本参数,并将设置为这样的(运行报告时由CRM设置)

select campaign0.* from FilteredCampaign as "campaign0"

我没有报告可以确切地检查SQL将包含哪些内容,因此可能不准确。但是你明白了。有几种方法可以在报告中嵌入这个,但是你可以在数据集中以这样的基本方式实现这一点:

 declare @sql as nVarchar(max)
 set @sql = 'SELECT c.campaignid FROM (' + @CRM_FilteredCampaign + ') as c'
 exec(@sql)

对此进行扩展,即不是在主数据集中执行文本SQL,而是通过基于文本创建数据集/参数组合来简化使用。实际上,将SQL文本转换为值列表。

所以将上面的SQL添加到它自己的DataSet中(对于这个名为DS_FilteredCampaign的例子)。

创建DS_FilteredCampaign后,请务必点击Refresh Fields按钮。为参数值键入以下内容而不是<null>

select c.* from FilteredCampaign as c

一旦返回,请单击“确定”以保存数据集。

接下来,创建另一个隐藏文本参数(例如Int_FilteredCampaign)并告诉它从DataSet获取其默认值(不是其可用值,即其默认值)。将值指向DS_FilteredCampaign,您应该可以选择campaignid作为其值字段。这实际上使参数成为您可以在主DataSet中引用的Ids数组

现在它更加实用,因为您可以在主DataSet中的SQL中引用它:

select c.*
from FilteredCampaign c
inner join ActivityPointer ap on ...
inner join FilteredAccount a on ...
where c.campaignid in (@Int_FilteredCampaign)

重要的部分是 where c.campaignid in (@Int_FilteredCampaign)

摘要步骤:

  • 您有一个名为dsMain
  • 的主DataSet
  • 创建一个名为CRM_FiltetedCampaign
  • 的新参数
  • 创建一个DataSet(DS_FilteredCampaign),执行传入CRM_FilteredCampaign的SQL
  • 刷新数据集上的字段以获取campaignid字段
  • 创建一个文本参数(Int_FilteredCampaign),使用新的数据集(DS_FilteredCampaign)使用campaignid为值
  • 检索其默认
  • 在您的dsMain数据集
  • 中引用此新参数