2009-02-18 61 views
1

我是新来的报告svcs,我正在编写一个基于在VS.NET 2008中创建的报告模型(.smdl)的报告。我似乎错过了报告生成器查询视图的类似于“左连接“。模型很简单:如何建模SQL Server Reporting Services中的“左连接”?

三个实体: 卡斯特(客户ID,CUSTNAME) 奥德(ordid,客户ID,orddate,...) 费(chargeid,ordid,chargetype,chargevalue ...)

将“收费”看作与订单相关的可选成本(特殊收费) - 有些订单有他们,有些则没有。

模型是从视图(.dsv)自动生成的,它准确地指示了cust和ord之间以及ord和charge之间的关系。我注意到,在设计视图关系时,没有一种选择来表示(例如)该关系应该被视为“左连接”。

现在我跳转到报表制作器2(RB2),根据此模型设计报表。我的目标是简单地列出每个订单:客户名称,订单日期,收费类型,收费价值(即,如果订单行具有多于一种收费类型,则会重复订单行)。我希望列出所有订单,即使订单没有任何费用 - 我认为传统意义上的“左连接”。

我使用RB2的查询设计器来创建数据集,并且只需选择(即双击)我想要的实体作为报告中的字段:custname,orddate,chargetype,chargeval。然后,我根据这个数据集在报告中创建一个简单的表格。

运行报表时,我只收到那些实际上有费用的订单。我只是希望能得到所有的订单。有没有我可以指定的方法?

谢谢你,比尔 道森

回答

3

我通过SQL Server论坛回答:

http://social.msdn.microsoft.com/Forums/en-US/sqlreportingservices/thread/20d4b4fd-dc0b-428e-a5b8-aedf5c53d340

相关部分在这里从亚伦迈尔斯:

这里的关键是,所有的报表模型的查询是围绕“基地中心实体“,并且报表中详细级别的每一行表示此基本实体中的一行。您可能会注意到,在您的模型中,没有相应的实体对应于“订单收费或没有收费的订单”。您需要基于DSV中的命名查询在模型中显式创建此订单费用实体。该命名查询可以从Ord表和Charge表中选择两个键之间的LEFT OUTER JOIN键。然后,您可以创建从这些键到Ord和Charge表的关系,并更新模型(右键单击模型根节点和自动生成)。

当您从Ord的详细信息开始并浏览新角色以收费并选择其他详细信息时,报表生成器将选择Order-Charge实体作为报表的根/基本实体。

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

0

我相信左侧加入恰巧根据您添加字段拖到查询设计画布的顺序。只要您添加客户字段,然后订购字段,然后收取字段,您应该是正确的。

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

0

我们可以通过使用实体角色的基数属性,在两个实体之间的报告模型中实现LEFT JOIN。

例如,假设我们有两个实体Customer和Order。

客户 - >在线订单的角色应该有一个选项(来源) - >可选许多(目标){因为1个客户可以有0或多个订单}

订单 - >客户角色应该有很多可选(来源) - >可选一个(目标){反之亦然}

相关问题