2012-02-13 68 views
0

我是新来的报告服务,所以这个问题可能是疯了。我正在寻找一种方法来创建一个空的“模板”报告(基本上是一个表格字母),而不必为我们系统中的每个客户创建一个报告。该表格信件的一部分是具有任意数量的25个特定字段的部分。的部分被安置成这样:报告服务和动态字段

Name:   Jesse James 
Date of Birth: 1/1/1800 
Address:  123 Blah Blah Street 
       Anywhere, USA 12345 
Another Field: Data 
Another Field2: More Data 

这些(以及任何其他字段客户端指定的)可以以任何顺序排列,并在左侧的标签可以是任何客户端决定(例如:“DOB”而不是“出生日期”)。理想情况下,我希望能够拥有一个Web界面,您可以点击所需的字段,指定它们出现的顺序,并指定自定义标签的内容。我想出了一种方法来指定标签并对它们进行排序(并在报告中“动态”加载它们),但是如果可以并允许动态字段(右侧)选择和排序,我想进一步采取这一步骤。问题是,我想在不使用动态SQL的情况下执行此操作。我走了一条包含序号,自定义标签文本和实际列名的配置表,并尝试将该表与包含通过information_schema.columns实际包含数据的表连接起来。也许查询所有的潜在领域,并有一个INNER JOIN做我的过滤(如果有'配置'表等匹配)。这并不像我想的那样工作:)我猜我在想我可以模拟数据集的功能(它的值和字段名称已烘焙到对象中)。我意识到这不是尝试这种壮举的最佳工具,这正是我被迫与之合作的原因。

配置表将保存许多客户/报告的配置,我将通过客户ID过滤。该配置表看起来财产以后这样的:

客户ID LabelText的的ColumnName序 1名FName参数1 1姓LName的2 1个出生DOBirth日期3 2客户端ID的ClientID 1 2姓LName的2 2地址1地址1 3 2地址2地址2 4

所有这一切说:

  1. 有没有办法拉断上述查询?
  2. 我是否太挑剔不使用动态SQL,因为相关部分只会拉回一行?然而,有数百个客户每天运行这个报告(信件)两三次。

另外,请记住,我没有试图在报表上动态创建文本框。我将把这些字段连接成单个字符串并将其转储到文本框中,或者我将有多个报告,每个报告都具有期望通用字段名称(“field1”等)的一定数量的文本框。我输入的越多,这听起来就越疯狂...... 如果没有办法做到这一点,我可能会在自定义代码中找到一些东西;但我的强迫症方想要相信有超过我目前的权力,可以做到这一点在一个闪烁的方式SQL。

回答

0

不知道为什么你需要将这一切全部返回到一行中:似乎SSRS会进一步规范化:为当前报表的配置表中的每一行返回一行。如果您确实需要连接,那么在报告的嵌入式代码中执行该操作,或者考虑将表格放在表单中。下面的查询对你的配置表做了一些假设。它只保存当前报告的配置,还是一次保存许多客户/报告的配置?此外,您没有提供有关如何筛选到相应记录的更多信息,因此我只使用了客户ID。

SELECT 
    config.ordinal, 
    config.LabelText, 
    CASE config.ColumnName 
     WHEN 'FName' THEN DataRecord.FirstName 
     WHEN 'LName' THEN DataRecord.LastName 
     WHEN 'ClientID' THEN DataRecord.ClientID 
     WHEN 'DOBirth' THEN DataRecord.DOB 
     WHEN 'Address' THEN DataRecord.Address 
     WHEN 'Field' THEN DataRecord.Field 
     WHEN 'Field2' THEN DataRecord.Field2 
     ELSE 
     NULL 
     END AS response 
FROM 
    ConfigurationTable AS config 
LEFT OUTER JOIN 
    DataTable AS DataRecord 
ON config.CustID = DataRecord.CustomerID 
WHERE DataRecord.CustomerID = @CustID 
ORDER BY 
    config.Ordinal 

还有其他方法可以在SSRS或SQL中执行此操作,具体取决于需求的更多详细信息。

+0

感谢您的回复@jamief。是的,配置表确实会保存许多客户/报告的配置,并且我将通过客户ID进行过滤。该配置表看起来财产以后这样的: 客户ID LabelText的的ColumnName序 1名FName参数1 1姓LName的2 1日出生DOBirth的3 2客户端ID的ClientID 1 2姓LName的2个 2地址1地址1 3 2地址2地址2 4 – DerPflug 2012-02-14 14:16:53

+0

我已经编辑了我的答案,以解释这些细节。 (顺便说一句,在堆栈溢出,我们鼓励你回去编辑你原来的问题,根据需要添加更多的细节。) – 2012-02-14 14:36:52

+0

你的答案完全适合我的需求。谢谢你的帮助。 – DerPflug 2012-02-14 16:59:21