我正在为某些项目计费开发发票报告。主 tablix 有几个组,按以下顺序:
- 项目组
- 票务组
- 笔记组
- 详细信息(实际帐单详细信息)
数据最终可能看起来像这样:
project_id ticket_id note_id hours billing_agreement_id billed_hours
----------- ----------- ----------- ------------ -------------------- ------------
1 1 1 0.50 4 0.75
1 1 2 0.50 5 1.00
1 1 3 1.00 7 1.00
1 1 8 5.00 7 3.00
1 1 8 5.00 2 2.00
2 2 4 4.00 1 4.00
2 2 5 2.00 6 3.00
换句话说,将工单分配给项目,在工单上输入注释(具有相应的工作小时数),然后将注释时间计入一个或多个协议/合同(如果区块时间协议用尽,例如,其余的可能会溢出到另一个协议)。就应用程序而言,这一切都很好。
所以现在我正在创建发票报告,我需要在报告末尾提供总的工作时间。看看第 4 行和第 5 行(note_id = 8)。报告页脚使用Sum(hours)
,然后最终将该注释计为 10 小时。两者note_id
都hours
来自注释行,并且应该相应地相加。包含hours
在 NoteGroup 的分组表达式中自然不会影响 Sum 的行为。
是否有一种直接的方法可以让 Reporting Services 汇总小时数,只查看该组的分组值,而不是详细信息行?到目前为止,我想不出任何特别优雅的东西。如有必要,我可以退回到奇怪的自定义代码特技。
好吧,经过大量试验后,我找不到在 Reporting Services 中执行此操作的好方法。我尝试使用自定义函数来累积总小时数(在显示 NoteGroup 标题中小时数的单元格中调用),然后在表格页脚中使用另一个自定义函数来检索该值,但累积的值将在分页符处重置。
最后,我将查询分解为各种子查询。这很糟糕,但它有效。如果你能做这样的事情会很甜蜜
SUM(hours) OVER(DISTINCT note_id PARTITION BY client_id)
......