Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在SQLServer Reporting Services中为“左连接”建模?_Sql Server_Reporting Services - Fatal编程技术网

Sql server 如何在SQLServer Reporting Services中为“左连接”建模?

Sql server 如何在SQLServer Reporting Services中为“左连接”建模?,sql-server,reporting-services,Sql Server,Reporting Services,我是SVC报告新手,我正在基于VS.NET2008中创建的报告模型.smdl编写一份报告。我似乎错过了ReportBuilder查询视图类似于左连接的功能。模型非常简单: 三个实体: Cust custid,custname Ord ORDD、custid、orddate。。。 chargeid、ordid、chargetype、chargevalue 将费用视为可选成本与订单相关的特殊费用-有些订单有,有些没有 模型是从views.dsv自动生成的,它准确地指示了客户和订单之间以及订单和费用之

我是SVC报告新手,我正在基于VS.NET2008中创建的报告模型.smdl编写一份报告。我似乎错过了ReportBuilder查询视图类似于左连接的功能。模型非常简单:

三个实体: Cust custid,custname Ord ORDD、custid、orddate。。。 chargeid、ordid、chargetype、chargevalue

将费用视为可选成本与订单相关的特殊费用-有些订单有,有些没有

模型是从views.dsv自动生成的,它准确地指示了客户和订单之间以及订单和费用之间的关系。我注意到,在设计视图关系时,没有任何选项可以指示关系应被视为左连接

现在我跳转到ReportBuilder2RB2来设计基于此模型的报表。我的目标是简单地列出每个订单:客户名称、订单日期、费用类型、费用值,即,如果订单行有多个费用类型,订单行将重复。我希望所有的订单上市,即使订单没有任何费用-我会考虑左连接在传统意义上。 我使用RB2的查询设计器创建数据集,只需选择,即双击我想要作为报告中字段的实体:custname、orddate、chargetype、chargeval。然后,我基于此数据集在报告中创建一个简单的表

当运行报告时,我只收到那些实际有费用的订单。我很希望得到所有的订单。有什么办法可以具体说明吗

谢谢,,
比尔·道森(Bill Dawson)

我相信左连接是根据您在查询设计器画布上添加字段的顺序进行的。只要您添加客户字段、订单字段、费用字段,您就应该是对的


您可以使用SQL配置文件验证实际运行的查询,这对于调试这类事情非常方便。

我通过SQL Server论坛得到了答案:

Aaron Meyers的相关部分:

这里的关键是,所有报表模型查询都以一个基本实体为中心,报表中详细级别的每一行都表示该基本实体中的一行。您可能会注意到,在您的模型中,没有实体对应于订单的费用,如果订单没有费用,则仅对应于订单。您需要基于DSV中的命名查询在模型中显式创建此订单费用实体。这个命名查询只需从Ord表和Charge表中选择键,这两个表之间有一个左外连接。然后创建从这些键到Ord和费用表的关系,并在模型根节点上单击鼠标右键更新模型,然后自动生成

从Ord中的详细信息开始,浏览要收费的新角色并选择其他详细信息时,报表生成器将选择订单收费实体作为报表的根/基实体

我们正在考虑未来版本的功能,以允许在报表生成器中直接创建这些类型的查询,而无需模型设计器显式创建左侧外部联接实体


通过使用实体角色的基数属性,我们可以在两个实体之间实现报表模型的左连接

例如,假设我们有两个实体客户和订单

客户->订单角色应具有可选的Onesource->可选的ManyTarget{因为1个客户可以有0个或多个订单}

订单->客户角色应具有可选的多个源->可选的一个目标{反之亦然}