Tsql 报表服务和动态字段

Tsql 报表服务和动态字段,tsql,dynamic,reporting-services,Tsql,Dynamic,Reporting Services,我是报告服务新手,所以这个问题可能有点疯狂。我正在寻找一种方法来创建一个空的“模板”报告(基本上是一个表格),而不是为我们系统中的每个客户创建一个。此表单信函的一部分是包含任意数量的25个特定字段的部分。本节的安排如下: Name: Jesse James Date of Birth: 1/1/1800 Address: 123 Blah Blah Street Anywhere, USA 12345 Another Field

我是报告服务新手,所以这个问题可能有点疯狂。我正在寻找一种方法来创建一个空的“模板”报告(基本上是一个表格),而不是为我们系统中的每个客户创建一个。此表单信函的一部分是包含任意数量的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将该表与实际包含数据的表连接起来。也许查询所有可能的字段并使用内部联接进行筛选(如果“配置”表中有匹配项,等等)。这和我想象的不一样:)我想我在想我可以模拟数据集的功能(它将值和字段名烘焙到对象中)。我意识到这不是尝试这样一个壮举的最佳工具,这只是我被迫使用的工具

配置表将保存许多客户/报告的配置,我将根据客户ID进行筛选。配置表将如下所示:

CustID LabelText ColumnName序号 1名字FName 1 1姓LName 2 1出生日期出生日期3 2客户端ID客户端ID 1 2姓LName 2 2地址1地址1 3 2地址2地址2 4

所有这些都表明:

  • 有没有办法解决上述问题
  • 我是否过于挑剔不使用动态SQL,因为所讨论的部分只会向后拉一行?然而,有数百名客户每天运行两到三次此报告(信函)
  • 另外,请记住,我并不是在报告上动态创建文本框。我要么将字段连接成一个字符串并将其转储到一个文本框中,要么我将有多个报告,每个报告都有一组文本框,这些文本框需要一个通用字段名(“field1”,等等)。我打字越多,听起来就越疯狂。。。
    如果没有办法做到这一点,我可能会在自定义代码中弄虚作假;但我的OCD团队希望相信,在我目前的能力之外,还有SQL可以以更灵活的方式完成这项工作。

    不确定为什么需要将这些数据全部返回到一行中: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实现这一点。

    谢谢您的回复@jamief。对配置表实际上会保存许多客户/报告的配置,我会按客户ID进行筛选。配置表看起来是这样的:CustID LabelText ColumnName序号1 First Name FName 1 Last Name LName 2 1出生日期DOBirth3 2客户ID客户ID 1 2姓氏2 2地址1地址1 3 2地址2地址2地址2 4我已对我的答案稍加编辑,以说明这些详细信息。(顺便说一句,在Stack Overflow,我们鼓励您返回并编辑原始问题,根据需要添加更多细节。)您的答案完全符合我的需要。谢谢你的帮助。