Sunteți pe pagina 1din 6

CERINTE:

1. Prelucrari in SQL Server


1.1 baza de date
1.2 Depozitul de date
1.3 Interogari SQL, functii, proceduri si trigger-e
2. Prelucrari in MS Power BI
2.1 Importul datelor din SQL Server
2.2 Utilizarea unor functii DAX. Coloane calculate si masuri KPI
2.3 Utilizarea unor script-uri Python
2.4 2.4 Dashboard-uri
3. Generarea de rapoarte utilizand Report Viewer Control for .Net Windows
3.1 Definire conexiune
3.2 Dataset-uri
3.3 Rapoarte
4. Prelucrari utilizand MS PowerPivot. KPI
-- Crearea bazei de date
CREATE DATABASE VanzariElectrocasnice;
USE VanzariElectrocasnice;

-- Tabel pentru stocarea informațiilor despre produse


CREATE TABLE Produs (
ProdusID INT PRIMARY KEY,
NumeProdus NVARCHAR(100),
Categorie NVARCHAR(50),
Pret DECIMAL(10, 2),
Stoc INT,
Garantie INT
);

-- Tabel pentru stocarea informațiilor despre clienți


CREATE TABLE Client (
ClientID INT PRIMARY KEY,
Nume NVARCHAR(50),
Prenume NVARCHAR(50),
Email NVARCHAR(100),
Telefon NVARCHAR(15),
Adresa NVARCHAR(255)
);

-- Tabel pentru stocarea informațiilor despre angajați


CREATE TABLE Angajat (
AngajatID INT PRIMARY KEY,
Nume NVARCHAR(50),
Prenume NVARCHAR(50),
Email NVARCHAR(100),
Telefon NVARCHAR(15),
Adresa NVARCHAR(255),
Pozitie NVARCHAR(50)
);

-- Tabel pentru stocarea informațiilor despre depozite


CREATE TABLE Depozit (
DepozitID INT PRIMARY KEY,
NumeDepozit NVARCHAR(50),
Locatie NVARCHAR(100)
);

-- Tabel pentru stocarea datelor despre vânzări


CREATE TABLE Vanzare (
VanzareID INT PRIMARY KEY,
DataVanzare DATE,
ProdusID INT,
ClientID INT,
AngajatID INT,
Cantitate INT,
FOREIGN KEY (ProdusID) REFERENCES Produs(ProdusID),
FOREIGN KEY (ClientID) REFERENCES Client(ClientID),
FOREIGN KEY (AngajatID) REFERENCES Angajat(AngajatID)
);

-- Tabel pentru stocarea informațiilor despre comenzi


CREATE TABLE Comanda (
ComandaID INT PRIMARY KEY,
VanzareID INT FOREIGN KEY REFERENCES Vanzare(VanzareID),
DataComanda DATE
);

-- Inserare înregistrări de exemplu în tabele


INSERT INTO Produs VALUES (1, 'Televizor Smart', 'Electrocasnice', 1200.0, 50, 24);
INSERT INTO Produs VALUES (2, 'Laptop', 'Electrocasnice', 2500.0, 20, 12);
INSERT INTO Produs VALUES (3, 'Frigider Side-by-Side', 'Electrocasnice', 3000.0, 15, 24);
INSERT INTO Produs VALUES (4, 'Mașină de spălat vase', 'Electrocasnice', 1500.0, 30, 18);
INSERT INTO Produs VALUES (5, 'Cuptor cu microunde', 'Electrocasnice', 500.0, 25, 12);
INSERT INTO Produs VALUES (6, 'Espressor', 'Electrocasnice', 800.0, 10, 12);
INSERT INTO Produs VALUES (7, 'Robot aspirator', 'Electrocasnice', 700.0, 25, 24);
INSERT INTO Produs VALUES (8, 'Aer condiționat', 'Electrocasnice', 2000.0, 10, 24);

