2010-10-18 3 views
0

J'ai créé une mesure calculée qui calcule un ratio pondéré de l'équilibre actuel de tous les prêts qui entrent dans diverses notations de risque:Comment obtenir une mesure calculée pour un bon déroulement?

WITH 
MEMBER [MEASURES].[Weighted Ratio] AS 
    (Measures.[Current Balance] * [Risk Rating].[Loan Rating Code].CurrentMember.member_value)/
    (
     [Measures].[Current Balance], 
     Ancestor([Risk Rating].[Loan Rating Code].CurrentMember, 1) 
    ), FORMAT_STRING = "Standard" 
SELECT 
    {[Measures].[Current Balance], [Measures].[Weighted Ratio]} on COLUMNS, 
    [Risk Rating].[Loan Rating Code].MEMBERS ON ROWS 
FROM 
    [Test Cube] 

Le problème est que les résultats reviennent seulement au niveau de l'enfant, au lieu de en train de se résumer:

 Current Balance  Weighted Ratio 
All $3,245,749,329.46 (null) 
0 $661,388.20   0.00 
1 $17,341,801.10  0.01 
2 $117,188,374.06  0.07 
3 $596,477,812.37  0.55 
4 $1,266,047,841.51 1.56 
5 $986,789,425.72  1.52 
6 $119,055,732.16  0.22 
7 $133,050,242.69  0.29 
8 $9,136,711.65  0.02 

Comment puis-je faire apparaître la somme au niveau Tous au lieu de (NULL)?

Répondre

0

j'ai pu obtenir ce travail en utilisant IsLeaf() et récursion dans ma mesure calculée:

WITH 
MEMBER [Measures].[Weighted Ratio] AS 
IIF(
    IsLeaf([Risk Rating].[Loan Rating Code].CurrentMember), 
    ([Measures].[Current Balance] * [Risk Rating].[Loan Rating Code].CurrentMember.member_value)/
    ([Risk Rating].[Loan Rating Code].[All], [Measures].[Current Balance]), 
    SUM([Risk Rating].[Loan Rating Code].CurrentMember.Children, [Measures].[Weighted Ratio]) 
), FORMAT_STRING = "Standard" 
SELECT 
    {[Measures].[Current Balance], [Measures].[Weighted Ratio]} on COLUMNS, 
    [Risk Rating].[Loan Rating Code].MEMBERS ON ROWS 
FROM 
    [Test Cube] 

Maintenant, les résultats ressemblent que je voulais:

 Current Balance  Weighted Ratio 
All $3,245,749,329.46 4.24 
0 $661,388.20   0.00 
1 $17,341,801.10  0.01 
2 $117,188,374.06  0.07 
3 $596,477,812.37  0.55 
4 $1,266,047,841.51 1.56 
5 $986,789,425.72  1.52 
6 $119,055,732.16  0.22 
7 $133,050,242.69  0.29 
8 $9,136,711.65  0.02 
0

Il semble que vous n'avez pas considéré membre racine lorsque vous écrire

Ancestor([Risk Rating].[Loan Rating Code].CurrentMember, 1) 

Quand il vient à la racine (tous les niveaux) ci-dessus fonction essayer de trouver son ancêtre et qui est probablement la raison pour laquelle vous obtenez null à ce niveau . Vous devez décider quoi faire quand il s'agit de membre "All Level" de [Risk Rating].[Loan Rating Code] dimension.

Il semble que vous ayez juste besoin de renvoyer une valeur constante "1" quand il s'agit du niveau racine. Si c'est le cas, vous devriez changer votre requête comme ci-dessous;

WITH 
MEMBER [MEASURES].[Weighted Ratio] AS 
(Case 

     When [Risk Rating].[Loan Rating Code].CurrentMember.Level.Ordinal = 0 
     Then 1 
     Else (Measures.[Current Balance] * [Risk Rating].[Loan Rating Code].CurrentMember.member_value)/
     (
      [Measures].[Current Balance], 
      Ancestor([Risk Rating].[Loan Rating Code].CurrentMember, 1) 
     ) 
    End 
), FORMAT_STRING = "Standard" 
SELECT 
    {[Measures].[Current Balance], [Measures].[Weighted Ratio]} on COLUMNS, 
    [Risk Rating].[Loan Rating Code].MEMBERS ON ROWS 
FROM 
    [Test Cube] 

Si vous voulez retourner un autre résultat en matière de niveau racine il suffit de changer la logique à la section Then.

+0

Hmmmm ... mais la racine (tous les niveaux), je ne veux pas une valeur constante "1" - la valeur y est censée être la somme des enfants qui (habituellement) ne sera pas ajouter à 1. –

+0

Que devrait l'ancêtre de la racine valeur de membre de niveau être supposé? vous multipliez le solde par la valeur actuelle du membre LoanRatingCode et divisez par le solde du parent. Il n'y a pas de parentage quand il s'agit du niveau racine. Si nous supposons que c'est lui-même alors le résultat est juste "1". – orka

+0

Le niveau racine serait la somme des valeurs enfants, dans ce cas 4.24. –

Questions connexes