s-s-rS 获取之前的总数
Posted
技术标签:
【中文标题】s-s-rS 获取之前的总数【英文标题】:s-s-rS get previous total 【发布时间】:2015-06-16 10:54:10 【问题描述】:我正在研究 s-s-rS 2008。一个简单的 tablix,有一个行组(产品)和一个列组(月),在行和列的交叉点是数据(销售数量)。现在我添加一个总行,等于每个月的总和(销售额)。我还添加了一个总列,它等于每个产品的总和(销售数量)。在总行/列的交点处,该值是所有产品和所有月份的销售数量的总和。现在我想将其更改为所有产品的总数,但除上个月外的所有月份。例如。有产品 1、2、3 和第 1、2、3 个月。我想要该单元格中产品 1,2、3 和 1,2 月的总销售额。怎么做?像这张图片,在右下角,应该有 6 个(2 月和 1 月)。
---------更新,添加了创建此报告的脚本,所以也许有人可以尝试一下。
数据集:
select 'Jan' as mon, 'p1' as prod, 1 as id
union all
select 'Feb' as mon, 'p1' as prod, 1
union all
select 'Mar' as mon, 'p1' as prod, 1
union all
select 'Jan' as mon, 'p2' as prod, 1
union all
select 'Feb' as mon, 'p2' as prod, 1
union all
select 'Mar' as mon, 'p2' as prod, 1
union all
select 'Jan' as mon, 'p3' as prod, 1
union all
select 'Feb' as mon, 'p3' as prod, 1
union all
select 'Mar' as mon, 'p3' as prod, 1
报告定义:
有一个行组(prod 上的组),一个列组(mon 上的组)。 实际上,我可以在 T-SQL 中做到这一点,方法是在没有上个月的情况下计算总计,然后将其加入主数据集。但只是想知道仅通过 s-s-rS 是否可以实现。
【问题讨论】:
将适当的 reportItem 值加在一起。 我想不出来到底是怎么回事。能详细点吗? "7:避免在 s-s-rS 报表级别计算字段 如果报表中有计算字段,那么最好在查询级别而不是在报表级别创建它们,因为数据库可以更好处理计算。这种方法还将减少报表服务器上的报表处理负载和易于维护。 mssqltips.com/sqlservertip/3659/… 【参考方案1】:在表达式中使用 IIF 从数据集中排除最后 (MAX) 个月的表达式。
=SUM(IIF(Month(Fields!DateField.Value) & "|" & YEAR(Fields!DateField.Value) =
Month(MAX(Fields!DateField.Value, "Yourdataset")) & "|" & YEAR(MAX(Fields!DateField.Value, "Yourdataset")), 0, Fields!ValueField.Value))
如果月份等于最大月份,它将为 0,否则它将使用您的 ValueField。
【讨论】:
试过但得到了这个文本框 xx 的值表达式有一个嵌套聚合,它指定了一个数据集范围。内部聚合不能指定数据集范围。我认为这意味着 max 函数不能不将数据集作为范围。 这是我根据你的使用的表达式: =Sum(iif(Fields!mon.Value = MAX(Fields!mon.Value, "DataSet1"), 0, Fields!ID.Value) ) 该错误意味着您不允许将指定数据集的 MAX 放在 SUM 中。作为一种解决方法,使用表达式=IIF(Fields!mon.Value = MAX(Fields!mon.Value, "DataSet1"), 0, Fields!ID.Value))
在数据集中添加一个计算字段,然后对列中的该字段求和。
另外,您的 ID 列 (Fields!ID.Value) 有当月的销售数量?
是的,id是销售数量。这是一个测试,所以我没有花时间在命名上。此外,我尝试了计算字段方法并得到另一个错误:用于计算字段的表达式..包括聚合、行数、运行值、上一个或查找函数。 Aggregate、rownumber、runningvalue、previous 和 lookup 函数不能在计算字段表达式中使用。【参考方案2】:
引用要按名称求和的文本框,作为 reportItems 集合的成员。
在您的示例中,例如,如果您的 tablix 的底行(总计行)具有用于月份列的名为“tbTotal1”、“tbTotal2”、“tbTotal3”的文本框,那么您可以在最后一个文本框仅汇总前两个月的总数:
=ReportItems!tbTotal1.Value + ReportItems!tbTotal2.Value
【讨论】:
该表不是静态表,它有一个列组,所以列数(月)是未知的。所以不能使用 ReportItems。我上传了报告定义,希望有意义。【参考方案3】:试试这个:
RunningValue(Fields!totalField.Value,Sum,"DataSourceName")
您可以修改 聚合器(例如使用 Count 而不是 Sum),如果您想在每次迭代中重置该值,您可以通过字词 Nothing 更改 DataSourceName
【讨论】:
以上是关于s-s-rS 获取之前的总数的主要内容,如果未能解决你的问题,请参考以下文章