【发布时间】:2017-03-13 18:39:21
【问题描述】:
嗨,我的 ssrs 报告在动态 crm 中,我要求当针对某个记录运行报告时,记录传递记录 id,以便只显示相关结果。
这怎么可能?提供的步骤也很棒
报告是使用 SQL 创建的。
针对活动实体运行
【问题讨论】:
标签: dynamics-crm ssrs-2008-r2 ssrs-2012
嗨,我的 ssrs 报告在动态 crm 中,我要求当针对某个记录运行报告时,记录传递记录 id,以便只显示相关结果。
这怎么可能?提供的步骤也很棒
报告是使用 SQL 创建的。
针对活动实体运行
【问题讨论】:
标签: dynamics-crm ssrs-2008-r2 ssrs-2012
CRM 的 SSRS 报告具有特殊参数,可为您启用此功能。要按选定记录(或您打开的当前记录)进行过滤,您可以使用一个名为“CRM_Filtered[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 作为其值字段。这实际上使参数成为您可以在主数据集中引用的 Id 数组
现在它更有用了,因为您可以在 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)
总结步骤:
【讨论】: