powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сложные расчеты между записями
8 сообщений из 8, страница 1 из 1
Сложные расчеты между записями
    #32585674
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые специалисты!
Прошу трошки внимания!
A97

Задача:
Есть нормализованная база

Код: plaintext
1.
2.
3.
4.
Дата Подразделение ПланИлиФакт Параметр Значение
янв Станколит- 1  План Выпуск  90 
янв Станколит- 1  Факт Выпуск  110 
янв Станколит- 1  Факт Реализация  60 
...

Интересно получить из нее сравнения:
(1) план-факт по 1 дате
(2) план-факт по интервалу дат

Проблема:
Отчет должен включать расчетные значения
например
Остаток от Реализации
в приведенном примере
равен 50:
ФактВыпуск (110) - ФактРеализация (60)

То есть отчет должен быть вида:

Код: plaintext
1.
2.
3.
4.
5.
6.
Подразделение: Станколит- 1 

Параметр План Факт 
Выпуск      90   110 
Реализация х   60 
Остаток 
от Реализации  50 

Вопрос:
КАК ЭТО СДЕЛАТЬ?!!

Понимаю, что
для задачи (1) план-факт по 1 дате
можно просто денормализовать
вытянуть план и факт в одну запись
а внутри этой одной записи легко посчитать что угодно

но как быть со второй - (2) план-факт по интервалу дат???
то есть отчет вида:

Код: plaintext
1.
                       План ЯНВ  Факт  ЯНВ План ФЕВ  Факт  ФЕВ ...
Выпуск      90   110 


Здесь вытягивать в одну запись - бред же!

Идея:
выгружать все исходные данные в виде "почти второй отчет"

развернуто во временную таблицу с помощью Transform
в вид
Код: plaintext
1.
Параметр  План ЯНВ  Факт  ЯНВ План ФЕВ  Факт  ФЕВ ...
Выпуск      90   110 
затем VBA-DAO бегать по полям, вычислять и добавлять записи
с "расчетными значениями"
Правильная идея?
Тогда как определять, какие поля хватать расчетчиком?
по индексу поля "Параметр?"

Еще идеи, которыми вы пользуетесь?
Примеры реализации?
Спасибо!
...
Рейтинг: 0 / 0
Сложные расчеты между записями
    #32585744
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО - сложно называть таблу нормализованной (1 нормальная форма - не больше - и то из-за того, что база реляционная)

ИМХО2 -
авторПараметр План Факт
Выпуск 90 110
Реализация х 60 - одним селектом
авторОстаток от Реализации 50 - еще одним
при необходимости можно склеить их union'ом

PS: Про вторую задачу не понял :(
...
Рейтинг: 0 / 0
Сложные расчеты между записями
    #32585815
Roma R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо, наверное, создать перекрестный запрос
...
Рейтинг: 0 / 0
Сложные расчеты между записями
    #32585845
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про перекрестный понимаю и говорю про него (transform)

вторая задача - это то же самое, что первая,
но не одна пара План-факт, а задаваемое множество таких пар от янв до декабря например

а про второй селект туплю -
как я в селекте произведу расчеты между 2-мя записями:
Станколит-1 Выпуск 110
Станколит-1Реализация 60
??!!!
Join исходной таблицы саму с собой по подразделению и периоду
с целью получения обоих параметров в 1 запись и расчет внутри нее?
а как выпуск с реализацией заджойнить-то?!
промежуточное вычисляемое псевдополе = 1????

объясни пожалуйста как
...
Рейтинг: 0 / 0
Сложные расчеты между записями
    #32585898
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО2 -
авторПараметр План Факт
Выпуск 90 110
Реализация х 60 - одним селектом
Код: plaintext
1.
2.
3.
4.
5.
6.
select
 [параметр],
 sum(iif([планилифакт] = 'план', [значение], Null)) as [план],
 sum(iif([планилифакт] = 'факт', [значение], Null)) as [факт]
from tbl
where ...
group by [параметр]
авторОстаток от Реализации 50 - еще одним
Код: plaintext
1.
2.
3.
4.
select
 'Остаток от Реализации' as name,
 sum(iif([параметр] = 'Выпуск', [значение], (- 1 )*[значение])) as [остаток]
from tbl
where [планилифакт] = 'факт' and ...
?
...
Рейтинг: 0 / 0
Сложные расчеты между записями
    #32585977
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
теперь понятно, как
старею,
забываю основы

получается
на каждый расчетный элемент
нужен свой запрос

это же кошмар будет!!!!
...
Рейтинг: 0 / 0
Сложные расчеты между записями
    #32585987
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexus12теперь понятно, как
старею,
забываю основы

получается
на каждый расчетный элемент
нужен свой запрос

это же кошмар будет!!!!
А если "склеить" поля [Дата] & [ПланИлиФакт] и уже по получившемуся полю сделать transform?
...
Рейтинг: 0 / 0
Сложные расчеты между записями
    #32586588
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
записаться в воду 2*27





Задача номер 2

Как известно, пользователям удобнее вводить данные в ненормализованном виде:

Период Подразделение Выпуск_План Реализация_План Выпуск_Факт Реализация_Факт И_так_далее
янв Станколит-1 100 80 50 60 ....
фев Станколит-1 100 80 50 60......
....

Также известно, что работать с такими данными весьма неудобно:
чтобы получить отчет вида

Параметр ПланЯнв ФактЯнв ПланФев ФактФев...
Станколит-1 Выпуск
Станколит-1 Реализация
Станколит-1 Остаток (выпуск - реализация)
Станколит-2 Выпуск
Станколит-2 Реализация
Станколит-2 Остаток (выпуск - реализация)

отягощенный _расчетными_ записями "Остаток (выпуск - реализация)"
нужно сильно извратиться
то бишь нормализовать таблицу (умею) и затем сделать Transform

И есть 2 пути:
Сначала рассчитать "Остаток (выпуск - реализация)"
в ненормализованной (внутри одной записи это просто)
и потом нормализовывать

или

Сразу нормализовать, а потом рассчитывать методом,
предложенным уважаемым paparone

Вопрос:
как лучше или как уважаемый Олл чаще делает и почему?

Спасибо!

>А если "склеить" поля [Дата] & [ПланИлиФакт] и уже по получившемуся полю сделать transform?

Так и собираюсь сделать, см.задачу 2
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сложные расчеты между записями
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]