563 visiteur(s) en ligne
Date actuelle : 23-12-2024, 20:09 PM Bienvenue, Visiteur ! ( Identification S'enregistrer )







 
[Résolu] [SQL Server 2k5 SSAS] Calcul Nommé
 
Note de cette discussion :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Auteur Message
dardadax Hors ligne
Informaticien qualifié
****

Messages : 585
Inscription : Sep 2007
Réputation : 1
Message : #1
[Résolu][SQL Server 2k5 SSAS] Calcul Nommé
Bonjour tout le monde !


Je ne sais pas si vous allez pouvoir m'aider, mais comme c'est toujours ici qu'on m'a le mieux répondu (et toujours en bon), autant essayer.

Pour information, je travaille sous SQL Server 2005 version Standard. Le but du calcul nommé, c'est d'avoir une colonne supplémentaire dans une table de fait nommée par exemple FAIT_Question, afin que celle-ci possède un élément agrégé plus rapidement calculé que lorsque l'on fait un membre calculé en MDX (du SQL multi dimensionnel) lorsque l'on parcourt le cube, sous excel par exemple.

La question est simple : faire des tests...

Premier test : ma valeur attendue est-elle vide ? (le NULL)
-> oui : NULL
-> non : Second test

Second Test : ma valeur attendue est-elle égale à 0 ?
-> oui : NULL
-> non : Dernier test

Dernier Test : ma valeur réelle est-elle vide ?
-> oui : NULL
-> non : réel / attendu





SELECT FAIT_Question,

IIF(
ISNULL([VALEUR_ATTENDUE]
,[DT-R8]),
NULL,

(IIF([VALEUR_ATTENDUE] == '0',
NULL ,

(IIF(
ISNULL(
[REEL],
[DT-R8]),
NULL,
[REEL]/[VALEUR_ATTENDUE])
)
))

)

AS C_TEST

FROM FAIT_Question AS FAIT_Question



Syntaxe générique :

SELECT <Table Name in Data Source>.* , <Expression> AS <Column Name> FROM <Table Name in Data Source> AS <Table Name in Data Source View>



Le IIF est la condition "IF then else" de forme IIF(condition,vrai,faux) que l'on retrouve aussi ailleurs en " condition ? vrai : faux" (sous SSIS par exemple)

L'erreur affichée par SQL Server est la suivante : "Syntaxe incorrecte vers '='."
Evidemment, j'ai testé au cas où du ='0', =0, ==0...mais non, rien n'y fait.

J'ai tenté de changer les IIF par des case sans succès

case when
ISNULL([VALEUR_ATTENDUE]
,[DT-R8]) then
NULL else

(case when [VALEUR_ATTENDUE] == '0' then
NULL else

(case when
ISNULL(
[REEL],
[DT-R8]) then
NULL else
[REEL]/[VALEUR_ATTENDUE]))




Au niveau comportemental, ce ne sera pas ce que je cherche puisqu'après le résultat que je veux est impossible à avoir par agrégat. (il faudrait un produit, or ce n'est pas faisable dans cette version)
Mais comme je n'aime pas rester sur un blocage...Et que ça pourra toujours servir un jour ou l'autre !


Si l'un de vous voit l'erreur, merci de la signaler Wink
Je continue de chercher de mon côté. Je tomberai bien sur un projet où ça servira Smile

Merci de m'avoir lu.


Dardadax

18-06-2008 15:08 PM
Envoyer un email à cet utilisateur Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Troll Hors ligne
Trolls' master
******

Messages : 15 818
Inscription : Mar 2006
Réputation : 21
Message : #2
 
Bonsoir,

Essaies ceci :



SELECT FAIT_Question,

IIF(ISNULL([VALEUR_ATTENDUE],[DT-R8]),
NULL,
IIF(([VALEUR_ATTENDUE] == 0),
NULL ,
IIF( ISNULL([REEL], [DT-R8]),
NULL,
[REEL]/[VALEUR_ATTENDUE]
)
)
)

AS C_TEST

FROM FAIT_Question AS FAIT_Questio


Un poste sans accent ? La faute au clavier qwerty :/
|| Merci de mettre des titres explicites !!! || La bouille à Troll ? || 
Vous voulez remercier l'équipe du forum ? Participez ! Exprimez-vous ! Revenez et parlez de ce que vous voulez ! Wink Image: actualites-informatiques-pcw.1.gif
18-06-2008 15:36 PM
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
dardadax Hors ligne
Informaticien qualifié
****

Messages : 585
Inscription : Sep 2007
Réputation : 1
Message : #3
 
Bonjour Troll !

Merci de ta réponse, je l'ai testé mais j'ai toujours le même message, à savoir :

Citation :TITRE : Microsoft Visual Studio
------------------------------

Impossible de terminer la préparation différée.
Impossible de préparer les instructions.
Syntaxe incorrecte vers '='.
Syntaxe incorrecte vers le mot clé 'SELECT'.

------------------------------
BOUTONS :

OK
------------------------------


Comme je l'avais dit dans le précédent message, j'avais tenté plusieurs options au niveau du "=", à savoir ='0', =0, ==0 (tous les mix possibles entre le simple et double "égal"


Je viens de trouver pour le problème du "=" Smile c'était bien une erreur "bête"...( j'ai remplacé par IN (mesValeurs))
Il y a encore quelques modifications(le ISNULL vient du SSIS...remplacé par IS NULL...) trouvées sur le net également.



SELECT

