Как получить рассчитанную меру, чтобы накопить правильно? - PullRequest
0 голосов
/ 18 октября 2010

Я создал рассчитанную меру, которая вычисляет взвешенное соотношение для текущего баланса всех ссуд, которые попадают в различные рейтинги риска:

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]

Проблема в том, что результаты возвращаются только на дочернем уровневместо суммирования:

     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

Как получить сумму, отображаемую на уровне All вместо (null)?

Ответы [ 2 ]

0 голосов
/ 21 октября 2010

Я смог заставить это работать, используя IsLeaf () и рекурсию в моей вычисленной мере:

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]

Теперь результаты выглядят так, как я хотел:

     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 голосов
/ 19 октября 2010

Похоже, что вы не учитывали root-член, когда писали

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

Когда дело касается функции Root (All Level) выше, попытайтесь найти ее предка, и, вероятно, именно поэтому вы получаете нольуровень.Вы должны решить, что делать, когда речь заходит о члене «Все уровни» измерения [Risk Rating].[Loan Rating Code].

Похоже, вам просто нужно вернуть постоянное значение "1", когда дело доходит до корневого уровня.Если это так, вы должны изменить свой запрос, как показано ниже:

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]

Если вы хотите вернуть другой результат, когда дело доходит до корневого уровня, просто измените логику в разделе Then.

...