MS-Access计算报告中已完成任务的百分比

时间:2011-08-17 20:37:26

标签: ms-access report

正如标题所说,我正在寻找一种方法来计算一个人完成任务的百分比。数据的结构使得每个人都可以拥有许多任务,每个任务可以有许多子任务,如下所述:

员工

  • (PK)(自动编号)EMPLOYEE_ID
  • (文本)姓
  • (文本)名字

任务

  • (PK)(自动编号)TASK_ID
  • (FK)(编号)EMPLOYEE_ID
  • (备注)说明
  • (是/否)已完成

子任务

  • (PK)(自动编号)subtask_id
  • (FK)(编号)TASK_ID
  • (备注)说明
  • (是/否)已完成

我一直在尝试制作一份报告(名为“任务完成率”),列出所有员工,已完成任务的数量,他们拥有的任务总数以及完成率百分比。目前,我有以下两个问题:

  • SELECT Count(employee_id)FROM [Tasks] AS TotalTask​​s WHERE [Tasks] .employee_id = 报告![任务完成率]!txt_employeeID
  • SELECT Count(employee_id)FROM [Tasks] AS CompletedTasks WHERE [Tasks] .employee_id = Reports![Task Completion Rates]!txt_employeeID AND [Tasks] .Completed = 1

这些都是必要的,还是有办法从一个查询中获取两个计数?另外,我如何在报告中使用这些总数?报告的记录源设置为Employees表,以便它可以列出所有。我已经为每个文本框准备好了文本框,但是我在使用每个文本框的源代码中的表达式构建器时实际显示查询结果时遇到问题。我将其中一个文本框的源设置为= [qry_TotalTask​​sPerEmployee]![TotalTask​​s](通过表达式构建器),但它会一直提示我输入[qry_TotalTask​​sPerEmployee]的值。关于如何使这个工作的任何想法?

2 个答案:

答案 0 :(得分:1)

尝试取得已完成值的平均值。例如:

SELECT employee_id, -avg(Completed) FROM [Tasks] GROUP BY employee_id

-之前的avg是因为true存储为-1,正如@Neil所指出的那样。

我不确定您对报告的意思 - 将查询结果放在报告中应该很容易。

答案 1 :(得分:0)

我并没有真正进入msaccess报告,但由于已完成似乎是0或1,您应该努力进行以下查询 -Edit结果是1或-1为bool所以不能做一个总和(已完成)但需要一个IIF()

Select employee_id, count(*), sum(IIF(completed,1,0)), sum(IIF(completed,1,0))*100/count(*) as rate
From employees
Left join tasks
On tasks.employee_id = employees.employee_id
Group by employee_id

请注意,对于没有任务的员工,这确实会为零问题创建一个除法。你将不得不欺骗如何处理bsose(排除,显示为0%或......)