Распределение веса между другими KPI, если значение равно «N / A» - PullRequest
1 голос
/ 24 февраля 2020

Данные: разные KPI и вес

   KPI     Weight 
   AAA       25
   BBB       25
   CCC       25
   DDD       25

Значения для KPI: 2, Full = 25 и N / A = 0

Что мне нужно, если KPI_Value = "N / «Вес должен быть распределен между другими KPI с учетом ProjectID и даты, чтобы он не смешивал распределение. Так, например,

ProjectID    KPI    KPI_Value    Date       Weight
   1        AAA      Full     24/02/2020     25 + 25/3
   1        BBB      Full     24/02/2020     25 + 25/3
  *1        CCC      N/A      24/02/2020     0*    <--------
   1        DDD      Full     24/02/2020     25 + 25/3

   2        AAA      Full     24/03/2020     25 + 50/2
  *2        BBB      N/A      24/03/2020     0*    <--------
   2        CCC      Full     24/03/2020     25 + 50/2
  *2        DDD      N/A      24/03/2020     0*    <--------

Я пытаюсь сделать это в Ms Access с помощью запроса. Если вы считаете, что это не лучший способ, пожалуйста, предложите подходящий способ.

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Исходя из моего опыта, запрос - лучший подход в Access. Формы и отчеты предназначены для подключения к запросам и таблицам для минимизации кода. Вы можете сделать этот проект с запросом, но в доступе у вас есть два подхода на основе запроса. Оба подхода используют вычисляемые переменные, но менее переносимый подход заключается в использовании встроенных функций Access и VBA. Чистый sql и, следовательно, более переносимый подход состоит в том, чтобы основывать вычисленные переменные на коррелированных sql подзапросах. В Access и, опять же, основываясь на опыте, подход access и vba-функций гораздо надежнее и проще в реализации, поэтому я покажу этот подход.

Сначала я внес некоторые изменения и некоторые предположения относительно структуры данных. :

enter image description here

Я разрешаю Access добавить первичный ключ с именем ProjectsTableID. Каждой записи нужен уникальный идентификатор. Тогда я предположил, что каждая переменная была либо числом, либо строкой. В частности, обратите внимание, что я ссылаюсь на значение KPI_Value как «NA». Вот как вы ссылаетесь на строку. Я также удалил /, поскольку я не хотел иметь дело с выходом из него. Также обобщенный вес, как будет видно. Вот запрос: enter image description here

  CountofNA: DCount("KPI_Value","Projects","ProjectID = " & [ProjectID] & " AND KPI_Value =  'NA'")

SumofNAWeight: DSum("Weight","Projects","ProjectID = " & [ProjectID] & " AND KPI_Value =  'NA'")

NewWeight: IIf([KPI_Value]='NA',0,[Weight]+[SumofNAWeight]/[CountofNA])

Настройте результат для вашей структуры данных:
enter image description here

0 голосов
/ 24 февраля 2020

Вы можете использовать мою функцию RoundSum, найденную на GitHub : VBA.Round

' Rounds a series of numbers so the sum of these matches the
' rounded sum of the unrounded values.
' Further, if a requested total is passed, the rounded values
' will be scaled, so the sum of these matches the rounded total.
' In cases where the sum of the rounded values doesn't match
' the rounded total, the rounded values will be adjusted where
' the applied error will be the relatively smallest.
'
' The series of values to round must be passed as an array.
' The data type can be any numeric data type, and values can have
' any value.
' Internally, the function uses Decimal to achieve the highest
' precision and Double when the values exceed the range of Decimal.
'
' The result is an array holding the rounded values, as well as
' (by reference) the rounded total.
'
' If non-numeric values are passed, an error is raised.
'
' Requires:
'   RoundMid
'
' 2018-03-26. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function RoundSum( _
    ByVal Values As Variant, _
    Optional ByRef Total As Variant, _
    Optional ByVal NumDigitsAfterDecimal As Long) _
    As Variant
' <snip>

Слишком много кода для публикации здесь, но реализация так просто, как:

values = Array(25, 25, 0, 25)
sum = 4 * 25
weights = RoundSum(values, sum, 1)

result -> { 33.3, 33.3, 0, 33.4 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...