我有一个数据集可以包含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不再存在。结论是一个带有动态列的数据集。
答案 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 | |
有了主意吗?
我附上了报告的样子图片:
新编辑:
| TITLE | ENUNCIATION | [NAME] |
-------------------------------------------------------------
| [title] | [enunciation] | [ID_SCALE] OR [ID_SCALE_ENTRY] |
*或乘法,求和等......
基于最后评论的编辑:
| TITLE | ENUNCIATION | [NAME] |
-------------------------------------------------------------
| [title] | [enunciation] | [Count(NAME)] |
是吗?
答案 1 :(得分:0)
你要做的是知道Pivot grid,这是为了汇总数据,它包含一个行区域(标题和发音字段去的地方),一个列区域(Q_Name字段去的地方)和您想要汇总的数据区域(在您的情况下是我所相信的数据)。
当然,您可以在纯SQL上执行此操作,但即使您拥有固定数量的列,也可以进行维护和维护。如果您对此方法更感兴趣,可以在此处查看我的答案:How to make a report with count of type of cases in each month in Acess 2010。
免责声明:屏幕截图中的工具是DBxtra,这是我为报告和商业智能推广的工具。