【问题标题】:Access: Calculating weighted numeric grades from letter grades for multiple fields访问:根据多个字段的字母成绩计算加权数字成绩
【发布时间】:2019-11-05 05:53:18
【问题描述】:
  • 我需要根据每棵树的 3 个标准(健康、结构、形式)计算加权等级。对于每个标准,每棵树都有一个字母等级 (A-F)。每棵树的总体等级由标准加权。

  • 我有一个 TREE TABLE,其中包含以下字段:树号、健康字母等级 (A-F)、结构字母等级 (A-F) 和格式字母等级 (A-F))

  • 我有一个等级表,其中包含以下字段:字母等级 (A-F)、数字等级 (1-0)

  • 我有一个加权表,其中包含以下字段:标准(健康、结构...)和体重(.2、.6..)

  • 我的GRADING SCALE TABLE [letter grade]TREE TABLE [health letter grade] 上的每个条件都存在一对多关系,等等。许多树可以具有相同的等级。

当我第一次测试显示每棵树的数字等级的查询时,这导致每棵树都有三条记录,而这些不是正确的值。

我想我会逐步执行该过程并使用 switch 函数运行查询,该函数为每个标准的每棵树提供正确的数字等级(是的 - 这是基于从字母等级计算数字等级的类似帖子)

我用过:

HealthNum: Switch([Health]="A",1,[Health]="B",.75...,True,"Missing a grade")

但是,我正在努力运行查询来计算每个标准的权重和最终权重。 我尝试了每个树条件:HealthWtd: [HealthNum]*[Criteria_wt];,其中条件字段设置为[Criteria]="Health"

当我设置 [Criteria]="Health" 并将 [Criteria]="Structure" 放在 OR 位置时,我最终得到每棵树的两条记录。一条记录的健康权重和结构权重不正确,而另一条记录的健康权重和结构权重不正确。

一些注意事项:评分尺度和权重可能会不时变化,所以我宁愿使用关系而不是 switch 函数。我的老板不喜欢过度嵌套。

我觉得这应该是一件容易的事,我一辈子都想不通。

【问题讨论】:

    标签: ms-access relationship calculated-field weighted


    【解决方案1】:

    使用当前表结构,在查询表达式中硬编码权重因子或使用 DLookup() 从表中提取正确的权重因子。也可以使用 DLookup() 进行缩放。

    健康示例:
    DLookup("Weight", "Weighted", "Criteria='Health'") * DLookup("Number", "Scale", "Letter='" & [Health] & "'")

    树表未标准化。如果是,可以加入 Scale 和 Weight 表以正确关联记录并计算重量。然后 CROSSTAB 查询可以产生水平输出。

    可以连接到其他表的规范化表:

    +---------+-----------+-------+
    | TreeNum | Criteria  | Grade |
    +---------+-----------+-------+
    | 10      | Health    | A     |
    +---------+-----------+-------+
    | 10      | Structure | B     |
    +---------+-----------+-------+
    | 10      | Form      | C     |
    +---------+-----------+-------+
    | 12      | Health    | B     |
    +---------+-----------+-------+
    | 12      | Structure | B     |
    +---------+-----------+-------+
    | 12      | Form      | D     |
    +---------+-----------+-------+
    

    【讨论】:

    • 经过进一步研究,我意识到树表没有规范化。我分别查询了每个评分标准,然后提取了相应的数字评分并计算了每个评分的权重。然后我使用 3 个查询来计算总权重。我试图避免查找,因为在表格中使用查找存在很多争议。谢谢!
    • 争议涉及查找字段,而不是查找表。在从查找表中提取信息的表单上构建组合框和列表框。在查询中使用 DLookup() 函数的表达式与 Lookup 字段无关。域聚合函数会降低查询性能。
    猜你喜欢
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 2014-05-11
    • 2021-04-19
    相关资源
    最近更新 更多