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 获取之前的总数的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法跟踪或获取 JPA 在由于 BatchUpdateException 而失败之前完成的批迭代总数?

如何保持 s-s-rS 图表的图例/颜色一致?

获取 s-s-rS 报告以显示 SQLexception

s-s-rS:从单元格获取背景颜色

限制从 s-s-rS 中的数据库单次获取数据

在 s-s-rS Power BI 报表生成器中添加百分比差异的总数