GlobalVista
System Zarządzania Sprzedażą
Kompleksowy system zarządzania i analizy sprzedaży dla 24 rynków zagranicznych. Projekt łączy hybrydową architekturę bazodanową w chmurze Azure, dedykowane API w Pythonie oraz zaawansowane dashboardy zarządcze w Power BI. Praca zrealizowana jako projekt inżynierski.
Centralny Panel Zarządzania & Warstwa Operacyjna
Webowy interfejs zarządczy łączący relacyjny model transakcyjny (klienci, sprzedawcy, zamówienia, produkty) z modułem generatora danych syntetycznych Faker oraz asynchroniczną synchronizacją baz danych ze środowiskiem chmurowym Microsoft Azure.
Strategia i prognozy sprzedaży
Zaawansowane raporty zarządcze prognozujące popyt i monitorujące tempo realizacji kluczowych celów sprzedażowych w czasie. Dynamiczne miary DAX analizują trendy kwartalne oraz roczne.
Szczegółowa analityka transakcyjna
Interaktywny widok umożliwiający natychmiastowe przejście od zagregowanych wyników makro do poziomu pojedynczego regionu, kategorii asortymentowej, konkretnego produktu czy przedstawiciela handlowego.
Przepływy finansowe i operacje bankowe
Bieżące monitorowanie transakcji walutowych, rozliczeń międzybankowych oraz marży netto w 24 krajach. Pozwala kadrze finansowej kontrolować płynność i optymalizować koszty przewalutowań.
Analiza scenariuszowa i realizacja budżetu
Zestawienie celów budżetowych z wynikami rzeczywistymi od początku roku (YTD Variance). Narzędzie wspiera analizę odchyleń i testowanie wariantów sprzedażowych pod decyzje operacyjne.
Hybrydowa warstwa bazodanowa
Równoczesna integracja relacyjnego Microsoft SQL Server oraz nierelacyjnego MongoDB z automatyczną replikacją danych transakcyjnych i logów do środowiska chmurowego Azure.
Architektura Bezpieczeństwa & RBAC
Dedykowany moduł Flask-Login z 3 rolami użytkowników, kryptograficznym hashowaniem haseł SHA-256 z unikalną solą oraz deklaratywnymi dekoratorami uprawnień dla endpointów API.
Wielowątkowy generator Faker
Generator wolumenów testowych produkujący ponad milion spójnych rekordów dla 24 rynków międzynarodowych z zachowaniem lokalnych walut, formatów adresowych i numeracji podatkowej.
Model Schematu Gwiazdy (Star Schema)
Zoptymalizowany model relacyjny w Power BI ze zintegrowaną tabelą kalendarzową DateDimension oraz zaawansowanymi kalkulacjami DAX Time Intelligence wspierającymi analitykę drill-down.
Integracja z chmurą Microsoft Azure
Dedykowany moduł CloudHandler synchronizujący dane z Azure SQL Database oraz rozproszonym Azure Cosmos DB, gwarantujący wysoką dostępność i skalowalność w chmurze.
Skalowalne REST API & Backend
Backend w Pythonie z zestawem endpointów REST API obsługujących operacje CRUD dla 7 kluczowych encji biznesowych, ze standaryzacją odpowiedzi JSON i obsługą błędów HTTP.
Kontekst inżynierski i wyzwania integracji
Projekt GlobalVista powstał w ramach pracy inżynierskiej jako kompletna, rozproszona platforma analityczno-zarządcza symulująca operacje międzynarodowego przedsiębiorstwa handlowego działającego na 24 rynkach zagranicznych.
Głównym wyzwaniem architektonicznym było zintegrowanie dwóch fundamentalnie różnych paradygmatów bazodanowych: relacyjnego (Microsoft SQL Server / Azure SQL), zapewniającego pełną integralność transakcyjną ACID dla zamówień i rozliczeń finansowych, oraz dokumentowego (MongoDB / Azure Cosmos DB), dedykowanego do logowania zdarzeń systemowych, audytu operacji API i przechowywania elastycznych metadanych produktowych.
Przepływ danych w architekturze hybrydowej
System został zaprojektowany w modelu 4-warstwowym, gwarantującym pełną separację odpowiedzialności (Separation of Concerns) od źródeł danych aż po interaktywne raporty zarządcze:
Baza Relacyjna & Logi
Lokalna baza SQL Server (SalesDB) z relacyjnym modelem transakcyjnym oraz instancja MongoDB dla danych niestrukturalnych i logów audytowych.
Flask Backend & API
Wydajny backend w Pythonie z modułami DatabaseHandler, thread-safe pulą połączeń, kontrolą RBAC oraz wielowątkowym generatorem Faker.
Microsoft Azure Cloud
Moduł CloudHandler synchronizujący tabele transakcyjne z Azure SQL Database oraz kolekcje JSON z Azure Cosmos DB (NoSQL).
Power BI & Star Schema
Model Schematu Gwiazdy zoptymalizowany pod silnik VertiPaq, dynamiczne kalkulacje DAX i 4 dedykowane pulpity analityczne.
Specyfikacja Modelu Relacyjnego (Star Schema)
Warstwa analityczna Power BI opiera się na znormalizowanym Schemacie Gwiazdy. Dzięki wydzieleniu tabeli faktów i dedykowanych tabel wymiarów, zapytania analityczne VertiPaq osiągają maksymalną kompresję i szybkość agregacji:
| Tabela / Encja | Rola w modelu | Zakres atrybutów i odpowiedzialność |
|---|---|---|
Orders / OrderDetails |
Tabela Faktów (Centralna) | Klucze obce do wymiarów, wolumeny, ceny transakcyjne, zastosowane upusty, waluta transakcyjna, timestampy realizacji. |
Customers |
Wymiar Klienta | Dane teleadresowe dla 24 rynków, unikalne identyfikatory podatkowe, segmentacja obrotu, geolokalizacja. |
Sellers |
Wymiar Handlowca | Przedstawiciele handlowi przypisani do poszczególnych rynków, kwartalne targety sprzedażowe, struktura prowizyjna. |
Products / Categories |
Wymiar Produktowy | Katalog 8 głównych kategorii asortymentowych, jednostkowe koszty wytworzenia, ceny sugerowane, marża bazowa. |
Countries / Regions |
Wymiar Geograficzny | 24 kraje w 4 regionach globalnych, oficjalne waluty lokalne, stawki podatkowe, strefy logistyczne. |
DateDimension |
Wymiar Czasu | Kalendarz transakcyjny wspierający miary DAX: Year-to-Date (YTD), Quarter-to-Date (QTD), Month-over-Month (MoM). |
Architektura Bezpieczeństwa i Matryca Uprawnień (RBAC)
Dostęp do platformy jest w pełni kontrolowany przez trójstopniowy mechanizm Role-Based Access Control (RBAC) zaimplementowany w module auth_handler.py przy użyciu Flask-Login i hashowania SHA-256 z soleniem:
Rola Administratora (Full Control)
Zarządzanie schematem baz danych, wyzwalanie replikacji lokalno-chmurowej z Azure, uruchamianie generatora rekordów testowych oraz pełna administracja kontami i uprawnieniami użytkowników.
Rola Analityka / Użytkownika (Read-Write Operations)
Tworzenie i edycja zamówień, przegląd stanów magazynowych, eksport zestawień tabelarycznych oraz pełny dostęp do interaktywnych dashboardów zarządczych Power BI.
Rola Audytora / Gościa (Read-Only Compliance)
Bezpieczny wgląd w zagregowane wskaźniki makro i raporty bez możliwości modyfikacji danych ani wglądu w wrażliwe dane kontaktowe klientów (separacja PII).
Wyróżniki inżynierskie projektu
- Integracja 4 heterogenicznych silników bazodanowych: SQL Server, MongoDB, Azure SQL oraz Cosmos DB
- Wielowątkowy generator danych Faker: ponad 1 000 000 spójnych rekordów dla 24 rynków międzynarodowych
-
Bezpieczeństwo wielowątkowości: thread-safe DatabaseHandler zabezpieczony blokadami współbieżności
threading.Lock - Asynchroniczna synchronizacja chmurowa z Microsoft Azure z mechanizmem retry policy i connection pooling
- Kompletne REST API z 7+ endpointami CRUD, walidacją nagłówków i obsługą kodów błędów HTTP
- 4 dedykowane raporty Power BI z zaawansowanymi kalkulacjami DAX (Time Intelligence, odchylenia budżetowe, FX)
- Czysta architektura backendowa z separacją warstwy domenowej, repozytorium danych i warstwy prezentacji
# cloud_handler.py - Zarządzanie synchronizacją chmurową Azure
import pyodbc
from azure.cosmos import CosmosClient, PartitionKey
import threading
class CloudHandler:
def __init__(self, config):
self.lock = threading.Lock()
self.azure_sql_conn = self._init_azure_sql(config["AZURE_SQL_STR"])
self.cosmos_client = CosmosClient(config["COSMOS_URI"], credential=config["COSMOS_KEY"])
self.cosmos_container = self._get_or_create_cosmos(config["COSMOS_DB"])
def sync_sales_transactions(self, local_records):
"""Bezpieczna replikacja transakcji do Azure SQL oraz archiwizacja JSON w Cosmos DB"""
with self.lock:
cursor = self.azure_sql_conn.cursor()
try:
cursor.executemany(
"EXEC sp_UpsertOrder ?, ?, ?, ?, ?, ?",
[rec.to_tuple() for rec in local_records]
)
self.azure_sql_conn.commit()
# Asynchroniczny zrzut metadanych transakcyjnych do bazy Cosmos DB
for rec in local_records:
self.cosmos_container.upsert_item(rec.to_cosmos_payload())
return {"status": "success", "synced_count": len(local_records)}
except Exception as err:
self.azure_sql_conn.rollback()
return {"status": "error", "message": str(err)}