📊 Data

dimensional-modeling

Modélisation dimensionnelle pour le data warehousing — schéma en étoile, flocon, tables de faits et dimensions, slowly changing dimensions.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- dimensional-modeling --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } dimensional-modeling -Launch"

🚀 Déjà installé ?

claude "/dimensional-modeling"

Ou tapez /dimensional-modeling dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

schéma en étoilestar schematable de faitsdimensiondata warehouseSCDslowly changing dimensionmodélisation dimensionnelle

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/data-skills/dimensional-modeling ~/.claude/skills/

Source : data-skills/dimensional-modeling

📖 Manuel

Modélisation Dimensionnelle

Workflow

  1. Identifier le processus métier : ventes, commandes, trafic web.
  2. Définir le grain : le niveau de détail le plus fin (1 ligne = ?).
  3. Concevoir les dimensions : qui, quoi, où, quand, comment.
  4. Concevoir les faits : mesures quantitatives liées aux dimensions.

Schéma en étoile

              ┌──────────────┐
              │  dim_product  │
              └──────┬───────┘
                     │
┌──────────────┐     │     ┌──────────────┐
│  dim_customer ├────┼─────┤  dim_store    │
└──────────────┘     │     └──────────────┘
                     │
              ┌──────┴───────┐
              │  fact_sales   │
              └──────┬───────┘
                     │
              ┌──────┴───────┐
              │  dim_date     │
              └──────────────┘

Table de faits

CREATE TABLE fact_sales (
    sale_key BIGINT IDENTITY PRIMARY KEY,
    date_key INT NOT NULL REFERENCES dim_date(date_key),
    product_key INT NOT NULL REFERENCES dim_product(product_key),
    customer_key INT NOT NULL REFERENCES dim_customer(customer_key),
    store_key INT NOT NULL REFERENCES dim_store(store_key),

    -- Mesures
    quantity INT NOT NULL,
    unit_price DECIMAL(10,2) NOT NULL,
    discount_amount DECIMAL(10,2) NOT NULL DEFAULT 0,
    net_amount DECIMAL(10,2) NOT NULL,
    tax_amount DECIMAL(10,2) NOT NULL,
    total_amount DECIMAL(10,2) NOT NULL,

    -- Clés dégénérées
    invoice_number VARCHAR(50),
    line_number INT
);

Dimension Date

CREATE TABLE dim_date (
    date_key INT PRIMARY KEY,        -- Format YYYYMMDD
    full_date DATE NOT NULL,
    day_of_week INT NOT NULL,
    day_name VARCHAR(10) NOT NULL,
    day_of_month INT NOT NULL,
    week_of_year INT NOT NULL,
    month_number INT NOT NULL,
    month_name VARCHAR(10) NOT NULL,
    quarter INT NOT NULL,
    year INT NOT NULL,
    is_weekend BIT NOT NULL,
    is_holiday BIT NOT NULL,
    fiscal_year INT,
    fiscal_quarter INT
);

Slowly Changing Dimensions (SCD)

TypePrincipeUsage
Type 1Écraser l'ancienne valeurCorrections, données non historisées
Type 2Nouvelle ligne + dates de validitéHistorique complet
Type 3Colonne ancienne + nouvelle valeurHistorique limité (1 changement)

SCD Type 2

CREATE TABLE dim_customer (
    customer_key INT IDENTITY PRIMARY KEY,  -- Surrogate key
    customer_id VARCHAR(50) NOT NULL,       -- Business key
    name VARCHAR(200) NOT NULL,
    email VARCHAR(200),
    city VARCHAR(100),
    segment VARCHAR(50),

    -- Colonnes SCD Type 2
    effective_date DATE NOT NULL,
    expiration_date DATE NOT NULL DEFAULT '9999-12-31',
    is_current BIT NOT NULL DEFAULT 1
);

-- Mise à jour SCD Type 2
-- 1. Expirer l'enregistrement actuel
UPDATE dim_customer
SET expiration_date = GETDATE(), is_current = 0
WHERE customer_id = 'CUST-123' AND is_current = 1;

-- 2. Insérer la nouvelle version
INSERT INTO dim_customer (customer_id, name, email, city, segment, effective_date)
VALUES ('CUST-123', 'Jean Dupont', 'jean@new.com', 'Lyon', 'Premium', GETDATE());

Types de tables de faits

TypeGrainExemple
Transactionnelle1 ligne par événementVentes, clics
Snapshot périodique1 ligne par périodeSolde mensuel, stock quotidien
Snapshot cumulatif1 ligne par cycle de viePipeline de commande (créée → livrée)
Sans faitsIntersections sans mesurePrésence à un événement

Règles