2011-09-08 4 views
0

Je suis en train de mettre en place un projet SSAS pour nos sites web mais je n'arrive pas à trouver la bonne valeur alors que c'est assez simple en requête SQL.Business intelligence - Je ne trouve pas la valeur que je recherche

Voici ma configuration: J'ai un datawarehouse rempli de fait de connexion d'utilisateur sur mes sites. J'ai donc une dimension Membre et une dimension date. Heres est le KPI que je recherche: "Pour combien de jours en moyenne un utilisateur vient voir notre site".

Prenons un exemple:

Member Day 
a   1 
a   1 
a   2 
b   2 
a   4 
a   5 
b   5 
a   6 

Dans ce cas, l'indicateur de performance clé devrait donner 3,5 (a = 5, b = 2). En langage simple, j'aurais fait une moyenne sur un groupe par groupe (c'est la première demande que j'ai en tête, peut-être qu'il y en a une meilleure). Mais dès que j'essaie d'assembler des dimensions et des faits, je ne trouve pas la bonne mesure.

Est-ce que je cherche la mauvaise chose? Devrais-je abandonner mon mode de pensée SQL? Comment feriez-vous pour obtenir la valeur dont j'ai besoin?

+0

Vous expliquez comment vous obtenez ceci? 'Dans ce cas le KPI devrait donner 3,5 (a = 5, b = 2) .' – MatBailie

+0

Oui, en mots, l'utilisateur a arrive le jour 1 (deux fois), 2, 4, 5 et 6. C'est 5 jours (et 6 visites). L'utilisateur b arrive les jours 2 et 5 ce qui fait 2 jours (et 2 visites). Ainsi, le nombre moyen de jours d'un utilisateur à venir sur mes applications est (5 + 2)/2. Dans SQL je l'aurais fait SELECT AVG (Visites) FROM (SELECT membres, COUNT (*) VISITENT (SELECT Membre, COUNT (*) VisitPerDay FROM Connexion GROUP BY Membre, Jour) t1 GROUP BY t1.MemberId) t2 (Désolé pour le mauvais formatage, je ne sais pas comment le faire dans les commentaires) – Bastien

+0

Vous pouvez mettre 'autour de votre code pour obtenir le formatage du code. – MatBailie

Répondre

0

Je comprends maintenant! C'était juste un problème d'internationalisation. Pour moi 3,5 signifie que les numéros 3 et 5, je l'écrire comme 3.5 :)

SELECT 
    AVG(CountOfDay) As AverageDays 
FROM 
    (SELECT Member, COUNT(DISTINCT Day) CountOfDay FROM YourTable GROUP BY Member) AS UniqueDaysByMember 

Vraiment, vous n'avez pas besoin « membres » dans SELECT de la sous-requête. Ça fait juste que ça "signifie" quelque chose pour moi, donc je ne deviens pas confus si je reviens et regarde le code plus tard!

+0

Ok c'est plus clair maintenant. C'est l'infâme COUNT DISTINCT. Mais cela ne répond pas à ma question sur la façon dont je peux obtenir ce résultat dans SSAS. Dans maintenant comment définir une mesure COUNT DISTINCT, mais comment puis-je faire un AVG dessus? – Bastien

Questions connexes