【问题标题】:How to model a "left join" in SQL Server Reporting Services?如何在 SQL Server Reporting Services 中为“左连接”建模?
【发布时间】:2009-02-18 13:53:00
【问题描述】:

我是报告 svcs 的新手,我正在编写基于 VS.NET 2008 中创建的报告模型 (.smdl) 的报告。我似乎错过了报告生成器查询视图类似于“左加入。”模型很简单:

三个实体: 客户(客户名称,客户名称) Ord (ordid, custid, orddate, ...) Charge(chargeid、ordid、chargetype、chargevalue...)

将“费用”视为与订单相关的可选费用(特殊费用)——有些订单有,有些没有。

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

现在我跳转到 Report Builder 2 (RB2) 以设计基于此模型的报表。我的目标是简单地列出每个订单:客户名称、订单日期、收费类型、收费值(即,如果订单行有多个收费类型,则会重复)。我希望列出所有订单,即使订单不收取任何费用——我认为这是传统意义上的“左连接”。

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

运行报告时,我只得到那些实际收费的订单。我宁愿希望得到所有的订单。有什么方法可以指定吗?

谢谢你, 比尔道森

【问题讨论】:

    标签: sql-server reporting-services


    【解决方案1】:

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

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

    来自 Aaron Meyers 的相关部分:

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

    当您从 Ord 的详细信息开始并通过新角色导航到 Charge 并选择其他详细信息时,报表生成器将选择 Order-Charge 实体作为报表的根/基本实体。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        Customer-->Order 角色应该有 Optional One(source)-->Optional Many(Target) {Because 1 customer can have 0 or many Orders}

        Order-->客户角色应该有 Optional Many(source)-->Optional One(Target) {反之亦然}

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多