每当我尝试修改基于SQL的报告的标准过滤器时,我经常会收到此错误。出现此错误的原因是,在修改过滤器时,联接中的表别名设置为某个非唯一值。
我花了很多时间为它寻找任何解决方案但失败了。然后为我自己找到了解决方法。
打开数据库OrganizationName_MSCRM并执行以下查询
从dbo.ReportBase中选择DefaultFilter,其中Name ='基于我的SQL的报告名称'
复制默认过滤器的值并在XML文件中打开。你会发现alias =" a_3513cef8db754312b0db555339f05c9a"在XML中。使用其他一些GUID更改别名中的GUID,并更新ReportBase表的DefaultFilter值。
运行报告,它将起作用。
答案 0 :(得分:1)
如果您想避免直接针对您的CRM数据库运行更新(正如@Alex所述,不支持),您可以修改RDL本身的默认过滤器。
首先,您必须下载RDL并将其作为XML或文本文件打开。您可以在任何文本编辑器中执行此操作(如果RDL不在BIDS报表服务器项目中,则可以在VS.NET中执行此操作)。
在底部附近,您会找到类似于以下内容的部分:
<CustomProperties><CustomProperty><Name>Custom</Name><Value><MSCRM
xmlns="mscrm">&lt;ReportFilter&gt;&lt;ReportEntity
paramname="P1"&gt;&lt;fetch version="1.0" output-format="xml-platform"
mapping="logical" distinct="false"&gt;
Value是RDL的默认过滤器。 Value是XML编码的两次,但如果你通过解码器运行它,就像http://coderstoolbox.net/string/#!encoding=xml那样,你会得到更具可读性的东西:
第一次解码
<MSCRM xmlns="mscrm"><ReportFilter><ReportEntity
paramname="P1"><fetch version="1.0" output-format="xml-platform"
mapping="logical" distinct="false">
2nd Decode
<ReportFilter><ReportEntity
paramname="P1"><fetch version="1.0" output-format="xml-platform"
mapping="logical" distinct="false">
通过结束</Value>
包含所有内容,您将获得定义默认过滤器的FetchXML。
更改guid,或删除包含别名的<LinkEntity>
部分。只要您拥有有效的FetchXML,您就应该能够将该文件作为新报告上传。
重新编码(x2)XML并将其放回RDL中。首先对获取XML进行编码,然后将其包装在<MSCRM xmlns="mscrm"></MSCRM>
元素中,并对该字符串进行编码。请确保您的编码器不会将"
替换为"
。 coderstoolbox.net上的那个,但CRM在编码XML时不会这样做。
您必须将RDL上传为新报告。在我的测试中,CRM在更新现有报告时不会使用RDL中的过滤器更新数据库中的defaultfilter列。
我知道这有很多箍跳,我不能说是否正式支持这种类型的定制。就个人而言,我觉得通过CRM Web UI上传RDL比使用针对数据库运行更新语句的开放式SSMS终端更安全。
答案 1 :(得分:1)
我遵循了与Scott Stone类似的解决方案 - 但只导出了报告,搜索了'违规'加入,修改了GUID,并且正如Scott提到的那样,删除然后重新上传报告。 (而不是简单地将修改后的RDL重新上传到现有报告中。)