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/
我有一个数据集,其中 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/