Якщо не задано ж одного елемента матриці, то маємо систему m+n рівнянь (умови балансу) з m змінними. Можна показати, що така система рівнянь має багато рішень, і вони можуть бути знайдені, у загальному випадку, методом перебору, алгоритм якого залежить від умов конкретної задачі. Якщо для такої неповної системи лінійних рівнянь сформульована цільова функція (максимум прибутку, мінімум витрат на перевезення і т.п.), то така задача зводиться до моделі лінійного програмування, при цьому рівняння балансу будуть обмеженнями. Такі задачі розв’язується відповідними програмами. Але в реальній практиці економічних розрахунків дуже часто зустрічаються випадки, коли оптимізаційна задача не ставиться, тоді їх зручно розв’язувати за допомогою електронних таблиць у діалоговому режимі, тому що користувач відчуває умови своєї задачі і може досить швидко її розв’язати. У таблиці 5а приведено одне з рішень, яке отримано в Exel. Курсивом показані нові значення, що отримані в результаті “балансування”.
Таблиця 5аРезультат закріплення постачальників за споживачами
Постачальники |
Споживачі |
С1 |
С2 |
С3 |
Разом |
Потужності Пi\Сj |
50 |
60 |
30 |
140 |
|
П1 |
40 |
10 |
20 |
10 |
40 |
П2 |
30 |
0 |
15 |
15 |
30 |
П3 |
50 |
30 |
20 |
50 |
|
П4 |
20 |
10 |
5 |
5 |
20 |
Всього |
140 |
50 |
60 |
30 |
140 |
Тепер цю таблицю можна звести до структури, яку можна імпортувати в із середовища Excell в таблицю бази даних Access, яка за своєю структурою є перехресною таблицею. Хай ця таблиця має назву П_С_Cross, її структура і вміст наведено в табл. 5b.
Таблиця 5bСтруктура і вміст таблиці П_С_Cross
NP |
С1 |
С2 |
С3 |
П1 |
10 |
20 |
10 |
П2 |
0 |
15 |
15 |
П3 |
30 |
20 |
|
П4 |
10 |
5 |
5 |
Цю таблицю можна отриманти із таблиці (бази даних) П_С, структура і вміст якої наведено в табл.6, шляхом засосування запиту типу CrossTab до таблиці П_С_Cross.
NP |
NC |
QTY |
П3 |
C1 |
30 |
||||
П1 |
C1 |
10 |
П3 |
С2 |
20 |
||||
П1 |
С2 |
20 |
П4 |
C1 |
10 |
||||
П1 |
C3 |
10 |
П4 |
С2 |
5 |
||||
П2 |
C2 |
15 |
П4 |
C3 |
5 |
||||
П2 |
C3 |
15 |
|||||||
Але зараз стоїть зворотна задача – із таблиці П_С_Cross отримати таблицю П_С. Будемо називати перетворення нормалізованих таблиць типу, що наведено в таблиці 5b (П_С_Cross), в таблиці типу, що наведен в таблиці 6 (П_С), згорткою, а зворотні перетворення – розгорткою. В сучасних СКБД поки що на верхньому рівні програмування (засобами візуального програмування і мови SQL СКБД Access) реалізована тільки процедура розгортки, яка здійснюється груповим запитом Crosstabабо інструкцією Transform, але процедура згортки не реалізована безпосередньо груповим оператором, тому її треба програмувати. Нижче наводиться текст програми (запиту) мовою SQL.
Select П_С_Cross.NP, "С1" As NC, П_С_Cross.[С1] As QTY
From П_С_Cross
Where (((П_С_Cross.[С1]) Is Not Null))
Union
Select П_С_Cross.NP, "С2" As NC, П_С_Cross.[С2] As QTY
From П_С_Cross
Where (((П_С_Cross.[С2]) Is Not Null))
Union
Select П_С_Cross.NP, "С3" As NC, П_С_Cross.[С3] As QTY
From П_С_Cross
Where (((П_С_Cross.[С3]) Is Not Null));
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.