powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Перенос одного значения на всё измерение (MDX)
6 сообщений из 6, страница 1 из 1
Перенос одного значения на всё измерение (MDX)
    #39509987
Larr`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день
Не использовал в кубах особо формул MDX, а теперь вот понадобилось и не могу разобраться.
Возникла задача прогноза продаж на конец текущего месяца.
Считается так: Объем продаж * кол-во дней в текущем месяце / кол-во отработанных дней в месяце.
Я это реализовал так
Код: sql
1.
2.
3.
CREATE MEMBER CURRENTCUBE.[Measures].[amt forecast]
 AS iif([DATE_OPEN].[Month].currentmember.properties("last month")='-1',[Measures].[agreement amt],NULL)*[DATE_OPEN].[Month].currentmember.properties("Month Days")
 /  ClosingPeriod ([DATE_OPEN].[DATE_OPEN_YMD].[Dm],[DATE_OPEN].[DATE_OPEN_YMD].currentmember).name


Но пользователям надо, чтоб этот member показывался и у других месяцев и на других уровнях [DATE_OPEN] и без него вообще.
то есть не месяцamtamt forecastиюл10авг1518 а месяцamtamt forecastиюл1018авг1518
Как правильно переписать формулу?
...
Рейтинг: 0 / 0
Перенос одного значения на всё измерение (MDX)
    #39510286
bideveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Количество дней я бы сделал мерой (на основе таблицы времени как таблице фактов).
...
Рейтинг: 0 / 0
Перенос одного значения на всё измерение (MDX)
    #39510623
Фотография bbx1389
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а на уровень источника не хотите перенести вычисления?
...
Рейтинг: 0 / 0
Перенос одного значения на всё измерение (MDX)
    #39511835
Larr`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bbx1389а на уровень источника не хотите перенести вычисления?
Да, я, в принципе, почти так и сделал.
Количества дней прячу в dummy-значения в календаре
Код: sql
1.
2.
3.
4.
5.
6.
CREATE MEMBER CURRENTCUBE.[Measures].[koef]
as [DATE_OPEN].[DATE_OPEN_YMD].[DM].item(0).MEMBERVALUE
    /[DATE_OPEN].[DATE_OPEN_YMD].[DM].item([DATE_OPEN].[DATE_OPEN_YMD].[DM].count-1).MEMBERVALUE,
VISIBLE = 0;
CREATE MEMBER CURRENTCUBE.[Measures].[amt forecast]
 AS ([DATE_OPEN].[last month].&[1],[Measures].[agreement amt])*[Measures].[koef]


Но, когда я презентовал это заказчику, он сказал "это всё, конечно, замечательно, а теперь давай перенесём продажи предыдущих месяцев в этот столбец тоже, мне так удобней", гад
И вот тут я опять застрял. Сделал скоуп, но он показывает правильно только на листовом уровне last month. Как мне его перенести на уровень all?
Код: sql
1.
2.
3.
4.
5.
CREATE MEMBER CURRENTCUBE.[Measures].[amt forecast]
 AS ([Measures].[amt]);
scope ([DATE_OPEN].[last month].&[True],[Measures].[amt forecast]);
this=[Measures].[amt]*[Measures].[koef];
end scope;


Если делать last month неагрегируемым, он вообще не показывает последний месяц (наверно потому, что в измерении времени здесь неиерархичная структура, а всё привязано тупо к дате-ключу)
...
Рейтинг: 0 / 0
Перенос одного значения на всё измерение (MDX)
    #39512162
Larr`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получилось так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE MEMBER CURRENTCUBE.[Measures].[amt forecast]
 AS (0), 
FORMAT_STRING = "#,##0", 
NON_EMPTY_BEHAVIOR = { [amt] };
scope ([DATE_OPEN].[last month],[Measures].[amt forecast]);  
[DATE_OPEN].[last month].&[True]=[Measures].[amt]*[Measures].[koef];  
[DATE_OPEN].[last month].&[False]=[Measures].[amt];  
end scope;
scope ([DATE_OPEN].[last month].[All],[Measures].[amt forecast]);  
this=sum([DATE_OPEN].[last month].members, [Measures].[amt forecast]);  
end scope;    


Интересно, можно попроще?
Кажется, надо было сразу делать дополнительным столбцом в таблице фактов, но было жалко
Да и надеялся, что здесь форум поживее, как mssql-ветка...
...
Рейтинг: 0 / 0
Перенос одного значения на всё измерение (MDX)
    #39520638
Larr`,

правильно будет написать scope. В измерении дат ввести атрибут зависимый от даты, где будет 1 или 0 - настал этот день или не настал, а также сделать меру, зависящую только от даты, где для дат, что не наступили, будет к-во дней назад на которые надо заглянуть чтобы вытянуть оттуда значение.

а дальше в scope всунуть выражение, которое будет для дней где атрибут = 0 находить через lag(твоя_мера_с_к-вом_дней_заглядываня_назад) нужное тебе значение.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Перенос одного значения на всё измерение (MDX)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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