SSRS Count Occurrences 基于多列

SSRS Count Occurances based on multiple columns

我有一个数据集,其中 returns 数据采用以下格式;

开始日期 |结束日期 |资源 |工作分解结构

yyyy-mm-01 | yyyy-mm-07 |约翰·多伊 | ABCD

yyyy-mm-01 | yyyy-mm-07 |约翰·多伊 | EFGH

yyyy-mm-01 | yyyy-mm-07 |简·杜 | ABCD

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

yyyy-mm-08 | yyyy-mm-14 |约翰·多伊 | ABCD

等等

我如何计算开始日期、结束日期和资源(不是 wbs)的出现次数,并在每一行上显示该计数 - 这样我就可以使用该计数来计算每周每个 wbs 的分配.

例如在上面的例子中,输出应该是;

开始日期 |结束日期 |资源 |工作分解结构 |分配

yyyy-mm-01 | yyyy-mm-07 |约翰·多伊 | ABCD| 50%

yyyy-mm-01 | yyyy-mm-07 |约翰·多伊 | EFGH | 50%

yyyy-mm-01 | yyyy-mm-07 |简·杜 | ABCD| 100%

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

yyyy-mm-08 | yyyy-mm-14 |约翰·多伊 | ABCD| 100%

等等

在此先感谢您的帮助 - 如果我有任何不清楚的地方,请告诉我。

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

开始日期 |结束日期 |资源 |工作分解结构 |分配

yyyy-mm-01 | yyyy-mm-07 |约翰·多伊 | ABCD || 25%

yyyy-mm-01 | yyyy-mm-07 |约翰·多伊 | EFGH ||

yyyy-mm-01 | yyyy-mm-07 |简·杜 | ABCD || 100%

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

yyyy-mm-08 | yyyy-mm-14 |约翰·多伊 | ABCD || 100%

等等

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

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

我重复了倒数第二行。 即

开始日期 |结束日期 |资源 |工作分解结构

yyyy-mm-01 | yyyy-mm-07 |约翰·多伊 | ABCD

yyyy-mm-01 | yyyy-mm-07 |约翰·多伊 | ABCD

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

yyyy-mm-01 | yyyy-mm-07 |约翰·多伊 | ABCD

yyyy-mm-01 | yyyy-mm-07 |约翰·多伊 | EFGH

如有任何帮助,我们将不胜感激。我实际上不知道发生了什么.. 起初我认为这可能是一个转换错误或其他什么 - 但这似乎没有意义,当只显示开始和结束日期时它不会重复该行(它们需要转换为字符串,因为&“ |”)。 即使如此 - 我尝试将开始日期和结束日期放在 CSTR() 中。 虽然还在重复。

我会使用 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 

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