INSERT INTO Client VALUES (1, 'Smith', 'John', 'john.smith@example.com', '123-456-7890',


'Str. Exemplu, Nr. 123');
INSERT INTO Client VALUES (2, 'Johnson', 'Alice', 'alice.johnson@example.com', '333-444-
5555', 'Str. Principală, Nr. 456');
INSERT INTO Client VALUES (3, 'Anderson', 'Robert', 'robert.anderson@example.com', '666-
777-8888', 'Str. Centrală, Nr. 789');
INSERT INTO Client VALUES (4, 'Brown', 'Emily', 'emily.brown@example.com', '999-000-
1111', 'Str. Nouă, Nr. 101');
INSERT INTO Client VALUES (5, 'Miller', 'William', 'william.miller@example.com', '222-
333-4444', 'Str. Veche, Nr. 121');
INSERT INTO Client VALUES (6, 'Davis', 'Olivia', 'olivia.davis@example.com', '555-666-
7777', 'Str. Mare, Nr. 212');
INSERT INTO Client VALUES (7, 'Garcia', 'James', 'james.garcia@example.com', '777-888-
9999', 'Str. Mica, Nr. 313');
INSERT INTO Client VALUES (8, 'White', 'Sophia', 'sophia.white@example.com', '111-222-
3333', 'Str. Larga, Nr. 414');
INSERT INTO Angajat VALUES (1, 'Doe', 'Jane', 'jane.doe@example.com', '987-654-3210',
'Str. Test, Nr. 456', 'Vanzator');
INSERT INTO Angajat VALUES (2, 'Taylor', 'Christopher', 'christopher.taylor@example.com',
'333-444-5555', 'Str. Sud, Nr. 13', 'Manager');
INSERT INTO Angajat VALUES (3, 'Harris', 'Linda', 'linda.harris@example.com', '666-777-
8888', 'Str. Nord, Nr. 17', 'Vanzator');
INSERT INTO Angajat VALUES (4, 'Clark', 'Michael', 'michael.clark@example.com', '999-000-
1111', 'Str. Est, Nr. 21', 'Vanzator');
INSERT INTO Angajat VALUES (5, 'Lewis', 'Kimberly', 'kimberly.lewis@example.com', '222-
333-4444', 'Str. Vest, Nr. 25', 'Manager');
INSERT INTO Angajat VALUES (6, 'Robinson', 'Daniel', 'daniel.robinson@example.com', '555-
666-7777', 'Str. Centru, Nr. 30', 'Vanzator');
INSERT INTO Angajat VALUES (7, 'Walker', 'Jennifer', 'jennifer.walker@example.com', '777-
888-9999', 'Str. Principală, Nr. 40', 'Manager');
INSERT INTO Angajat VALUES (8, 'Hall', 'Mark', 'mark.hall@example.com', '111-222-3333',
'Str. Nouă, Nr. 50', 'Vanzator');

INSERT INTO Depozit VALUES (1, 'Depozit Central', 'Locatie Centrala');


INSERT INTO Depozit VALUES (2, 'Depozit Sud', 'Locatie Sud');
INSERT INTO Depozit VALUES (3, 'Depozit Nord', 'Locatie Nord');
INSERT INTO Depozit VALUES (4, 'Depozit Est', 'Locatie Est');
INSERT INTO Depozit VALUES (5, 'Depozit Vest', 'Locatie Vest');
INSERT INTO Depozit VALUES (6, 'Depozit Central-Nord', 'Locatie Central-Nord');
INSERT INTO Depozit VALUES (7, 'Depozit Central-Sud', 'Locatie Central-Sud');
INSERT INTO Depozit VALUES (8, 'Depozit Central', 'Locatie Centrala');

INSERT INTO Vanzare VALUES (1, '2024-01-15', 1, 1, 1, 5);


INSERT INTO Vanzare VALUES (2, '2024-01-16', 2, 2, 2, 3);
INSERT INTO Vanzare VALUES (3, '2024-01-17', 3, 3, 3, 2);
INSERT INTO Vanzare VALUES (4, '2024-01-18', 4, 4, 4, 4);
INSERT INTO Vanzare VALUES (5, '2024-01-19', 5, 5, 5, 3);
INSERT INTO Vanzare VALUES (6, '2024-01-20', 6, 6, 6, 2);
INSERT INTO Vanzare VALUES (7, '2024-01-21', 7, 7, 7, 1);
INSERT INTO Vanzare VALUES (8, '2024-01-22', 8, 8, 8, 5);

INSERT INTO Comanda VALUES (1, 1, '2024-01-16');


INSERT INTO Comanda VALUES (2, 2, '2024-01-17');
INSERT INTO Comanda VALUES (3, 3, '2024-01-18');
INSERT INTO Comanda VALUES (4, 4, '2024-01-19');
INSERT INTO Comanda VALUES (5, 5, '2024-01-20');
INSERT INTO Comanda VALUES (6, 6, '2024-01-21');
INSERT INTO Comanda VALUES (7, 7, '2024-01-22');
INSERT INTO Comanda VALUES (8, 8, '2024-01-23');

SELECT*FROM Vanzare;

SELECT
V.VanzareID,
V.DataVanzare,
P.NumeProdus,
C.Nume AS NumeClient,
A.Nume AS NumeAngajat,
V.Cantitate
FROM
Vanzare V
JOIN
Produs P ON V.ProdusID = P.ProdusID
JOIN
Client C ON V.ClientID = C.ClientID
JOIN
Angajat A ON V.AngajatID = A.AngajatID;

-- Creare trigger
CREATE TRIGGER ActualizareStoc
ON Vanzare
AFTER INSERT
AS
BEGIN
-- Actualizare stoc după fiecare vânzare
UPDATE P
SET P.Stoc = P.Stoc - I.Cantitate
FROM Produs P
JOIN inserted I ON P.ProdusID = I.ProdusID;
END;

SELECT
name AS ActualizareStoc,
object_definition(object_id) AS DefinitieTrigger
FROM sys.triggers;

-- Creare funcție
CREATE FUNCTION CalculValoareTotalaVanzare
(
@Cantitate INT
)
RETURNS DECIMAL(10, 2)
AS
BEGIN
DECLARE @ValoareTotala DECIMAL(10, 2);

-- Asume un preț unitar implicit sau poți adăuga o logica suplimentară pentru a
obține prețul unitar din altă sursă

-- Setare preț unitar implicit (de exemplu, 100.0)


DECLARE @PretUnitar DECIMAL(10, 2) = 100.0;

-- Calcul valoare totala


SET @ValoareTotala = @Cantitate * @PretUnitar;

-- Returnare valoare totala


RETURN @ValoareTotala;
END;
-- Creare procedură stocată
CREATE PROCEDURE GenerareRaportVanzari
AS
BEGIN
-- Selecție a datelor pentru raport
SELECT
A.Nume AS NumeAngajat,
A.Prenume AS PrenumeAngajat,
V.DataVanzare,
V.Cantitate
FROM
Vanzare V
JOIN
Angajat A ON V.AngajatID = A.AngajatID
WHERE
V.DataVanzare BETWEEN '2024-01-01' AND '2024-12-31';
END;
-- Apelare procedură stocată
EXEC GenerareRaportVanzari;

-- Tabel pentru stocarea informațiilor despre produse


CREATE TABLE DimProdus (
ProdusID INT PRIMARY KEY,
NumeProdus NVARCHAR(100),
Categorie NVARCHAR(50),
Pret DECIMAL(10, 2),
Stoc INT,
Garantie INT
);

-- Tabel pentru stocarea informațiilor despre clienți


CREATE TABLE DimClient (
ClientID INT PRIMARY KEY,
Nume NVARCHAR(50),
Prenume NVARCHAR(50),
Email NVARCHAR(100),
Telefon NVARCHAR(15),
Adresa NVARCHAR(255)
);

-- Tabel pentru stocarea informațiilor despre angajați


CREATE TABLE DimAngajat (
AngajatID INT PRIMARY KEY,
Nume NVARCHAR(50),
Prenume NVARCHAR(50),
Email NVARCHAR(100),
Telefon NVARCHAR(15),
Adresa NVARCHAR(255),
Pozitie NVARCHAR(50)
);

-- Tabel pentru stocarea informațiilor despre depozite


CREATE TABLE DimDepozit (
DepozitID INT PRIMARY KEY,
NumeDepozit NVARCHAR(50),
Locatie NVARCHAR(100)
);

-- Tabel pentru stocarea datelor despre vânzări


CREATE TABLE FactVanzare (
VanzareID INT PRIMARY KEY,
DataVanzare DATE,
ProdusID INT,
ClientID INT,
AngajatID INT,
Cantitate INT,
FOREIGN KEY (ProdusID) REFERENCES DimProdus(ProdusID),
FOREIGN KEY (ClientID) REFERENCES DimClient(ClientID),
FOREIGN KEY (AngajatID) REFERENCES DimAngajat(AngajatID)
);

-- Tabel pentru stocarea informațiilor despre comenzi


CREATE TABLE FactComanda (
ComandaID INT PRIMARY KEY,
VanzareID INT FOREIGN KEY REFERENCES FactVanzare(VanzareID),
DataComanda DATE
);

-- Inserare înregistrări de exemplu în tabele de dimensiuni


INSERT INTO DimProdus VALUES (1, 'Televizor Smart', 'Electrocasnice', 1200.0, 50, 24);
INSERT INTO DimClient VALUES (1, 'Smith', 'John', 'john.smith@example.com', '123-456-
7890', 'Str. Exemplu, Nr. 123');
INSERT INTO DimAngajat VALUES (1, 'Doe', 'Jane', 'jane.doe@example.com', '987-654-3210',
'Str. Test, Nr. 456', 'Vanzator');
INSERT INTO DimDepozit VALUES (1, 'Depozit Central', 'Locatie Centrala');

-- Inserare înregistrări de exemplu în tabela de fapte


INSERT INTO FactVanzare VALUES (1, '2024-01-15', 1, 1, 1, 5);
INSERT INTO FactComanda VALUES (1, 1, '2024-01-16');

select*from FactVanzare;

S-ar putea să vă placă și