【发布时间】:2015-09-15 16:08:48
【问题描述】:
好的,我会尽力解释自己,但我有以下几点:
我有一个基本上是动态查询的数据源。查询本身显示 3 个字段,Name、Amount1、Amount2。
现在,我可以拥有具有相同名称的行。这个想法是当名称与我保存的前一个不同时,计算 Amount1+Amount2 的总和。如果我在 C# 上执行此操作,可能是这样的:
foreach (DataRow dr in repDset.Dataset.Rows)
{
total = (long)dr["Amount1"] + (long)dr["Amount2"];
if (thisconditiontrue)
{
if (PreviousName == "" || PreviousName != dr["Name"].ToString())
{
TotalName = TotalName + total;
}
PreviousName = dr["Name"].ToString();
}
}
这个想法是抓住这个并使用 RS 可以给我的方法制作一个 Reporting Services 表达式,例如:
IIF(Fields!Name.Value<>Previous(Fields!Name.Value),Fields!Amount1.Value + Fields!Amount2.Value,False)
类似的东西,但它存储了前一个的数量。
也许创建另一个字段?计算出来的?
如果需要,我可以进一步澄清和编辑。
【问题讨论】:
-
你的问题没有意义。您的示例 C# 代码看起来像是在 foreach 中计算总数,然后执行 if 语句然后退出。你的括号不合适吗?您的视觉说明中的数字也不会相加。 26从哪里来?你的小组总数在哪里?我不明白你想要达到什么目的......你的数据源是什么?这听起来像是可以通过在 SQL Server 中对 SUM() 运算符进行分区来完成的,但前提是您使用的是 SQL Server。你能告诉我们你正在使用的查询吗?
-
你好,迈克,我不能把查询放在这里,因为它很大,正如我之前所说的那样,它有点奇怪。 C# 代码只是一个示例,但想法如下:以可视化示例为例。对于每个不同的名称,抓住第一个,总和 Amount1+Amount2,这就是为什么 26。堆栈:Amount1 (1) + Amount2 (0) = 1。忽略其他“堆栈”,当您遇到第一个“溢出”总和时:Amount1 (9) + Amount2 (16) 所以:1 + 25 = 26。我将在我的初始帖子中编辑 C# 代码,以便更好地阐明它。
-
我提供了一个使用 SQL 来实现您所追求的结果的解决方案。如果你真的需要一个 SSRS 表达式解决方案,它可能是可能的,但它不会那么简单。