Construire dans votre modèle
modélisent Juste correctement: En supposant que vous avez une table de faits contenant les mesures que vous analysez et les clés étrangères à une dimension de personne ainsi qu'une dimension de date, ajouter une nouvelle table pour la dimension "groupe d'âge" contenant les plages que vous souhaitez analyser. Cette table contiendrait e. g. un enregistrement "0-9", un "10-19", etc.
Puis ajoutez une colonne de clé étrangère référençant la dimension de groupe d'âge à la table de faits. Définir la valeur de cette clé étrangère serait alors une instruction de mise à jour SQL sur la table de faits qui calcule la différence entre la date référencée par la clé étrangère à la dimension date et la date de naissance de la personne référencée par la clé étrangère à la dimension personne . Cette différence est l'âge à cette date. À partir de là, déterminez le groupe d'âge et utilisez sa clé primaire comme valeur de la colonne de clé étrangère. Et enfin, créez simplement un attribut à partir de la colonne de votre groupe d'âge de la dimension du groupe d'âge.
Calculer à la volée
Si vous voulez vraiment calculer que à la volée, je ne suis pas sûr de la performance est bonne, mais vous pouvez l'essayer comme suit: Vous auriez besoin de « l'âge groupe "dimension aussi bien. Mais il n'y aurait pas besoin de le lier à votre table de faits. Ensuite, définir un membre calculé comme suit:
member [Measures].[Age at Date] AS
DateDiff('yyyy',
[Person].[BirthDate].CurrentMember.Properties("Key0", TYPED),
Measures.[Date]
)
Member [Measures].[Person Count per Age Group] AS
CASE
WHEN [Age Group].[Age Group].CurrentMember is [Age Group].[Age Group].[0-9] THEN
Filter([Person].[Person Id].[Person Id].Members,
[Measures].[Age at Date] >= 0 AND [Measures].[Age at Date] < 10
).Count
WHEN [Age Group].[Age Group].CurrentMember is [Age Group].[Age Group].[10-19] THEN
Filter([Person].[Person Id].[Person Id].Members,
[Measures].[Age at Date] >= 10 AND [Measures].[Age at Date] < 20
).Count
...
END
Cela suppose que vous avez la date de chaque enregistrement dans une mesure nommée Measures.[Date]
directement dans votre table de faits. Si ce n'est pas le cas, vous pouvez obtenir cette date en tant que type de données de date, éventuellement à partir du membre actuel de la dimension de date, de la même manière que la date de naissance est dérivée via la propriété Key0
. Je suppose que vous utilisez vraiment un type de données Date dans la dimension de la clé d'attribut date de naissance, sinon, une conversion de type peut être nécessaire. À des fins comme cela, il existe de nombreuses fonctions VBA disponibles dans Analysis Services (comme le DateDiff
que j'ai utilisé ci-dessus), comme documented here.
Comment obtenez-vous l'information sur l'âge? Avez-vous une dimension de personne contenant un anniversaire ou (en assumant des problèmes de confidentialité) une année de naissance à partir de laquelle vous pouvez calculer l'âge (estimé) à une certaine date? – FrankPl
Salut, oui, j'ai une date de naissance avec laquelle calculer. – Anupheaus