Poo*_*ook 2 reporting dataset reportingservices-2005 reporting-services ssrs-2008
我有一个数据集,可以有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 |
Run Code Online (Sandbox Code Playgroud)
注意:前两个是静态的,剩下的动态.
编辑:
我有这张桌子:
| 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 |
Run Code Online (Sandbox Code Playgroud)
编辑+注意: 我想完全显示在第一个表中.问题是(Good,Very Good,Bad,Very Bad,1,2,3,4)字段是动态创建的,无法在Tablix中指定.
一个例子:当我想要数据集的字段值时,我把这个表达式设置为Fields!Good.value但现在想象它不是"好"而是"1"字段!Good.value不再存在.结论是一个包含动态列的数据集.
首先 - 您应该使用Matrix.
第二 - 要完成所需的操作,在返回数据的方法中,必须至少返回三个数据字段.
例如:
ColDescription - Column description
StaticRowDescription - Row description / static column value
Value - The real value for that column/row combination.
Run Code Online (Sandbox Code Playgroud)
得到它了?
你的矩阵应该是这样的:
| Any Text | [ColDescription] |
| [StaticRowDescription] | [Value] |
Run Code Online (Sandbox Code Playgroud)
编辑:
忘记提到在这个例子中任何文本都是我的静态列.您可以添加更多以满足您的需求.
-------------------------------------------------- -------------
一个例子,由于你的评论.
这是你在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;
}
Run Code Online (Sandbox Code Playgroud)
这是你的矩阵:
| Description | [ColDescription] |
| [StaticRowDescription] | [Value] |
Run Code Online (Sandbox Code Playgroud)
这样,如果您有一行allYourRows()描述"Expenses"和两个名为"Gas"和"Electricity"的列,您可以将此作为矩阵结果:
| Description | Gas | Electricity |
-----------------------------------
| Expenses | 25 | 150 |
Run Code Online (Sandbox Code Playgroud)
更好?
这只是为了解释矩阵如何工作,您获取数据的方式可能与描绘的数据不同.
报告(RDL)将是相同的,唯一的变化是您获取数据的方式.如果你有一个这样的表:( 这将是你的数据库中的表(你已经存储了数据))
| RowDescription | DynamicColumnHeader | Value |
------------------------------------------------
| Year 2013 | January | 500 |
| Year 2013 | February | 850 |
| Year 2013 | March | 265 |
| Year 2014 | February | 965 |
Run Code Online (Sandbox Code Playgroud)
然后你的报告看起来像这样:
| Description | January | February | March|
-------------------------------------------
| Year 2013 | 500 | 850 | 265 |
| Year 2014 | | 965 | |
Run Code Online (Sandbox Code Playgroud)
知道了吗?
我附上了报告的样子图像:

新编辑:
| TITLE | ENUNCIATION | [NAME] |
-------------------------------------------------------------
| [title] | [enunciation] | [ID_SCALE] OR [ID_SCALE_ENTRY] |
Run Code Online (Sandbox Code Playgroud)
*或乘法,求和等......
基于最后评论的编辑:
| TITLE | ENUNCIATION | [NAME] |
-------------------------------------------------------------
| [title] | [enunciation] | [Count(NAME)] |
Run Code Online (Sandbox Code Playgroud)
是吗?