报告模型;关于多对多关系的问题

时间:2010-03-15 10:37:18

标签: sql-server model report

我在设置报表模型时无法使用报表生成器创建报表。我想在配置报表模型时我做错了,但也可能是由于报表生成器中主要实体的更改。

我有3个表:客户端,地址和产品。客户端具有PK ClientNumber。地址和产品在ClientNumber上都具有FK关系。客户端和地址之间的关系是1对多,也是客户端和产品之间的关系: 制品 - (许多:1)-Client-。(1:许多) - 地址

我已经创建了一个包含这3个表的报表模型(主要是自动生成),对于我创建实体的每个表。 现在在客户实体上,我有两个角色,地址和产品。它们都具有'OptionalMany'的基数,因为客户可以有多个地址或产品。在地址和产品上我都有一个基数为“One”的客户角色,因为对于每个地址或产品,都必须有一个客户端(也尝试过OptionalOne ......)。

现在我正在尝试在Report Builder(2.0)中创建一个报告,我从这三个实体中选择字段。我想概述客户的主要地址和产品,但我似乎无法使用地址和产品中的字段创建报告。我首先从客户端选择属性,然后一旦我添加产品,主要实体就会改变,就像我选择产品(而不是客户端)一样。

这是我在更复杂的模型中遇到的问题的基本示例。我已经尝试了很多不同的东西2天,但我无法让它工作。有谁知道如何应对这个?

(使用SSRS 2008)

编辑:在T-SQL中,这就是我的意思:

SELECT  *
FROM    CLIENT
    INNER JOIN ADDRESS ON CLIENT.CLIENT_NUMBER = ADDRESS.CLIENT_NUMBER AND ADDRESS.TYPE = 1 --Main Address
    INNER JOIN PRODUCT ON CLIENT.CLIENT_NUMBER = PRODUCT.CLIENT_NUMBER
WHERE CLIENT.CLIENT_NUMBER = 1

2 个答案:

答案 0 :(得分:1)

我的经验可以追溯到Report Builder 1.0,但MS的报告模型没有太大变化,因为它可能仍然适用。

如您所述,您可以在模型中定义多对多关系,但在一个表格报告中实现这些关系是不可能的。一旦你选择了多方面的一个实体(产品),你就无法从另一方(地址)引入数据。

您可能会对创建“联结”表(ClientID-AddressID-ProductID)并将其隐藏起来,例如Bob's SQL Reporting Services Blog建议的用户感到非常幸运。

最终这对于MS模型来说是一个很大的限制,它似乎没有随着最新版本的改进而提升Denali BISM many-to-many

答案 1 :(得分:0)

我理解原始帖子已有4年历史,SSRS报告模型变得无关紧要,但一种解决方案是在模型中将OptionalMany关系定义为OptionalOne,实质上是欺骗模型以允许导航和适当的查询生成。