Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MDX: Остатки: Нужна небольшая помощь / 5 сообщений из 5, страница 1 из 1
27.02.2006, 18:57
    #33568928
Simohin Alex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: Остатки: Нужна небольшая помощь
Бьюсь над наиболе быстрой формулой расчёта остатка на конец выбранного периода, и у меня возник вопрос.
Есть ресурс [Количество оборот] и период [Период].[ГКМД].
Решил создать [Calculated member], в котором для каждого уровня будут суммироваться обороты предыдущих уровней плюс обороты текущего уровня, до текущего члена.
Т.е. если выбрано [Период].[ГКМД].[Весь период].[2006].[Квартал 2].[Май], нужно просуммировать обороты всех годов до 2005 включительно, плюс оборот за первый квартал 2006 года плюс обороты апреля и мая Кваратла 2.

Сейчас ковыряюсь в расчтёте остатка на месяц, получаю неверный результат, который не могу объяснить.

Привожу MDX запрос (как отладочный, это ещё не CM)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
WITH 
MEMBER [Measures].[Year] AS '
iif([Период].[ГКМД].CurrentMember.Level.Name = "Год", 
SUM([Период].[ГКМД].FirstSibling : [Период].[ГКМД].CurrentMember, [Measures].[Количество оборот])
, NULL)
'

MEMBER [Measures].[Quarter] AS '
iif([Период].[ГКМД].CurrentMember.Level.Name = "Квартал", 
SUM(Except({[Период].[ГКМД].Parent.FirstSibling : [Период].[ГКМД].Parent}, {[Период].[ГКМД].Parent}), [Measures].[Количество оборот])
+ SUM([Период].[ГКМД].FirstSibling : [Период].[ГКМД].CurrentMember, [Measures].[Количество оборот])
, NULL)
'

MEMBER [Measures].[Month] AS '
iif([Период].[ГКМД].CurrentMember.Level.Name = "Месяц", 
SUM(Except({[Период].[ГКМД].Lag(2).FirstSibling : [Период].[ГКМД].Lag(2)}, {[Период].[ГКМД].Lag(2)}), [Measures].[Количество оборот])
+ SUM(Except({[Период].[ГКМД].Parent.FirstSibling : [Период].[ГКМД].Parent}, {[Период].[ГКМД].Parent}), [Measures].[Количество оборот])
+ SUM([Период].[ГКМД].FirstSibling : [Период].[ГКМД].CurrentMember, [Measures].[Количество оборот])
, NULL)
'

SELECT 
NON EMPTY {{[Товары].[Товар].&[  2DJYNIK]} * {[Measures].[Количество оборот], [Measures].[Year], [Measures].[Quarter], [Measures].[Month]}} ON COLUMNS,
NON EMPTY {Descendants([Период].[ГКМД].[Весь период].[ 2006 ])} ON ROWS
FROM Остатки
WHERE ([Склады].[Склад].&[ 5 ])

В результате получаю такой результат (картинка вложение).

Не могу понять, почему, например, по Апрелю 2006 остаток 32, Маю 30, Июнь, 15. По идее, должно показывать 15. Почему формула берёт в расчёт предыдущее месяцы? Где я с иерархией в формуле нахомутал?..
...
Рейтинг: 0 / 0
27.02.2006, 19:09
    #33568959
Dmitry Biryukov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: Остатки: Нужна небольшая помощь
охота велосипед изобретать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
sum(
    Ascendants([ГКМД].CurrentMember),
    sum(
        [ГКМД].FirstSibling:[ГКМД].CurrentMember,
        [Measures].[кол-во]
       )
       -[Measures].[кол-во]
   )+[Measures].[кол-во]
...
Рейтинг: 0 / 0
27.02.2006, 19:23
    #33568992
Simohin Alex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: Остатки: Нужна небольшая помощь
Вау... Всё гениальное просто...
Спасибо!
...
Рейтинг: 0 / 0
27.02.2006, 19:31
    #33569012
ShIgor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: Остатки: Нужна небольшая помощь
ну а для сведения нафигачил в [Measures].[Month]
расчет для апреля:
SUM(Except({январь:февраль}, {февраль})) +
SUM(Except({Квартал 1:Квартал 2}, {Квартал 2})) +
SUM({апрель:апрель}) = (17)+(15)+(0)=32
расчет для мая:
SUM(Except({январь:март}, {март})) +
SUM(Except({Квартал 1:Квартал 2}, {Квартал 2})) +
SUM({апрель:май}) = (17-2)+(15)+(0)=30
расчет для июня:
SUM(Except({апрель:апрель}, {апрель})) +
SUM(Except({Квартал 1:Квартал 2}, {Квартал 2})) +
SUM({апрель:июнь}) = (0)+(15)+(0)=15
...
Рейтинг: 0 / 0
27.02.2006, 19:48
    #33569049
Simohin Alex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX: Остатки: Нужна небольшая помощь
Свою ошибку тоже понял. Lag(1) - это не Parent, а PrevMember.
Невнимательно прочёл книгу Моши
Ещё раз мерси.
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MDX: Остатки: Нужна небольшая помощь / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]