Сумма MS Access по группам, но не по деталям - PullRequest
2 голосов
/ 19 марта 2009

Я пытаюсь вычислить сумму в отчете MS Access следующим образом:

  • Заголовок группы 1 - ярлык

    • Group2header - значение
      • Деталь - пример
      • Деталь - пример
    • Group2header - значение
      • Деталь - пример
  • Group1footer [сумма значения заголовка Group2]

Каким-то образом, когда появляются более подробные строки, сумма в нижнем колонтитуле group1 вычисляется неправильно (добавляет значение для каждой детали).

Я не могу вычислить суммы в запросе, потому что «значение» уже вычислено в запросе (подзапрос вернул бы много строк):

(
    (
        (sl_ticketdetail.weight,0) * sl_ticketdetail.amount 
        - (
            SELECT SUM(sl_invoicedetail.amount)
            FROM sl_invoicedetail 
            WHERE ticketdetailid = sl_ticketdetail.ticketdetailid
        )
        / 1000
    )
    * sl_ticketdetail.cost
)
/ 1000

Есть идеи, что может пойти не так?

Ответы [ 3 ]

1 голос
/ 20 марта 2009

Вы говорите, что получаете такие результаты:

Group 1a
    Group 2a
        Foo1         1
        Foo2         1
        foo3         2
    Group 2a Sum   4
    Group 2b
        Foo1         3
        Foo2         3
    Group 2a Sum   6
Group 1a Sum    10
Group 1b
    Group 2a
        Foo1         4
        Foo2         1
        foo3         2
    Group 2a Sum   7
    Group 2b
        Foo1         4
        Foo2         3
    Group 2a Sum   14
Group 1b Sum    21

Такое поведение я бы ожидал. Я смог сделать это, поместив =Sum([value]) в несвязанное поле в нижнем колонтитуле каждой группы (и даже в нижнем колонтитуле отчета).

Я знаю, что «работает для меня» не очень полезно.

Вы пометили поля значений детализации (или поля сводки) тем же именем, что и источник данных? Иногда MS Access имеет странное поведение, если ваши поля имеют то же имя, что и их связанный источник данных (я склонен переименовывать их немного, поэтому я уверен, что я имею в виду в коде).

0 голосов
/ 19 мая 2009

Вам понадобится источник записей основного отчета, чтобы включить итоги для группы 2. Затем вам потребуется подотчет с другим источником записей, который находится на уровне детализации.

Я думаю, что ваша лучшая ставка - опускать итоги в запросе и просто позволить отчету делать итоги по деталям. Позже пользователь может захотеть итоги на ту же дату, но в другой группе (да, вы можете создать другой источник записи). Это также следует учитывать, если пользователь применяет фильтр к отчету (вы можете или не могли предоставить им эту опцию.) В поле, отличном от группировки.

0 голосов
/ 20 марта 2009

Поскольку у вас уже есть суммы Group2, предварительно рассчитанные в вашем запросе, они будут повторяться для каждой строки результатов и, следовательно, не могут быть использованы (как вы выяснили) для вычисления итогов группы 1.

У вас есть два решения

1) предварительно рассчитать итоги Group1 в вашем запросе и просто сообщить о них, как вы делаете итоги Group2

2) использовать код в формате нижнего колонтитула Group2 / события печати, чтобы зафиксировать значение и вручную увеличить текущую итоговую сумму Group1

Я бы сказал, 1) самый простой - 2) немного волосатый и иногда приводит к неточным итоговым данным, если пользовательские страницы взад и вперед

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...