Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/12/2010, 16h15   #1
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 770
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 770
Points : 1 833
Points : 1 833
Par défaut Jointures complexes de croisements

Bonjour à tous,
je suis en train d'essayer d'alimenter une table me permettant de définir des liaisons entre 2 autres selon une 3°.

Voici un peu de détails fonctionnels :
J'ai une table de conversions une table d'évènements et une table de scenarii.
Le principe est de lier une conversion à 1 évènement selon des scenarii.

Ma table de conversions
Code :
1
2
3
4
5
6
7
8
9
10
CREATE TABLE [dwh].[FtConversion](
	[IdConversion] [int] IDENTITY(1,1) NOT NULL,
	[IdDateConversion] [int] NULL,
	[IdHeureConversion] [int] NULL,
	[IdCampagne] [int] NULL,
	[IdVisiteur] [int] NULL,
 CONSTRAINT [PK_FTCONVERSION] PRIMARY KEY CLUSTERED 
(
	[IdConversion] ASC
) )
FtEvenement
Code :
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE [dwh].[FtEvenement](
	[IdEvenement] [int] IDENTITY(1,1) NOT NULL,
	[IdDate] [int] NULL,
	[IdHeure] [int] NULL,
	[IdVisiteur] [int] NULL,
	[IdCampagne] [int] NULL,
	[IdClient] [smallint] NULL,
	[IdTypeAction] [int] NULL,
 CONSTRAINT [PK_FTEVENEMENT] PRIMARY KEY CLUSTERED 
(
	[IdEvenement] ASC
))
et la table des scenarii que j'ai défini pour le moment de la manière suivante :
Code :
1
2
3
4
5
6
7
8
CREATE TABLE [dwh].[DimScenario](
	[IdScenario] [smallint] NOT NULL,
	[NumeroAttrbution] [int] NULL,
	[Ordre] [int] NOT NULL,
	[IdTypeAction] [int] NULL,
	[IdCampagne] [int] NULL,
	[Ponderation] [int] NOT NULL
) ON [PRIMARY]
Un exemple simple de scénario
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
INSERT INTO dwh.DimScenario(IdScenario, NumeroAttrbution, Ordre, IdTypeAction, Ponderation, IdCampagne)
SELECT
	1
    , 1
	, 1
	, 2
	, 100
	, NULL
UNION
SELECT
	1
	, 2
    , 1
	, 1
	, 100
	, NULL
UNION
SELECT
	1
	, 3
    , 1
	, NULL
	, 100
	, 2
Un évènement est de TypeAction 1, 2 ou 3.
Ce qui m'intéresse est d'attribuer à une conversion l'évènement selon le type d'action définie dans le scénario.

Pour le moment je croise mes conversions avec tous les évènements qui lui sont liés et j'essaye ensuite de trouver le bon..
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
WITH EvenementConversion (IdEvenement, IdVisiteur, IdDate, IdHeure) AS (
	SELECT 
		IdEvenement, IdVisiteur, IdDate, IdHeure
	FROM dwh.FtEvenement ft
		JOIN dwh.DimTypeAction ta ON ta.IdTypeAction = ft.IdTypeAction
	WHERE 
		ta.IdTypeAction = 3
	)
SELECT DISTINCT
ft.IdConversion
, ft.IdVisiteur
, ft.IdDateConversion
, ft.IdHeureConversion
, ft.IdCampagne
 
, ev.IdEvenement
-- , ev.IdVisiteur
, ev.IdDate
, ev.IdHeure
, ev.IdTypeAction
, DENSE_RANK () OVER 
	(PARTITION BY ev.IdVisiteur, ev.IdTypeAction 
	ORDER BY ev.IdDate DESC, ev.IdHeure DESC)
	AS rang
 
, sce.Ordre
, sce.IdTypeAction
, sce.Ponderation
, sce.NumeroAttrbution
FROM dwh.FtConversion ft
	JOIN EvenementConversion evt
		ON evt.IdVisiteur = ft.IdVisiteur
		AND evt.IdDate <= ft.IdDateConversion
	JOIN dwh.FtEvenement ev
		ON ev.IdVisiteur = ft.IdVisiteur
		AND ev.IdDate <= ft.IdDateConversion
 
	, dwh.DimScenario sce
WHERE
	sce.IdScenario = 1
	AND sce.NumeroAttrbution IN (1)
	ORDER BY ft.IdVisiteur, ft.IdConversion, ev.IdDate DESC, ev.IdHeure DESC
			, sce.NumeroAttrbution ASC
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h07.


 
 
 
 
Partenaires

Hébergement Web