MicroStrategy ONE
Conserver tous les éléments de la table de référence
Le paramètre Conserver tous les éléments de la table de référence sert à afficher tous les éléments d'attribut qui existent dans la table de référence, même s'il n'y a pas de fait correspondant dans l'ensemble de résultats. Prenons le cas, par exemple où votre rapport contient Store et Sum(Sales), alors qu'il est possible qu'un magasin ne présente pas de ventes. Toutefois, vous voulez afficher tous les noms de magasin dans le rapport final, même ceux qui n'ont pas de ventes. Pour cela, vous ne devez pas vous appuyer sur les magasins figurant dans la table de faits Ventes. En revanche, vous devez vérifier que tous les magasins de la table de référence sont inclus dans le rapport final. Le moteur SQL doit créer une jointure externe à gauche de la table de référence vers la table de faits.
Il est possible qu'il y ait plusieurs attributs sur le modèle. Pour que tous les éléments d'attribut soient conservés, le moteur analytique doit créer une jointure cartésienne entre les tables de référence des attributs concernés avant de créer une jointure externe à gauche sur la table de faits.
Preserve Common Elements of Lookup and Final Pass Result Table (Conserver les éléments communs de la table de référence et de la table des résultats du dernier passage) (par défaut).
Le moteur analytique effectue une jointure normale (égale) vers la table de référence.
Preserve Lookup Table Elements Joined to Final Pass Result Table Based on Fact Table Keys (Conserver les éléments de la table de référence joints à la table de résultats dans la passe finale en fonction des clés de tables de faits).
Parfois, le niveau de la table de faits n'est pas identique au niveau du rapport ou du modèle. Prenons l'exemple d'un rapport contenant les mesures Magasin, Mois, Sum(Sales), mais dont la table de faits se trouve au niveau de Magasin, Jour et Élément. Il existe deux façons de conserver tous les éléments de magasin et de mois :
- Créer une jointure externe à gauche pour conserver tous les éléments d'attribut au niveau de Magasin, Jour et Élément, puis effectuer une agrégation au niveau de Magasin et Mois.
- Effectuez d'abord l'agrégation, puis effectuer une jointure externe à gauche pour réunir tous les éléments d'attribut.
Cette option est pour la première approche. Dans l'exemple donné précédemment, elle effectue deux passes SQL :
Passe 1: LOOKUP_STORE jointure croisée LOOKUP_ JOUR jointure croisée LOOKUP_ITEM èTT1
Passe 2: TT1 gauche jointure externe Fact_Table sur (magasin, jour, élément)
L'avantage de cette approche tient au fait que vous pouvez effectuer une jointure externe à gauche et l'agrégation pendant la même passe (passe 2). L'inconvénient vient de ce que la jointure cartésienne avec les tables de référence s'effectue à un niveau très inférieur (passe 1), si bien que le résultat de la table de jointure cartésienne (TT1) peut être très volumineux.
Jointure externe sur les tables de références des attributs de modèles dans la requête finale
Cette option correspond à la seconde approche décrite ci-dessus. En conservant le même exemple, trois passes SQL sont effectuées :
- Passe 1: regrouper les tables Fact_Table et TT1 au niveau du magasin et du mois. Dans un rapport normal dans lequel ce paramètre n’est pas activé, il s’agit de la dernière passe.
- Passe 2: LOOKUP_STORE jointure croisée LOOKUP_MONTH> TT2
- Passe 3: TT2 gauche jointure externe TT1 le (magasin, mois)
Cette approche nécessite une passe de plus que l'option précédente, mais la table de jointure croisée (TT2) est généralement plus petite.
Preserve Lookup Table Elements Joined to Final Pass Result Table Based on Template Attributes with Filter (Conserver les éléments de la table de référence joints à la table de résultats de la passe finale des attributs de modèle avec filtre).
Cette option est similaire à l'option 3. La seule différence vient de ce que le rapport de filtre est appliqué lors de la passe finale (Passe 3). Par exemple, un rapport contient Magasin, Mois et Somme(Ventes) avec un filtre Année = 2002. Vous pouvez afficher tous les magasins dans chaque mois de 2002, quel que soit l’emplacement des ventes. Néanmoins, vous ne voulez pas afficher les mois d'autres années (uniquement les 12 mois de l'année 2002). L'option 4 résout ce problème.
Exemple
Le Conserver les éléments communs de la table de référence et de la table des résultats du dernier passage L'option génère simplement une jointure directe entre la table de faits et la table de référence. Les résultats et la syntaxe SQL sont les suivants.
Magasin | Ventes (en dollars) |
Est |
5000 |
Centre |
8000 |
Sud |
12000 |
select a11.Store_id Store_id,
max(a12.Store) Store,
sum(a11.DollarSls) WJXBFS1
from Fact a11
join Store a12
sur (a11.Store_id = a12.Store_id)
group by a11.Store_id
L'option "Preserve lookup table elements joined to final pass result table based on fact keys" (Jointure externe sur les tables de référence des clés de tables de faits dans la passe finale) créer une table temporaire qui constitue une jointure cartésienne de toutes les colonnes de clés de la table de référence. Ensuite, la table de faits fait l'objet d'une jointure externe à la table temporaire. Cela a pour effet de conserver tous les éléments de la table de référence. Les résultats et la syntaxe SQL sont comme ci-dessous.
Magasin | Ventes (en dollars) |
Est |
5000 |
Centre |
8000 |
Sud |
12000 |
Nord |
|
select distinct a11.Year Year
vers #ZZOL00
from Fact a11
select pa1.Year Year,
a11.Store_id Store_id
vers #ZZOL01
from #ZZOL00 pa1
cross join Store a11
sélectionnez pa2.Store_id Store_id,
max(a12.Store) Store,
sum(a11.DollarSls) WJXBFS1
à partir de #ZZOL01 pa2
left outer join Fact a11
on (pa2.Store_id = a11.Store_id and
pa2.Year = a11.Year)
join Store a12
on (pa2.Store_id = a12.Store_id)
groupe par pa2.Store_id
table de suppression #ZZOL00
table de suppression #ZZOL01
L'option "reserve lookup table elements joined to final pass result table based on template attributes without filter"(Conserver les éléments de la table de référence joints à la table de résultats de la requête finale en fonction du filtre sans attributs de modèle) conserve les éléments de la table de référence en effectuant une jointure à gauche avec la passe finale de SQL et n'effectue de jointure que sur les attributs qui figurent sur le modèle. Pour cet exemple et le suivant, le filtre "Store not equal to Central" (Magasin non égal à central) est ajouté. Les résultats et la syntaxe SQL sont les suivants :
Magasin | Ventes (en dollars) |
Est |
5000 |
Centre |
|
Sud |
12000 |
Nord |
|
select a11.Store_id Store_id,
sum(a11.DollarSls) WJXBFS1
vers #ZZT5X00003UOL000
from Fact a11
where a11.Store_id not in (2)
group by a11.Store_id
select a11.Store_id Store_id,
a11.Store Store,
pa1.WJXBFS1 WJXBFS1
from Store a11
jointure externe gauche #ZZT5X00003UOL000 pa1
sur (a11.Store_id = pa1.Store_id)
table de dépôt #ZZT5X00003UOL000
L'option "Preserve lookup table elements joined to final pass result table based on template attributes with filter" (Conserver les éléments de la table de référence joints à la table de résultats de la passe finale des attributs de modèle avec filtre) est l'option la plus récente et est identique à ce qui précède, mais le filtre est dans la passe finale. Les résultats et la syntaxe SQL sont les suivants :
Magasin | Ventes (en dollars) |
Est |
5000 |
Sud |
12000 |
Nord |
|
select a11.Store_id Store_id,
sum(a11.DollarSls) WJXBFS1
vers #ZZT5X00003XOL000
from Fact a11
where a11.Store_id not in (2)
group by a11.Store_id
select a11.Store_id Store_id,
a11.Store Store,
pa1.WJXBFS1 WJXBFS1
from Store a11
left outer join #ZZT5X00003XOL000 pa1
sur (a11.Store_id = pa1.Store_id)
where a11.Store_id not in (2)
drop table #ZZT5X00003XOL000