Ms access 访问:根据多个字段的字母等级计算加权数字等级

Ms access 访问:根据多个字段的字母等级计算加权数字等级,ms-access,relationship,calculated-field,weighted,Ms Access,Relationship,Calculated Field,Weighted,我需要根据每棵树的3个标准(健康、结构、形式)计算加权分数。对于每个标准,每个树都有一个字母等级(a-F)。每棵树的总等级由标准加权 我有一个带有字段的树表:TREE#、健康字母等级(a-F)、结构字母等级(a-F)和表单字母等级(a-F)) 我有一个带有字段的分级比例表:字母等级(a-F)、数字等级(1-0) 我有一个带字段的加权表:条件(健康状况、结构…)和权重(.2、.6…) 我从评分表[字母等级]到树表[健康字母等级]上的每个标准都有一对多的关系。许多树可以具有相同的等级 当我第一次测

我需要根据每棵树的3个标准(健康、结构、形式)计算加权分数。对于每个标准,每个树都有一个字母等级(a-F)。每棵树的总等级由标准加权

  • 我有一个带有字段的树表:TREE#、健康字母等级(a-F)、结构字母等级(a-F)和表单字母等级(a-F))

  • 我有一个带有字段的分级比例表:字母等级(a-F)、数字等级(1-0)

  • 我有一个带字段的加权表:条件(健康状况、结构…)和权重(.2、.6…)

  • 我从
    评分表[字母等级]
    树表[健康字母等级]
    上的每个标准都有一对多的关系。许多树可以具有相同的等级

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

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

    我用过:

    HealthNum: Switch([Health]="A",1,[Health]="B",.75...,True,"Missing a grade")
    
    但是,我正在努力运行一个查询来计算每个条件的权重和最终权重。 我尝试了每个树标准:
    HealthWtd:[HealthNum]*[criteria\u wt]其中标准字段设置为
    [criteria]=“Health”

    当我设置
    [Criteria]=“Health”
    并将
    [Criteria]=“Structure”
    放在OR位置时,每个树都有两条记录。一条记录的健康权重和结构权重不正确,而另一条记录的健康权重和结构权重不正确

    一些注意事项:分级比例和权重可能会不时变化,因此我宁愿使用切换函数上的关系。我的老板不喜欢过度筑巢

    我觉得这应该是一项简单的任务,而且我一辈子都无法解决这个问题


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

    健康示例:
    DLookup(“重量”、“加权”、“标准”健康“))*DLookup(“数字”、“刻度”、“字母=”、[Health]&“”)

    树表未规范化。如果是,则可以连接到磅秤和重量表,以正确关联记录并计算重量。然后,交叉表查询可以生成水平输出

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

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

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

    健康示例:
    DLookup(“重量”、“加权”、“标准”健康“))*DLookup(“数字”、“刻度”、“字母=”、[Health]&“”)

    树表未规范化。如果是,则可以连接到磅秤和重量表,以正确关联记录并计算重量。然后,交叉表查询可以生成水平输出

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

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

    经过进一步的研究,我意识到树表没有规范化。我分别查询每个评分标准,然后提取相应的数字评分,并计算每个标准的评分权重。然后我使用3个查询来计算总权重。我试图避免查找,因为在表中使用查找有很多争议。谢谢争议涉及查找字段,而不是查找表。在从查找表中提取信息的表单上构建组合框和列表框。在查询中使用DLookup()函数的表达式与查找字段无关。域聚合函数会降低查询的性能。经过进一步研究,我发现树表没有规范化。我分别查询每个评分标准,然后提取相应的数字评分,并计算每个标准的评分权重。然后我使用3个查询来计算总权重。我试图避免查找,因为在表中使用查找有很多争议。谢谢争议涉及查找字段,而不是查找表。在从查找表中提取信息的表单上构建组合框和列表框。在查询中使用DLookup()函数的表达式与查找字段无关。域聚合函数会降低查询的性能。