基于多列

时间:2015-10-26 23:26:30

标签: sql-server reporting-services count

我有一个数据集,它以下列格式返回数据;

StartDate | EndDate |资源| WBS

yyyy-mm-01 | yyyy-mm-07 | John Doe ABCD

yyyy-mm-01 | yyyy-mm-07 | John Doe EFGH

yyyy-mm-01 | yyyy-mm-07 | Jane Doe | ABCD

yyyy-mm-01 | yyyy-mm-07 |乔博客| IJKL

yyyy-mm-08 | yyyy-mm-14 | John Doe ABCD

如何计算startdate,enddate和resource only(不是wbs)的出现次数,并在每一行显示该计数 - 这样我就可以使用计数来计算每周wbs的分配。 / p>

e.g。在上面的例子中,输出应该是;

StartDate | EndDate |资源| WBS |分配

yyyy-mm-01 | yyyy-mm-07 | John Doe ABCD | 50%

yyyy-mm-01 | yyyy-mm-07 | John Doe EFGH | 50%

yyyy-mm-01 | yyyy-mm-07 | Jane Doe | ABCD | 100%

yyyy-mm-01 | yyyy-mm-07 |乔博客| IJKL | 100%

yyyy-mm-08 | yyyy-mm-14 | John Doe ABCD | 100%

预先感谢您提供任何帮助 - 如果我还不清楚,请告诉我。

旁注 - 我已经尝试添加行组,并且可以获得正确的计数 - 但是这并没有将计数放在每一行上,而是执行以下操作(不确定那个是多么明确);

StartDate | EndDate |资源| WBS |分配

yyyy-mm-01 | yyyy-mm-07 | John Doe ABCD || 25%

yyyy-mm-01 | yyyy-mm-07 | John Doe EFGH ||

yyyy-mm-01 | yyyy-mm-07 | Jane Doe | ABCD || 100%

yyyy-mm-01 | yyyy-mm-07 |乔博客| IJKL || 100%

yyyy-mm-08 | yyyy-mm-14 | John Doe ABCD || 100%

编辑: @Hannover Fist提出的解决方案似乎有效,但我从查找集中得到了一些意想不到的行为。

最后一行被倒数第二行覆盖。 当lookupset设置为Fields!StartDate.Value& " |" &安培; Fields!EndDate.Value,所有列都显示正确的值(分配除外)。 但如果我加入& " |" &安培;字段Resource.Value;!

我倒数第二行。 即。

StartDate | EndDate |资源| WBS

yyyy-mm-01 | yyyy-mm-07 | John Doe ABCD

yyyy-mm-01 | yyyy-mm-07 | John Doe ABCD

虽然我的数据集实际上有2行;

yyyy-mm-01 | yyyy-mm-07 | John Doe ABCD

yyyy-mm-01 | yyyy-mm-07 | John Doe EFGH

非常感谢任何帮助。我其实不知道它发生了什么.. 起初我认为它可能是一个转换错误或者其他东西 - 但是当显示开始和结束日期时,它似乎没有重复行(因为它们需要转换为字符串) &" |")。 即便如此 - 我尝试将开始日期和结束日期放在CSTR()中。 但仍在重复。

1 个答案:

答案 0 :(得分:1)

我会使用 SumLookup 函数来获取每个组的总计,并将您的计数除以总计。

分配表达式:

=COUTROWS() / Code.SumLookup(LookupSet(
 Fields!StartDate.Value & "|" & Fields!EndDate.Value & "|" & Fields!Resource.Value, 
 Fields!StartDate.Value & "|" & Fields!EndDate.Value & "|" & Fields!Resource.Value, 
 1, "Dataset1"))

代码:

Function SumLookup(ByVal items As Object()) As Decimal

If items Is Nothing Then
  Return Nothing
End If

Dim suma As Decimal = New Decimal()
Dim ct as Integer = New Integer()
suma = 0
ct = 0

For Each item As Object In items
  suma += Convert.ToDecimal(item)
  ct += 1
Next

If (ct = 0) Then return 0 else return suma 
End Function 

Summing lookups in SSRS

http://salvoz.com/blog/2013/05/27/sum-result-of-ssrs-lookupset-function/