具有tablix / matrix中动态列的数据集

时间:2013-01-10 15:32:26

标签: reporting-services dataset ssrs-2008 reporting reportingservices-2005

我有一个数据集可以包含5列,第6列,第7列,第10列,第20列,甚至100列。 至少有两个是静态的,其余的是动态的(根据数据库中存在的表格进行缩放)。

如何在Reporting Services中实现此功能?

如何指定值为动态的tablix字段?

最终结果是:

|   TITLE | ENUNCIATION | GOOD | VERY GOOD | BAD | VERY BAD |
-------------------------------------------------------------
| title 1 |  question 1 |    5 |         3 |   1 |        0 |
| title 2 |  question 2 |    1 |         0 |   3 |        0 |
| title 3 |  question 3 |    0 |         0 |   1 |        0 |

|   TITLE | ENUNCIATION |   1  |     2     |  3  |     4    |
-------------------------------------------------------------
| title 1 |  question 1 |    5 |         3 |   1 |        0 |
| title 2 |  question 2 |    1 |         0 |   3 |        0 |
| title 3 |  question 3 |    0 |         0 |   1 |        0 |

注意:前两个是静态的,剩下的动态。

修改

我有这张桌子:

|   ID_SCALE  | ID_SCALE_ENTRY   | NAME          |
--------------------------------------------------
|      1       |        1        |    GOOD       |    
|      1       |        2        |    VERY GOOD  |   
|      1       |        3        |    BAD        |   
|      1       |        4        |    VERY BAD   |    
|      2       |        1        |       1       |    
|      2       |        2        |       2       |
|      2       |        3        |       3       |
|      2       |        4        |       4       |
|      2       |        5        |       5       |
|      2       |        6        |       6       |
|      2       |        7        |       7       |    

编辑+注意: 我想完全显示在第一个表中。问题是(Good,Very Good,Bad,Very Bad,1,2,3,4)字段是动态创建的,无法在Tablix中指定。

一个例子:当我想要数据集的字段值时,我把这个表达式设置为Fields!Good.value但现在想象它不是" Good"但" 1"领域! Good.value不再存在。结论是一个带有动态列的数据集。

2 个答案:

答案 0 :(得分:7)

首先 - 您应该使用Matrix。

第二次 - 要完成您想要的操作,在返回数据的方法中,您必须至少返回三个数据字段。

例如:

ColDescription - Column description
StaticRowDescription - Row description / static column value
Value - The real value for that column/row combination.

知道了吗?

你的矩阵应该是这样的:

| Any Text               | [ColDescription] |
| [StaticRowDescription] | [Value]          |

编辑

忘记提及本示例中的任何文本都是我的静态列。您可以添加更多内容以满足您的需求。

<强> -------------------------------------------- -------------------

由于您的评论而举例说明。

这是你在return方法中实现的方法:

假设您有一个静态列Description和其他(n)。

public IEnumerable<YourReturnClass> GetData(int param) 
{
    List<YourReturnClass> returnList = new List<YourReturnClass>();
    foreach (var row in allYourRows())
    {
        foreach (var col in row.getColumns())
        {
            returnList.add(new YourReturnClass(){
                StaticRowDescription = row.Description,
                ColDescription = col.Description,
                Value = myValueAccordingToCurrentColumnXRow()
            });
        }
    }

    return returnList;
}

这是你的矩阵:

| Description            | [ColDescription] |
| [StaticRowDescription] | [Value]          |

这样,如果你在allYourRows()中有一行描述“费用”,两列名称为“气体”和“电力”,你可以将其作为矩阵结果:

| Description | Gas | Electricity |
-----------------------------------
| Expenses    | 25  | 150         |

更好?

这只是为了解释矩阵如何工作,您获取数据的方式可能与列出的数据不同。

报告(RDL)将是相同的,唯一的变化是您获取数据的方式。如果您有这样的表格: (这将是您数据库中的表格(存储数据的位置))

| RowDescription | DynamicColumnHeader | Value |
------------------------------------------------
| Year 2013      | January             | 500   |
| Year 2013      | February            | 850   |
| Year 2013      | March               | 265   |
| Year 2014      | February            | 965   |

然后您的报告将如下所示:

| Description | January | February | March|
-------------------------------------------
| Year 2013   | 500     | 850      | 265  |
| Year 2014   |         | 965      |      |

有了主意吗?

我附上了报告的样子图片:

image

新编辑:

|   TITLE | ENUNCIATION    | [NAME]                          |
-------------------------------------------------------------
| [title] |  [enunciation] |  [ID_SCALE] OR [ID_SCALE_ENTRY] |

*或乘法,求和等......

基于最后评论的编辑:

|   TITLE | ENUNCIATION    | [NAME]                          |
-------------------------------------------------------------
| [title] |  [enunciation] | [Count(NAME)]                   |
是吗?

答案 1 :(得分:0)

你要做的是知道Pivot grid,这是为了汇总数据,它包含一个行区域(标题和发音字段去的地方),一个列区域(Q_Name字段去的地方)和您想要汇总的数据区域(在您的情况下是我所相信的数据)。

Pivot grid in DBxtra

当然,您可以在纯SQL上执行此操作,但即使您拥有固定数量的列,也可以进行维护和维护。如果您对此方法更感兴趣,可以在此处查看我的答案:How to make a report with count of type of cases in each month in Acess 2010

免责声明:屏幕截图中的工具是DBxtra,这是我为报告和商业智能推广的工具。