单个SSRS Tablix中来自多个查询/数据集的静态值

时间:2019-05-16 23:25:55

标签: sql reporting-services ssrs-tablix

好的,所以我有这份报告,我必须用非常特定的格式写成SSRS。看起来像下面底部的屏幕截图。忽略箭头和颜色。它是从Oracle数据库中提取的。该表/矩阵中的每个数字值单元格都有一个不同的sql查询来提取它,因为它们来自不同的表等。

表中数字的前半部分分别来自查询。表格的下半部分是根据上半部分的数字计算得出的。我已经有了上半部分的查询,并试图找出如何使用这些查询在SSRS中仅创建那些表,然后在下半部分为报表创建计算。我不能使用表格或矩阵,因为每个查询是一个不同的数据集,并且每个tablix只能有一个数据集。

我在想也许做文本框并手动绘制网格,这将是一个巨大的痛苦。我收到关于没有聚合,超出范围之类的错误,并且还没有找出原因,因为这不是我理想的解决方案。

我最终会得到的当前解决方案是合并每个查询,然后为网格中的行和列创建具有静态值的列并将其转换为矩阵。问题在于,随着我在表计算的基础上进行进一步的创建,它的复杂性继续增加,并且代码变得越来越大,并且创建时间也很长,我必须像创建6个与格式相似的报告一样这个。可能是一千行sql,由于ssrs字符限制,迫使我不得不进行存储的proc。

所以我的问题以一种更简单的方式是:如何接受多个返回静态值的sql查询,并使它们在不重复的tablix中成为单个值,然后在该tablix中创建更多的空白行,其他单元格值的计算,例如Textbox1-textbox2,textbox3 / textbox4吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

我弄清楚了使用具有多个数据集的表达式。一旦找到答案,答案似乎太简单了。基本上只是使用我的第一个数据集创建了一个表tablix。在下面的组内创建了更多明细行和插入行。然后,我针对每个表达式创建器,找到另一个数据集,然后双击它以获取要从另一个数据集提取的表达式。例如,bac_labor数据集值将如下所示。 = Sum(Fields!BAC_LABOR.Value,“ BAC_Labor”)

然后进行计算可以使用= Sum(Fields!BAC_LABOR.Value,“ BAC_Labor”)+ Sum(Fields!BAC_LABOR_OVERHEAD.Value,“ BAC_Labor”)相同的东西,也可以执行类似= ReportItems!Textbox2.Value的操作-ReportItems!Textbox1.Value引用单元格值。与将500个字符选择语句加在一起进行计算相比,这节省了大量时间,开发工作并减少了计算代码。同样,无需使用存储的proc和union或将每个select语句与该方法一起加入。

enter image description here