Salta el contingut

Pràctica PR5074/01: Dashboard de Business Intelligence amb Power BI Desktop

Objectius

  • Importar i transformar dades amb Power Query Editor
  • Construir un model de dades Star Schema correcte
  • Crear mesures DAX incloent comparatives temporals (YoY)
  • Dissenyar un dashboard professional amb 6 o més visualitzacions
  • Afegir slicers i interactivitat (drill-through, tooltips)
  • Publicar o exportar el dashboard en format .pbix

Prerequisits

  • Temps estimat: 6-8 hores
  • Power BI Desktop instal·lat (gratuït per a Windows): https://powerbi.microsoft.com/desktop
  • Dataset "Contoso Sales Sample" (gratuït, Microsoft) o el CSV de vendes que es proporciona a continuació
  • Coneixements bàsics de SQL i modelatge de dades

Power BI Desktop és per a Windows

Power BI Desktop funciona nativament a Windows. Usuaris de macOS o Linux: podeu usar una màquina virtual Windows (Virtualbox + Windows 11 eval), o bé usar el servei Power BI al núvol (powerbi.com, requereix compte Microsoft gratuït). Una alternativa open source és Apache Superset (vegeu la sessió 30) o Metabase.

Introducció

Un dashboard de Business Intelligence tradueix dades en decisions. Els dashboards professionals de Power BI alimenten decisions estratègiques a empreses com Telefónica, Inditex, BBVA o Mercadona. En aquesta pràctica crearàs un dashboard complet sobre dades de vendes fictícies d'una empresa catalana de distribució de productes electrònics.

L'objectiu és no solament saber fer visualitzacions, sinó entendre el cicle complet de BI: des de la font de dades fins al dashboard que veurà el director general. Això inclou la qualitat de les dades (Power Query), el model relacional (Star Schema), la capa semàntica (DAX) i la capa de presentació (visualitzacions).

flowchart LR
    A[CSV / Excel\nFonts de dades] --> B[Power Query\nTransformació]
    B --> C[Model de dades\nStar Schema]
    C --> D[Mesures DAX\nIndicadors]
    D --> E[Visualitzacions\nGràfics]
    E --> F[Dashboard\nInteractiu]
    F --> G[Publicació\n.pbix]

Part 1: Obtenció i preparació de les dades

1.1 Crear el fitxer CSV de vendes

Crea un full de càlcul o descàrrega el CSV de vendes proporcionat. Dades mínimes necessàries:

Taula vendes.csv (mínim 500 registres, abast 2022-2024):

ID_Venda,Data,ID_Producte,ID_Client,ID_Venedor,Quantitat,Preu_Unitari,Descompte
V001,2024-01-15,P012,C045,V003,2,299.99,0.05
V002,2024-01-15,P007,C012,V001,1,149.99,0.00
V003,2024-01-16,P023,C078,V002,3,89.99,0.10
...

Taula productes.csv:

ID_Producte,Nom_Producte,Categoria,Subcategoria,Cost_Unitari,Preu_Venda
P001,Portàtil Lenovo IdeaPad,Informatica,Portàtils,450.00,699.99
P002,Monitor Samsung 27",Informatica,Monitors,180.00,299.99
P003,Teclat mecànic Logitech,Periferics,Teclats,45.00,89.99
...

Taula clients.csv:

ID_Client,Nom_Client,Segment,Provincia,Pais,Email
C001,Tech Solutions SL,Empresa,Barcelona,Espanya,info@techsolutions.cat
C002,Maria Puig,Particular,Girona,Espanya,mpuig@email.com
...

Taula venedors.csv:

ID_Venedor,Nom_Venedor,Zona,Email
V001,Pau Ferrer,Nord,pferrer@empresa.cat
V002,Laia Mas,Sud,lmas@empresa.cat
V003,Jordi Roca,Centre,jroca@empresa.cat

Dataset Contoso (alternativa)

