2

我有一个数据集,它可以包含 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 但现在想象它不是“好”而是“1”个字段!Good.value 不再存在。结论,是一个具有动态列的数据集。

4

2 回答 2

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]          |

编辑

忘了说 Any text 是我在这个例子中的静态列。您可以添加更多以满足您的需要。

-------------------------------------------------- -------------

由于您的评论而举了一个例子。

这是您在 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()带有描述“费用”,两列名称为“Gas”和“Electricity”,您的矩阵结果将如下所示:

| 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      |      |

明白了吗?

我附上了您的报告的外观图片:

图片

新编辑:

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

*或乘法,总和等...

根据最后的评论进行编辑:

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

是这样吗?

于 2013-01-10T15:51:57.973 回答
0

你想要做的是一个Pivot grid,它是用来汇总数据的,它包含一个行区域(Title 和 Enunciation 字段所在的位置)、一个列区域(Q_Name 字段所在的位置)和一个数据区域想总结一下(在你的情况下,我相信一些事情)。

DBxtra 中的枢轴网格

当然,您可以在纯 SQL 上执行此操作,但即使您有固定数量的列,执行和维护也是一场噩梦。如果您对这种方法更感兴趣,可以在这里查看我的答案:如何在 Acess 2010 中制作包含每个月的案例类型计数的报告

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

于 2013-01-11T16:49:44.603 回答