J'ai un problème auquel je dois faire face chaque fois que je décide de construire un cube, et je n'ai pas encore trouvé de moyen de le surmonter.
Le problème est de savoir comment permettre à l'utilisateur de définir automatiquement une gamme de choses sans avoir à les coder en dur dans la dimension. Je vais expliquer mon problème dans un exemple.
J'ai une table appelée Clients :
ce sont les données du tableau:
Je souhaite afficher les données dans un style pivot et regrouper le salaire et l' âge dans des plages définies comme ci-dessous:
J'ai écrit ce script et défini les plages:
SELECT [CustId]
,[CustName]
,[Age]
,[Salary]
,[SalaryRange] = case
when cast(salary as float) <= 500 then
'0 - 500'
when cast(salary as float) between 501 and 1000 then
'501 - 1000'
when cast(salary as float) between 1001 and 2000 then
'1001 - 2000'
when cast(salary as float) > 2000 then
'2001+'
end,
[AgeRange] = case
when cast(age as float) < 15 then
'below 15'
when cast(age as float) between 15 and 19 then
'15 - 19'
when cast(age as float) between 20 and 29 then
'20 - 29'
when cast(age as float) between 30 and 39 then
'30 - 39'
when cast(age as float) >= 40 then
'40+'
end
FROM [Customers]
GO
Mes plages sont codées en dur et définies. Lorsque je copie les données dans Excel et les affiche dans un tableau croisé dynamique, elles apparaissent comme ci-dessous:
Mon problème est que je veux créer un cube en convertissant la table Customers en une table de faits et créer des tables à 2 dimensions SalaryDim & AgeDim .
La table SalaryDim comporte 2 colonnes ( SalaryKey, SalaryRange ) et la table AgeDim est similaire ( ageKey, AgeRange ). Ma table de faits client a:
Customer
[CustId]
[CustName]
[AgeKey] --> foreign Key to AgeDim
[Salarykey] --> foreign Key to SalaryDim
Je dois encore définir mes gammes à l'intérieur de ces dimensions. Chaque fois que je connecte un pivot Excel à mon cube, je ne peux voir que ces plages définies codées en dur.
Ma question est de savoir comment définir des plages de manière dynamique à partir du tableau croisé dynamique directement, sans créer les dimensions de la plage comme AgeDim et SalaryDim . Je ne veux pas seulement être collé aux plages définies dans la dimension.
La plage définie est «0-25», «26-30», «31 - 50». Je pourrais vouloir le changer en "0-20", "21 -31", "32 -42" et ainsi de suite, et les utilisateurs demandent des plages différentes à chaque fois.
Chaque fois que je le change, je dois changer la dimension. Comment puis-je améliorer ce processus?
Ce serait formidable d'avoir une solution implémentée dans le cube, afin que n'importe quel outil client BI qui se connecte au cube puisse définir les plages, mais cela ne me dérangerait pas s'il existe un bon moyen d'utiliser uniquement Excel.