2011-12-21 8 views
0

Je voudrais écrire un KPI dans SSAS qui me donne la moyenne de l'âge de tous les employés. La date de naissance de l'employé est Dim_Employee. J'ai lu 3 livres pleins de recommandations de gestion de date et d'heure de MDX déjà, mais aucun d'eux n'a fonctionné. Avec des heures d'essais et d'erreurs désespérés, j'ai essayé d'innombrables combinaisons avec la solution sans succès.Utilisation de DateDiff dans SSAS MDX

La date de naissance est datetime (null) dans la base de données source. La solution que j'ai essayé est la suivante:

VBA!DateDiff("yyyy", now(), [Employee].[BirthDate].CurrentMember.Member_Value) 

Bien sûr, je devrais utiliser [Date].[Date].CurrentMember au lieu de now(), mais, pour simplifier utilisé cela.

Dans la dimension Employé, j'ai créé un ValueColumn avec le type de données Date. Lorsque je tente de l'exécuter dans Management Studio, il me rend l'erreur suivante:

"The Axis0 function expects a tuple set expression for the argument. A string or numeric expression was used."

Quand je ne l'utilise Member_Value, il redonne nul, et DateDiff redonne -2010. Parce que je ne suis pas responsable de la structure du cube où je voudrais écrire ce KPI, je recherche une solution qui ne nécessite pas de nouvelles mesures, dimensions du tout. (cependant s'il n'y a pas de solution sans ajouter de nouveaux éléments au cube, je proposerai bien sûr une demande de changement dans le cube donné)

Quelle est la solution dans ce cas? Est-il possible d'écrire ce KPI sans utiliser de Mesures supplémentaires?

Répondre

1

répondre à ma propre question.

Il semble que cela ne puisse pas être résolu comme j'ai essayé. Enfin j'ai ajouté une nouvelle colonne sous T-SQL au Fact_Headcount qui utilise maintenant INNER JOINs à la fois Dim_Employee et Dim_Date et j'utilise DateDiff de T-SQL pour calculer les âges pour chaque employé avec chaque datetime donné. Maintenant, j'ai ajouté Age comme mesure à ce HeadCount MeasureGroup et maintenant je peux gérer ce calcul de KPI.

Cela signifie que je dois apporter des modifications au modèle sous-jacent pour résoudre le cas.

+0

Félicitations pour la solution. Lorsque vous êtes en mesure de le faire, assurez-vous de marquer votre réponse comme «acceptée» afin que d'autres puissent tirer des leçons de votre succès. Cheers ~ –

0

Essayez d'utiliser la fonction CDATE:

VBA!DateDiff("yyyy", now(), CDate([Employee].[BirthDate].CurrentMember.Member_Value)) 
0

J'accepte avec votre réponse, nous pourrions aussi le faire comme

Datediff("yyyy",Now(),[Delivery Date].[Date].CurrentMember.Name) 

- Voici le format du Now() et le membre fait question. Quand je l'ai fait à [Adventure Works] Cube avec le foramt correct acctually je reçois DIFIFE dans les années

Questions connexes