Доступ: расчет взвешенных числовых оценок по буквенным оценкам для нескольких полей - PullRequest
1 голос
/ 05 ноября 2019
  • Мне нужно рассчитать взвешенную оценку по 3 критериям (здоровье, структура, форма) для каждого дерева. Каждое дерево имеет буквенную оценку (AF) для каждого из критериев. Общая оценка для каждого дерева взвешена по критериям.

  • У меня есть TREE TABLE с полями: tree #, оценка здоровья букв (AF), оценка структуры букв (AF)и форма буквенная оценка (AF))

  • У меня есть ГРАФИЧЕСКИЙ ТАБЛИЦЫ С полями: буквенная оценка (AF), числовая оценка (1-0)

  • У меня есть ВЕСОВЫЙ СТОЛ с полями: критерии (здоровье, структура ...) и вес (.2, .6 ..)

  • У меня есть одно-Отношение ко многим из GRADING SCALE TABLE [letter grade] к каждому из критериев TREE TABLE [health letter grade] и т. д. Многие деревья могут иметь одинаковую оценку.

Когда я впервые протестировал запрос, показывающийчисловые оценки для каждого дерева, но это привело к тройным записям для каждого дерева, и они не были правильными значениями.

Я подумал, что я бы пошаговую процедуру и запустил запрос, используя функцию переключателя, который предоставил правильные числовыеоценка для каждого дерева по каждому критериюиз буквенных оценок)

Я использовал:

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

НО, я изо всех сил пытаюсь выполнить запрос для расчета весов для каждого критерия и конечных весов. Я попробовал для каждого из критериев дерева: HealthWtd: [HealthNum]*[Criteria_wt];, где поле критерия было установлено на [Criteria]="Health"

Когда я установил [Criteria]="Health" и я вставил [Criteria]="Structure" в положение ИЛИ, я в конечном итогес двумя записями для каждого дерева. Одна запись имеет правильный вес здоровья и неправильный вес структуры, в то время как другая запись имеет неправильный вес здоровья и правильный вес структуры.

Некоторые предостережения: шкала оценок и веса могут изменяться время от времени довремя, поэтому я бы предпочел использовать отношения над функцией переключения. Моему боссу не нравилось использование чрезмерного вложения.

Я чувствую, что это должно быть легким заданием, и я не могу понять это на мой взгляд.

Example of my tables and calculations were done manually

1 Ответ

0 голосов
/ 05 ноября 2019

С текущей структурой таблицы, либо весовой коэффициент жесткого кода в выражении запроса, либо используйте DLookup (), чтобы извлечь правильный весовой коэффициент из таблицы. Также можно использовать DLookup () для Scale.

Пример для здоровья:
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     |
+---------+-----------+-------+
...