CASE WHEN [VALEUR_ATTENDUE] IS NULL
THEN NULL
ELSE CASE WHEN [VALEUR_ATTENDUE] IN (0)
THEN NULL
ELSE CASE WHEN [REEL] IS NULL
THEN NULL
ELSE [REEL]/[VALEUR_ATTENDUE]
END
END
END
AS C_TEST

FROM FAIT_Question



Résultat : une question dont je dois trouver la réponse...

A quoi sert (ou comment fonctionne) la fonction ISNULL ?... (puisque présent malgré tout mais nécessitant 2 arguments dans le T-SQL de chez Microsoft...)
Mais ça je pense le trouver tout seul.


Rappel :
mon expression mise plus haut s'insère dans la portion de code suivante :

Citation :SELECT FAIT_Question.* , <Expression> AS <Column Name> FROM FAIT_Question AS FAIT_Question


Petit détail qui a son importance : ça marche sur l'exécuteur de requête de SQL Server mais pas chez SSAS.

Je pense que le problème vient de la distinction <Table Name in Data Source> et <Table Name in Data Source View>...Je regarde de suite et éditerai une fois que ça marche.


Edit : aussi bizarre que cela puisse paraître, ça marche en requête nommée mais pas en calcul nommé...bizarre -_-'

En fait c'est un truc simple : via l'éditeur il faut juste mettre la définition du calcul... Donc ne pas suivre la démarche de Microsoft (peu complète) ne donnant que la formule de codage complète (non pas à saisir lol)


CASE	WHEN &amp;#91;VALEUR_ATTENDUE&amp;#93; IS NULL 
THEN NULL
ELSE CASE WHEN &amp;#91;VALEUR_ATTENDUE&amp;#93; IN &amp;#40;0&amp;#41;
THEN NULL
ELSE CASE WHEN &amp;#91;REEL&amp;#93; IS NULL
THEN NULL
ELSE &amp;#91;REEL&amp;#93;/&amp;#91;VALEUR_ATTENDUE&amp;#93;
END
END
END
AS C_TEST



Et hop un résolu !! ^^

19-06-2008 07:29 AM
Envoyer un email à cet utilisateur Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Troll Hors ligne
Trolls' master
******

Messages : 15 818
Inscription : Mar 2006
Réputation : 21
Message : #4
 
Ah bah on était à côté de la plaquet et de la syntaxe Smile


Par contre est-ce normal que tu aies viré le SELECT ?

Un poste sans accent ? La faute au clavier qwerty :/
|| Merci de mettre des titres explicites !!! || La bouille à Troll ? || 
Vous voulez remercier l'équipe du forum ? Participez ! Exprimez-vous ! Revenez et parlez de ce que vous voulez ! Wink Image: actualites-informatiques-pcw.1.gif
19-06-2008 17:37 PM
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
dardadax Hors ligne
Informaticien qualifié
****

Messages : 585
Inscription : Sep 2007
Réputation : 1
Message : #5
 
Salut Troll ^^

A côté de la plaque mais bon, comme du côté langage à choisir, le logiciel n'est pas très clair... lol

Oui j'ai viré le select parce que contrairement à ce qu'affiche l'aide...il ne faut insérer que le calcul de l'expression elle-même...(qu'il insère dans une requête SQL qui'il génère automatiquement !

En gros l'aide te dit : il faut faire l'instruction complète avec le select, mais la partie SSAS de création de calcul nommé ne veut que le "comment je la calcule, ta nouvelle colonne?"

ça marche donc c'est bon ^^ reste plus qu'à trouver l'occasion de l'utiliser Smile

d'après ce que j'ai pu voir un peu partout, les calculs nommés sont utilisés pour simplifier le calcul du cube en insérant "en dur" les valeurs que l'on utilise couramment, comme le prix TTC basé sur le prix HT et la TVA du pays par exemple...

résultat : un affichage plus rapide du résultat de la requête via excel (ou tout autre logiciel de reporting)

Pour ceux qui ne connaissent pas le principe, le cube est une sorte de stockage multidimmensionnel où tous les recouements entre tables sont précalculés.
Résultat : on n'exécute plus de requête (hors calculs d'agrégats) mais on parcourt le cube, ce qui revient à lire les données (beaucoup plus rapide en somme)


Marchenko.
22-06-2008 17:33 PM
Envoyer un email à cet utilisateur Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Troll Hors ligne
Trolls' master
******

Messages : 15 818
Inscription : Mar 2006
Réputation : 21
Message : #6
[Résolu][SQL Server 2k5 SSAS] Calcul Nommé
Ok merci pour l'explication Wink

Un poste sans accent ? La faute au clavier qwerty :/
|| Merci de mettre des titres explicites !!! || La bouille à Troll ? || 
Vous voulez remercier l'équipe du forum ? Participez ! Exprimez-vous ! Revenez et parlez de ce que vous voulez ! Wink Image: actualites-informatiques-pcw.1.gif
22-06-2008 21:16 PM
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur Citer ce message dans une réponse




Discussions apparemment similaires...
Discussion : Auteur Réponses : Affichages : Dernier message
  crée son blog sur server ftp et + dhal 3 4 476 26-10-2009 22:05 PM
Dernier message: Troll
  [SQLSRV2005] SSAS - Pas d'agrrégation sandmil 3 5 141 29-06-2009 12:45 PM
Dernier message: sandmil
  Colonne CUMULÉ avec SSAS PBERTHIAUME 6 5 406 26-11-2008 21:38 PM
Dernier message: Troll
  Donkey Server en double ! blueshift 1 3 178 31-10-2006 13:09 PM
Dernier message: Troll

Aller à :


Utilisateur(s) parcourant cette discussion : 1 visiteur(s)