我是报告svcs的新手,我正在基于在VS.NET 2008中创建的报告模型(.smdl)编写报告。我似乎错过了报表生成器查询视图与“左联接”的类比。模型非常简单:
三个实体: Cust (custid,custname) Ord (ordid,custid,orddate,...)Charge (chargeid、ordid、chargetype、chargvaluue...)
可以将“费用”看作与订单相关的可选费用(特殊费用) --有些订单有,有些没有。
模型是从视图(.dsv)自动生成的,视图准确地表示客户和订单之间以及订单和费用之间的关系。我注意到,在设计视图关系时,没有一种选项可以指示(例如)关系应该被视为“左连接”。
现在,我将使用报表生成器2 (RB2)来设计基于此模型的报表。我的目标是简单地列出每个订单:客户名称、订单日期、费用类型、费用值(即,如果有多个费用类型,订单行将重复)。我希望列出所有订单,即使订单没有任何费用--我认为这是传统意义上的“左连接”。
我使用RB2的查询设计器来创建数据集,只需选择(即双击)我想要作为报告中的字段的实体:客户名称、日期、chargetype、chargeval。然后,我将基于此数据集在报告中创建一个简单的表。
当运行报表时,我只得到那些实际有费用的订单。我更希望得到所有的订单。有没有什么方法可以让我指定呢?
谢谢你,Bill Dawson
发布于 2009-03-24 16:36:34
我通过Sql Server论坛得到了答案:
http://social.msdn.microsoft.com/Forums/en-US/sqlreportingservices/thread/20d4b4fd-dc0b-428e-a5b8-aedf5c53d340
来自Aaron Meyer的相关部分:
这里的关键是,所有报表模型查询都以“基本实体”为中心,报表中详细级别的每一行都代表此基本实体中的一行。您可能会注意到,在您的模型中,没有实体对应于“订单的费用,或者如果订单没有费用,则只对应于订单”。您需要基于DSV中的命名查询在模型中显式创建此Order-Charge实体。这个命名查询只能从Ord表和Charge表中选择键,这两个表之间有一个左外部连接。然后创建从这些键到Ord和Charge表的关系,并更新模型(右键单击model根节点并自动生成)。
当您从Ord中的详细信息开始,并在新角色中导航以计费并选择其他详细信息时,报表生成器将选择Order-Charge实体作为报表的根/基实体。
我们正在考虑未来版本的功能,允许在报表生成器中直接创建这些类型的查询,而不需要模型设计器显式创建左外部联接实体。
发布于 2009-02-26 02:44:19
我相信左连接是根据您在查询设计器画布上添加字段的顺序进行的。只要添加customer字段,然后添加order字段,然后添加charge字段,您就应该是正确的。
您可以使用SQL Profile验证实际运行的查询,这对于调试这类东西非常方便。
发布于 2014-09-08 20:57:19
通过使用实体角色的Cardinality属性,我们可以在两个实体之间的报表模型中实现左连接。
例如,假设我们有两个实体Customer和Order then。
customer -->订单角色应具有可选的一个(源)-->可选的多个(目标){因为1个客户可以有0个或多个订单}
订单-->客户角色应具有可选的多个(源)-->可选的一个(目标){反之亦然}
https://stackoverflow.com/questions/561114
复制相似问题