Si prefereixes dades més riques, descarrega el Contoso Sales Sample des de https://github.com/microsoft/powerbi-desktop-samples. Conté dades multinacionals de vendes de productes electrònics amb historial de diversos anys.

1.2 Importació a Power BI

  1. Obre Power BI Desktop
  2. Inici > Obtenir dades > Text/CSV
  3. Selecciona vendes.csvTransformar dades (no carregar directament)
  4. Repeteix per a productes.csv, clients.csv i venedors.csv

Part 2: Power Query — Transformació de dades

2.1 Neteja de la taula Vendes

Al Power Query Editor, aplica les transformacions següents sobre la taula vendes:

Canvis de tipus de dades: - ID_Venda → Text - Data → Data - Quantitat → Número enter - Preu_Unitari, Descompte → Número decimal

Columna calculada: Import Net

  1. Afegir columna > Columna personalitzada
  2. Nom: Import_Net
  3. Fórmula: = [Quantitat] * [Preu_Unitari] * (1 - [Descompte])

Columna calculada: Marge Brut

Per calcular el marge necessitem unir el cost des de productes. Primer aplica el Merge (Part 2.3) i després:

  • Nom: Marge_Brut
  • Fórmula: = [Import_Net] - ([Quantitat] * [Cost_Unitari])

2.2 Taula de dates (Date Table)

Power BI necessita una taula de dates explícita per a les intel·ligències temporals de DAX:

  1. Inici > Transforma dades > Taula de dates
  2. Alternativament, crea una taula des de M (Power Query):
