Bah en fait je viens de relire en entier: si ton truc ne peut pas - comme cela en a l'air - être géré côté SQL, tu vas devoir le faire en MDX.
J'ai besoin de calculer le nombre de clients ayant 0 factures,...
Heureusement que c'est juste pour les clients, on devrait pouvoir faire un truc.
Prends ta dimension technique (Appelons la "Tranches Factures Clients").
Si on reprend le même principe que mon post, tu vas scoper sur un truc comme ça:
1 2 3 4 5 6 7 8 9
| SCOPE ([Tranche Factures Clients].[Tranche Factures Clients].[Tranche Factures Clients]);
This = --On est sur la tranche de x à y
Aggregate
(
[Tranche Factures Clients].[Tranche Factures Clients].DefaultMember
*
{ Clients ayant entre x et y factures }
)
END SCOPE; |
Le problème c'est que du coup ton expression de set va être un Filter entre les bornes... essaie d'abord ça, tu pourrais alors tenter un Exists(IIF( un peu comme ça en créant une mesure bidon:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| CREATE MEMBER Measures.[Client est dans la Tranche]
AS
IIF
(
([Client].[Client].CurrentMember,[Measures].[Nb Factures])
>=
[Tranche Factures Clients].[Tranche Factures Clients].CurrentMember.Properties("Borne Inf")
And
([Client].[Client].CurrentMember,[Measures].[Nb Factures])
<
[Tranche Factures Clients].[Tranche Factures Clients].CurrentMember.Properties("Borne Sup"),
1,
Null
), VISIBLE=0, NON_EMPTY_BEHAVIOR = {[Measures].[Nb Factures]} |
Et du coup mon expression de set (qui remplace { Clients ayant entre x et y factures } deviendrait:
NonEmpty([Client].[Client].[Client],[Client est dans la Tranche])
.
Mais c'est expérimental.
Sinon la solution de créer une mesure par tranche: avantage du coup tu peux utiliser un Sum(IIF) pattern et ça performera pas mal (cf Mosha: http://sqlblog.com/blogs/mosha/archi...ns-in-mdx.aspx). Mais par contre tu n'auras que le Count qui marche du coup. A tester.
Partager