2012-12-12 72 views
0

考虑:SSRS - 动态字段

  • SQL Server 2008 R2的
  • SSRS 2008
  • 谦卑程序员

考虑两个表:

CREATE TABLE PERSON 
(
    PersonID INT, 
    Name VARCHAR(100) 
) 

CREATE TABLE PERSON_EXTENDED 
(
    PersonExtendedID INT, 
    PersonID INT, 
    DOB DATETIME, 
    FavoriteColor VARCHAR(100) 
) 

进一步考虑以下查询加入建议thei的表关系。

SELECT 
    * 
FROM 
    PERSON AS P 
    JOIN PERSON_EXTENDED AS PE ON (P.PersonID = PE.PersonID) 

为了让你的整体概念,我想创建一个存储过程,将填充一个SSRS报告的字段选择参数。然后使用选定的参数将其作为参数传递给另一个存储过程,该存储过程使用所选字段创建报告。

我的想法最初是这样的,但是这样会产生2个问题。首先是两个表格中1和2的重复顺序。其次是重复的列名称“PersonID”。

SELECT 
    C.COLUMN_NAME, 
    C.ORDINAL_POSITION 
FROM 
    INFORMATION_SCHEMA.columns AS C 
WHERE 
    C.TABLE_NAME = 'PERSON' 
    OR C.TABLE_NAME = 'PERSON_EXTENDED' 

有什么想法?额外的功劳就是以可扩展的方式做到这一点,并包含某种“显示名称”字段,因此最终用户不必处理PersonID,但可以处理“个人身份识别”。

+0

我探讨了添加一个主键消除了常见问题的表。该表还将具有表名,列名和显示名称,以消除其他问题。虽然这是一个非常简单的解决方案,但如果字段名称发生更改或字段被添加/删除,这可以帮助您进行手动更新。 –

回答

0

Great Article!

这篇文章是在正确的方向迈出了一大步,反而可能是完整的解决方案。对于处于类似情况的任何其他人来说,这肯定是足够的。

其中一个评论是特别吸引人的:

您好哈日,我用处理的多值参数的隐藏列表达式时 的另一种形式。

= IIF(滤波器(参数!MultiOption.Value, “6”,真正的)。长度> 0,假,真)

这意味着,如果它在参数 列表选中后,显示此列。在这个例子中,6是标签的ID。

我有这样一个小数据集,所以去定制 查询的麻烦并不重要。

我担心这将是巨大的资源密集型,但。