// Crea una taula de dates de l'1/1/2022 fins al 31/12/2024
let
    DataInici = #date(2022, 1, 1),
    DataFi = #date(2024, 12, 31),
    NombreDies = Duration.Days(DataFi - DataInici) + 1,
    Dates = List.Dates(DataInici, NombreDies, #duration(1, 0, 0, 0)),
    TaulaBase = Table.FromList(Dates, Splitter.SplitByNothing(), {"Data"}),
    TaulaFinal = Table.AddColumn(
        Table.AddColumn(
            Table.AddColumn(
                Table.AddColumn(TaulaBase,
                    "Any", each Date.Year([Data])),
                "Mes", each Date.Month([Data])),
            "NomMes", each Date.ToText([Data], "MMMM", "ca-ES")),
        "Trimestre", each "T" & Text.From(Date.QuarterOfYear([Data])))
in
    TaulaFinal

2.3 Merge de taules

Combina Vendes amb Productes:

  1. A la taula vendes: Inici > Combinar consultes > Combinar
  2. Selecciona productes com a taula secundària
  3. Clau: ID_ProducteID_Producte
  4. Expandeix les columnes: Nom_Producte, Categoria, Cost_Unitari

Combina Vendes amb Clients i Venedors de la mateixa manera.

Tipus de join a Power Query

Usa Left Outer Join (conserva totes les files de vendes, afegeix la informació de producte/client). Si uses Inner Join i hi ha IDs sense correspondència, perdràs vendes del resultat final.


Part 3: Model de dades — Star Schema

3.1 Disseny del model

El model Star Schema correcte per a aquesta pràctica és:

erDiagram
    VENDES ||--o{ PRODUCTES : "ID_Producte"
    VENDES ||--o{ CLIENTS : "ID_Client"
    VENDES ||--o{ VENEDORS : "ID_Venedor"
    VENDES ||--o{ DATES : "Data"

    VENDES {
        string ID_Venda
        date Data
        string ID_Producte
        string ID_Client
        string ID_Venedor
        int Quantitat
        decimal Preu_Unitari
        decimal Descompte
        decimal Import_Net
        decimal Marge_Brut
    }
    PRODUCTES {
        string ID_Producte
        string Nom_Producte
        string Categoria
        string Subcategoria
        decimal Cost_Unitari
        decimal Preu_Venda
    }
    CLIENTS {
        string ID_Client
        string Nom_Client
        string Segment
        string Provincia
        string Pais
    }
    VENEDORS {
        string ID_Venedor
        string Nom_Venedor
        string Zona
    }
    DATES {
        date Data
        int Any
        int Mes
        string NomMes
        string Trimestre
    }

3.2 Configuració de relacions a Power BI

A la vista de Model:

  1. Drag & drop VENDES[Data]DATES[Data] (relació 1:N, activa)
  2. Drag & drop VENDES[ID_Producte]PRODUCTES[ID_Producte] (1:N, activa)
  3. Drag & drop VENDES[ID_Client]CLIENTS[ID_Client] (1:N, activa)
  4. Drag & drop VENDES[ID_Venedor]VENEDORS[ID_Venedor] (1:N, activa)

No creïs relacions directes entre dimensions

El Star Schema no té relacions entre PRODUCTES i CLIENTS directament — totes les relacions passen per la taula de fets (VENDES). Si crees relacions directes entre dimensions, obtindràs un model incorrecte que pot donar mesures errònies.


Part 4: Mesures DAX

4.1 Mesures bàsiques d'ingressos

Ves a la taula VENDES a la vista de Dades i crea les mesures seguents (Inici > Nova mesura):

// Ingressos totals (Import Net)
Ingressos = SUM(VENDES[Import_Net])
// Unitats venudes
Unitats = SUM(VENDES[Quantitat])
// Marge brut total
Marge_Brut = SUM(VENDES[Marge_Brut])
// Percentatge de marge
Marge_Pct = DIVIDE([Marge_Brut], [Ingressos], 0)
// Nombre de clients únics
Clients_Actius = DISTINCTCOUNT(VENDES[ID_Client])
// Ticket mitjà per venda
Ticket_Mitja = DIVIDE([Ingressos], COUNTROWS(VENDES), 0)

4.2 Mesures temporals (Time Intelligence)

// Ingressos del mateix perióde de l'any anterior
Ingressos_AA = CALCULATE(
    [Ingressos],
    SAMEPERIODLASTYEAR('DATES'[Data])
)
// Creixement interanual (Year-over-Year)
Creixement_YoY =
VAR IngressosActuals = [Ingressos]
VAR IngressosAA = [Ingressos_AA]
RETURN
    DIVIDE(IngressosActuals - IngressosAA, IngressosAA, BLANK())
// Ingressos acumulats des d'inici d'any (Year-to-Date)
Ingressos_YTD = TOTALYTD([Ingressos], 'DATES'[Data])
// Ingressos acumulats mes anterior
Ingressos_Mes_Anterior = CALCULATE(
    [Ingressos],
    DATEADD('DATES'[Data], -1, MONTH)
)
// Variació respecte mes anterior
Var_Mes_Anterior =
DIVIDE([Ingressos] - [Ingressos_Mes_Anterior], [Ingressos_Mes_Anterior], BLANK())

4.3 Mesures de ranking

// Rang del producte per ingressos (dins del context de filtre actual)
Rang_Producte =
RANKX(
    ALLSELECTED(PRODUCTES[Nom_Producte]),
    [Ingressos],
    ,
    DESC,
    DENSE
)
// Ingressos del Top 10 de productes
Ingressos_Top10 =
CALCULATE(
    [Ingressos],
    TOPN(10, ALL(PRODUCTES[Nom_Producte]), [Ingressos])
)
// Percentatge sobre el total
Pct_Total =
DIVIDE([Ingressos], CALCULATE([Ingressos], ALL(VENDES)), 0)

Formateja les mesures DAX

Selecciona cada mesura i aplica el format adequat al panell de propietats: - Ingressos, Marge: Moneda (€), 2 decimals - Creixement_YoY, Marge_Pct, Pct_Total: Percentatge, 1 decimal - Unitats: Número enter, separador de milers


Part 5: Visualitzacions — Disseny del dashboard

5.1 Estructura de pàgines del dashboard

Organitza el dashboard en 3 pàgines:

  • Pàgina 1: Resum executiu — KPIs, evolució temporal, top productes
  • Pàgina 2: Anàlisi de vendes — Per categoria, per zona, per venedor
  • Pàgina 3: Detall de client (drill-through)

Portada obligatòria:

Afegeix un quadre de text a la part superior de la pàgina 1 amb:

DASHBOARD DE VENDES | Empresa Electrònica Catalana
Alumne: Joan Garcia | Data: Gener 2025 | Mòdul 5074 IABD

5.2 Pàgina 1: Resum executiu

Visualització 1 — KPI Cards (4 targetes)

Insereix 4 targetes (visual "Targeta" o "KPI"): - Ingressos totals [Ingressos] vs. [Ingressos_AA] - Unitats venudes [Unitats] - Marge brut [Marge_Pct] - Clients actius [Clients_Actius]

Visualització 2 — Gràfic de línies: evolució mensual

  • Eix X: DATES[NomMes] (ordenat per mes numèric)
  • Valors: [Ingressos], [Ingressos_AA]
  • Títol: "Evolució d'Ingressos Mensual vs Any Anterior"

Visualització 3 — Gràfic de barres: ingressos per categoria

  • Eix Y: PRODUCTES[Categoria]
  • Valors: [Ingressos], [Marge_Brut]
  • Orientació: horitzontal
  • Títol: "Ingressos i Marge per Categoria de Producte"

Visualització 4 — Taula: Top 10 productes

  • Files: PRODUCTES[Nom_Producte]
  • Columnes: [Ingressos], [Unitats], [Marge_Pct], [Rang_Producte]
  • Format condicional a [Marge_Pct]: escala de color verd-groc-vermell
  • Títol: "Top 10 Productes per Ingressos"

5.3 Pàgina 2: Anàlisi de vendes

Visualització 5 — Treemap: vendes per zona i província

  • Grup: VENEDORS[Zona]
  • Subgrup: CLIENTS[Provincia]
  • Valors: [Ingressos]
  • Títol: "Distribució Geogràfica d'Ingressos"

Visualització 6 — Gràfic de dispersió: rendiment de venedors

  • Eix X: [Unitats]
  • Eix Y: [Ingressos]
  • Mida de la bombolla: [Marge_Brut]
  • Llegenda: VENEDORS[Nom_Venedor]
  • Títol: "Rendiment de Venedors (Unitats vs Ingressos)"

Visualització 7 — Gràfic de barres apilades: vendes per trimestre i segment

  • Eix X: DATES[Trimestre]
  • Valors apilats: [Ingressos] per CLIENTS[Segment]
  • Títol: "Ingressos Trimestrals per Segment de Client"

5.4 Pàgina 3: Detall de client (Drill-through)

Configura la pàgina 3 com a pàgina de drill-through:

  1. A "Filtres de drill-through", afegeix el camp CLIENTS[Nom_Client]
  2. Afegeix les visualitzacions:
  3. Targeta amb el nom del client, ingressos totals i tickets
  4. Taula de totes les compres del client (data, producte, import)
  5. Gràfic de línies amb l'evolució temporal de compres del client

Per usar el drill-through: a qualsevol gràfic de la pàgina 1 o 2, fes clic dret sobre un client → "Mostra detalls".


Part 6: Filtres i interactivitat

6.1 Afegir slicers (filtres interactius)

A la pàgina 1, afegeix els slicers següents a la part esquerra o superior:

Slicer Camp Tipus
Filtre d'any DATES[Any] Llista (vertical)
Filtre de trimestre DATES[Trimestre] Botons
Filtre de categoria PRODUCTES[Categoria] Menú desplegable
Filtre de zona VENEDORS[Zona] Llista

Configuració dels slicers: 1. Selecciona cada slicer → Format > Títol → activa i posa el nom adequat 2. Activa Selecció múltiple per als slicers de categoria i zona

6.2 Sincronització de slicers entre pàgines

  1. Vista > Sincronitza slicers
  2. Activa la sincronització del slicer d'any per a totes les pàgines
  3. Activa la sincronització del slicer de categoria per a pàgines 1 i 2

6.3 Tooltips personalitzats

Crea una pàgina de tooltip personalitzat per al gràfic de categories:

  1. Crea una nova pàgina → propietats → activa "Pàgina de tooltip"
  2. Redueix la mida de la pàgina a "Tooltip" (360×240 px)
  3. Afegeix: nom de la categoria, ingressos, marge %, evolució mensual mini
  4. Al gràfic principal → Format → Tooltip → selecciona la nova pàgina

Part 7: Disseny visual i presentació

7.1 Tema corporatiu

  1. Vista > Temes > Personalitzar tema actual
  2. Colors primaris: #1F3A60 (blau fosc) i #E8A020 (taronja)
  3. Colors de fons: #F5F7FA (gris clar)
  4. Font: Segoe UI (estàndard Power BI)

7.2 Bones pràctiques de disseny

  • Jerarquia visual: la informació més important (KPIs) a la part superior esquerra
  • Alineació: usa "Alinear i distribuir" (Format > Alinear) per alinear tots els visuals
  • Espai en blanc: deixa marges adequats, no saturis el dashboard
  • Consistència de colors: un color per a cada mesura (Ingressos sempre en blau, Marge sempre en verd)
  • Títols descriptius: "Ingressos Mensuals 2024 vs 2023" és millor que "Ingressos"

7.3 Afegir logo i branding

  1. Insereix > Imatge → afegeix el logotip de l'empresa o del curs
  2. Insereix > Formes → afegeix una barra de capçalera de color corporatiu
  3. El nom de l'alumne ha de ser visible a la portada del dashboard

Preguntes de reflexió

Preguntes de reflexió - PR5074/01

Respon per escrit en un document apart (Word o PDF) o com a pàgina d'anotacions al .pbix:

Modelatge i DAX:

  1. Per qué el Star Schema és millor que un model desnormalitzat (una única taula plana) per a Power BI? Quins avantatges ofereix per al rendiment de les consultes DAX?

  2. Explica la diferència entre CALCULATE i FILTER a DAX. Quan s'usa cadascun?

  3. La mesura Creixement_YoY retorna BLANK() quan no hi ha dades de l'any anterior. Per qué és millor retornar BLANK() que retornar 0?

  4. Quina diferència hi ha entre una mesura DAX i una columna calculada? Quan convé usar cada una?

Disseny i storytelling:

  1. Descriu les 3 decisions de disseny més importants que has pres per al teu dashboard. Per qué has triat aquells colors, aquelles visualitzacions i aquella estructura?

  2. Imagina que has de presentar aquest dashboard al director general de l'empresa en 5 minuts. Quins 3 missatges clau li transmetries?

  3. Quines limitacions té Power BI per a l'anàlisi de Big Data (datasets de milers de milions de files)? Quines alternatives existirien?


Lliurament

Puja els fitxers següents al Campus Virtual:

Fitxer Descripció
dashboard_joan_garcia.pbix Fitxer Power BI complet i funcional
capturesPantalla_joan_garcia.pdf PDF amb captures de les 3 pàgines del dashboard
reflexions_joan_garcia.pdf Document amb les 7 preguntes de reflexió respostes

Requisits mínims per ser avaluat

  • El fitxer .pbix ha d'obrir-se correctament a Power BI Desktop.
  • El nom de l'alumne ha d'apareixer a la portada del dashboard.
  • S'han d'haver creat almenys 6 visualitzacions a les pàgines 1 i 2.
  • Les mesures DAX Ingressos, Ingressos_AA, Creixement_YoY i Marge_Pct han d'existir i funcionar correctament.
  • Ha d'existir almenys un drill-through configurat.
  • Les 7 preguntes de reflexió han d'estar contestades.

Consulta la rúbrica PR5074/01 per als criteris detallats d'avaluació.


Pràctica PR5074/01 | Mòdul 5074 Sistemes de Big Data | Institut Sa Palomera (Blanes) | Curs IABD 2026-2027