Проблема полуаддитивных мер - сумма снимков за каждый месяц, но не по месяцам - PullRequest
1 голос
/ 26 ноября 2009

Опытный с SQL, но плохо знакомый с MDX, у меня возникают проблемы с умом:

У меня есть таблица фактов, которая содержит снимки сальдо счетов в месяц. Мне нужно свернуть балансы как полуаддитивную меру - прямая сумма, очевидно, не работает для балансов. Однако мне НЕОБХОДИМО суммировать все остатки за КАЖДЫЙ месяц отдельно, суммируя остатки по всем счетам, поэтому понятие «lastnonempty» для меня тоже не работает. Пример, если факты выглядят так:

Date        AccountNo     Balance
2009-01-31  1111          $100
2009-01-31  2222          $100
2009-01-31  4444          $100
2009-01-31  5555          $100

2009-02-28  1111          $100
2009-02-28  2222          $200
2009-02-28  3333          $500
2009-02-28  5555          $50

etc.

И у меня есть измерение учетных записей, которое группирует счета в основную категорию / вспомогательную категорию / иерархию учетных записей, мне нужен вывод, подобный этому, который суммирует остатки за каждый месяц по всем учетным записям:

Month        Total
January 09   $400
February 09  $850

А по типу счета:

Month        Total
January 09   $400
  Type 1      $200
    1111       $100
    2222       $100
  Type 2     $200
February 09  $850
  Type 1     $300
  Type 2     $550

НО, остатки НЕ должны суммироваться по месяцам, кварталам или годам, потому что это не имеет смысла, и они будут учитываться дважды. Любой более длительный интервал времени должен показывать закрытие периода:

Quarter    WRONG    Correct
Q1         $1250    $850   // should be the sum of balances for the *last* month in Q1
  Type 1   $500     $300
  Type 2   $759     $550

Если я использую агрегацию "lastnonempty", я получаю только одну, буквальную последнюю строку счета за месяц, а не сумму остатков на счетах за последний месяц. Это похоже на то, что итоговое значение за месяц показывает только баланс, взятый с одного случайного аккаунта в этом месяце, а не итоговое значение. (Я уверен, что это не совсем случайно, вероятно, выбирает один на основе порядка хранения или что-то)

Я уверен, что просто делаю что-то простое, не так ...

1 Ответ

0 голосов
/ 01 декабря 2009

Я думаю, что решил эту проблему: мои исходные данные, имеющие сальдо, были очень редкими - была строка только для ненулевых сальдо, и НЕТ строк для счетов, когда сальдо равно нулю. Это сделало все странным (представьте себе, как инвентарь, где у вас есть количество деталей, и эти количества часто равны нулю, но когда они равны 0, то строка просто отсутствует в таблице фактов)

Мне удалось создать представление в источнике данных, которое «добавит обратно» все дополнительные строки с нулевым балансом, и после этого функция ClosingPeriod () заработала, как и ожидалось.

...