Dynamics crm 2011 CRM 2011自定义基于SQL的报告错误“;表别名在所有顶级表和联接别名中不是唯一的

Dynamics crm 2011 CRM 2011自定义基于SQL的报告错误“;表别名在所有顶级表和联接别名中不是唯一的,dynamics-crm-2011,Dynamics Crm 2011,每当我尝试修改基于SQL的报表的标准筛选器时,我经常会收到此错误。此错误的原因是,在修改筛选器时,联接中的表别名被设置为某个非唯一值 我花了很多时间来寻找解决方案,但失败了。然后我自己找到了解决办法 打开数据库OrganizationName\u MSCRM并执行以下查询 从dbo.ReportBase中选择DefaultFilter,其中Name='My SQL based report Name' 复制默认筛选器的值并在XML文件中打开。您将在XML中找到alias=“a3513cef8db

每当我尝试修改基于SQL的报表的标准筛选器时,我经常会收到此错误。此错误的原因是,在修改筛选器时,联接中的表别名被设置为某个非唯一值

我花了很多时间来寻找解决方案,但失败了。然后我自己找到了解决办法

打开数据库OrganizationName\u MSCRM并执行以下查询

从dbo.ReportBase中选择DefaultFilter,其中Name='My SQL based report Name'

复制默认筛选器的值并在XML文件中打开。您将在XML中找到alias=“a3513cef8db754312b0db555339f05c9a”。使用其他GUID更改别名中的GUID,并更新回ReportBase表DefaultFilter值


运行该报告,它将正常工作。

如果您希望避免直接针对CRM数据库运行更新(如上所述,该数据库不受支持),您可以修改RDL本身中的默认筛选器

首先,您必须下载RDL并将其作为XML或文本文件打开。您可以在任何文本编辑器中执行此操作(如果RDL不在BIDS报表服务器项目中,则可以在VS.NET中执行此操作)

在底部附近,您将看到一个类似于以下内容的部分:

    <CustomProperties><CustomProperty><Name>Custom</Name><Value>&lt;MSCRM
     xmlns="mscrm"&gt;&amp;lt;ReportFilter&amp;gt;&amp;lt;ReportEntity 
     paramname="P1"&amp;gt;&amp;lt;fetch version="1.0" output-format="xml-platform" 
     mapping="logical" distinct="false"&amp;gt;
CustomMSCRM
xmlns=“mscrm”&;书信电报;报告过滤器&;燃气轮机&;书信电报;报告实体
paramname=“P1”&;燃气轮机&;书信电报;获取version=“1.0”输出格式=“xml平台”
mapping=“logical”distinct=“false”&;燃气轮机;
该值是RDL的默认过滤器。该值经过两次XML编码,但如果您通过解码器(如at处的解码器)运行它,您将获得更可读的内容:

第一次解码

     <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;
ReportFilterReportEntity
paramname=“P1”fetch version=“1.0”output format=“xml平台”
mapping=“logical”distinct=“false”
第二次解码

    <ReportFilter><ReportEntity 
     paramname="P1"><fetch version="1.0" output-format="xml-platform" 
     mapping="logical" distinct="false">

通过关闭
包含所有内容,您将获得定义默认过滤器的FetchXML

更改guid,或删除包含别名的
部分。只要您有有效的FetchXML,就应该能够将文件作为新报告上载

重新编码(x2)XML并将其放回RDL。首先对提取XML进行编码,然后将其包装在
元素中,并对该字符串进行编码。确保编码器不会将
替换为
。coderstoolbox.net上的一个可以,但是CRM在编码XML时不这样做

您必须将RDL作为新报告上载。在我的测试中,在更新现有报告时,CRM不会使用RDL中的过滤器更新数据库中的defaultfilter列


我知道这是一个很大的跳跃,我不能说这种类型的定制是否得到官方支持。就我个人而言,通过CRM web UI上传RDL比使用打开的SSMS终端对数据库运行更新语句更安全。

我采用了与Scott Stone类似的解决方案,但只导出了报告,搜索了“违规”连接,修改了GUID,正如Scott还提到的,删除并重新上载报告。(与简单地将修改后的RDL重新上载到现有报告不同。)

读者应该知道,不支持直接更改数据库,您将失去Microsoft对安装的支持,触摸数据库时出现的任何错误都可能使CRM无法正常工作。