powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Расчет остатков с ипользованием иерархии Дата, некоторые проблемы с Неделей
6 сообщений из 6, страница 1 из 1
Расчет остатков с ипользованием иерархии Дата, некоторые проблемы с Неделей
    #32188960
Вжик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таким образом я считаю входящий остаток на период, используя всю иерархию измерения Дата. [Изменение остатка количество] - это итоговое изменение остатка: Приход - Расход. Но при работе с уровнем Дата при вышестоящей неделе которая не целиком вписывается в месяц возникают проблемы, я думаю эта проблема известна тем кто таким же образом считает остатки. При этом метод
Код: plaintext
Sum(PeriodsToDate([Дата].[(All)], [Дата].CurrentMember.PrevMember), [Measures].[Изменение остатка количество])
работает корректно. Возможно решение: начиная с уровня Неделя работать не с агрегатами недели а по конкретным дням, убрать вообще уровень Неделя. Вопросы: есть ли метод решения проблемы эффективней, есть ли решение этой проблемы иное ???
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
 -- посмотрим есть ли предок на уровне квартал
 
iif (Ancestor([Дата].CurrentMember, [Дата].[Квартал]) is NULL,
 -- нет предка на уровне квартал, видимо либо года либо выше, просуммируем
 
Sum(PeriodsToDate([Дата].[(All)], [Дата].CurrentMember.PrevMember), [Measures].[Изменение остатка количество]),
 -- есть предок на уровне квартала (квартал или ниже), просуммируем до уровня квартал включительно
 
 -- просуммируем до предыдущего года
 
Sum(PeriodsToDate([Дата].[(All)], Ancestor([Дата].CurrentMember, [Дата].[Год]).PrevMember), [Measures].[Изменение остатка количество]) +
 -- просуммируем до предыдущего квартала
 
iif([Дата].CurrentMember is OpeningPeriod([Дата].[Квартал], Ancestor([Дата].CurrentMember, [Дата].[Год])),
 -- является первым кварталом в году, предыдущего квартала нет, ничего не суммируем
 
NULL,
 -- не является первым кварталом в году, предыдущий квартал есть, просуммируем до предыдущего квартала
 
Sum(PeriodsToDate([Дата].[Год], Ancestor([Дата].CurrentMember, [Дата].[Квартал]).PrevMember), [Measures].[Изменение остатка количество])) +
 -- посмотрим есть ли предок на уровне месяц
 
iif (Ancestor([Дата].CurrentMember, [Дата].[Месяц]) is NULL,
 -- предка на уровне месяц нет, суммировать нечего
 
NULL,
 -- предок на уровне месяца есть (месяц или ниже), просуммируем до предыдущего месяца
 
iif([Дата].CurrentMember is OpeningPeriod([Дата].[Месяц], Ancestor([Дата].CurrentMember, [Дата].[Квартал])),
 -- первый месяц в квартале суммировать нечего
 
NULL,
 -- не является первым месяцем в квартале, предыдущий месяц есть, просуммируем до предыдущего месяца
 
Sum(PeriodsToDate([Дата].[Квартал], Ancestor([Дата].CurrentMember, [Дата].[Месяц]).PrevMember), [Measures].[Изменение остатка количество])) +
 -- посмотрим есть ли предок на уровне неделя
 
iif (Ancestor([Дата].CurrentMember, [Дата].[Неделя]) is NULL,
 -- предка на уровне неделя нет, суммировать нечего
 
NULL,
 -- предок на уровне неделя есть (неделя или ниже), просуммируем до предыдущей недели
 
iif([Дата].CurrentMember is OpeningPeriod([Дата].[Неделя], Ancestor([Дата].CurrentMember, [Дата].[Месяц])),
 -- первая неделя в месяце суммировать нечего
 
NULL,
 -- не является первой неделей в месяце, предыдущая неделя есть, просуммируем до предыдущей недели
 
Sum(PeriodsToDate([Дата].[Месяц], Ancestor([Дата].CurrentMember, [Дата].[Неделя]).PrevMember), [Measures].[Изменение остатка количество])) +
 -- посмотрим есть ли предок на уровне дата (дата, ниже некуда)
 
iif (Ancestor([Дата].CurrentMember, [Дата].[Дата]) is NULL,
 -- предка на уровне дата нет
 
NULL,
 -- предок на уровне дата есть, просуммируем до предыдущей даты
 
iif([Дата].CurrentMember is OpeningPeriod([Дата].[Дата], Ancestor([Дата].CurrentMember, [Дата].[Неделя])),
 -- первая дата недели, суммировать нечего
 
NULL,
 -- не является первой датой недели, предыдущая дата есть, просуммируем до предыдущей даты
 
Sum(PeriodsToDate([Дата].[Неделя], Ancestor([Дата].CurrentMember, [Дата].[Дата]).PrevMember), [Measures].[Изменение остатка количество]))))))
...
Рейтинг: 0 / 0
Расчет остатков с ипользованием иерархии Дата, некоторые проблемы с Неделей
    #32189046
Вжик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где же "проповедники" гибкого использования иерархии Дата при расчете остатков ??? Или не так считаю ???
...
Рейтинг: 0 / 0
Расчет остатков с ипользованием иерархии Дата, некоторые проблемы с Неделей
    #32189292
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опытные "проповедники" ручками MDX не пишут, а создают его визуальными средствами :)
...
Рейтинг: 0 / 0
Расчет остатков с ипользованием иерархии Дата, некоторые проблемы с Неделей
    #32189298
Владимир Иванов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замени недели на декады и не мучайся.
...
Рейтинг: 0 / 0
Расчет остатков с ипользованием иерархии Дата, некоторые проблемы с Неделей
    #32189299
Вжик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жаль.
...
Рейтинг: 0 / 0
Расчет остатков с ипользованием иерархии Дата, некоторые проблемы с Неделей
    #32189909
Вжик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы заменил, но бизнес специфичен - еженедельная пресса нужна динамика в рамках недели...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Расчет остатков с ипользованием иерархии Дата, некоторые проблемы с Неделей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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