Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / рассчеты в scoped assignment / 7 сообщений из 7, страница 1 из 1
24.02.2018, 00:57
    #39606655
churupaha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рассчеты в scoped assignment
Доброго времени суток.

- есть метрика Revenue, гранулярность день/арена
- есть метрики DisplayAds, VideoAds, гранулярность день/арена/игра/домен
- хочется сделать метрику ModeledRevenue c гранулярностью день/арена/игра/домен
- сначала надо вычислить для арена/день RevenuePerRequest = Revenue / (DisplayAds + VideoAds)
- затем для день/арена/игра/домен ModeledRevenue = (DisplayAds + VideoAds) * RevenuePerRequest

сделал вот такое

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE MEMBER CURRENTCUBE.[Measures].[Test Revenue Per Request] AS NULL;
CREATE MEMBER CURRENTCUBE.[Measures].[Test Modeled Revenue] AS NULL;

SCOPE([Dim Calendar].[Calendar YQMD].[Date].Members, [Dim Arena].[Arena Name].Members);
    SCOPE([Measures].[Test Revenue Per Request]);
        THIS = ([Measures].[Revenue]) / ([Measures].[Display Ads] + [Measures].[Video Ads]);
    END SCOPE;

    SCOPE([Test Modeled Revenue], [Dim Domain].[Domain Name].Members, [Dim Content].[Content Name].Members);
        THIS = ([Measures].[Display Ads] + [Measures].[Video Ads]) * ([Measures].[Test Revenue Per Request], ROOT([Dim Content]), ROOT([Dim Domain]));
    END SCOPE;
END SCOPE;



работает, но не совсем:

- если выбрать в качестве измерений дату, арену, то разбивка по игре, домену тоже работает
- если выбрать в качестве измерений только игру, то ничего не работает
- в любом случае Totals'ы не работают

помогите пожалуйста куда копать?
...
Рейтинг: 0 / 0
24.02.2018, 02:02
    #39606660
churupaha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рассчеты в scoped assignment
сделал фэйковые меры в measure group и все поехало.


CREATE MEMBER CURRENTCUBE.[Measures].[Test Rev Per Req] AS NULL;
CREATE MEMBER CURRENTCUBE.[Measures].[Test Modeled Revenue] AS NULL;


SCOPE([Dim Calendar].[Calendar YQMD].[Date].Members, [Dim Arena].[Arena Name] .[Arena Name] .Members);
SCOPE([Measures].[Test Revenue Per Request]);
THIS = IIF([Measures].[Display Ads] + [Measures].[Video Ads] > 0, ([Measures].[Revenue]) / ([Measures].[Display Ads] + [Measures].[Video Ads]), NULL);
END SCOPE;

SCOPE([Measures].[Test Modeled Revenue], [Dim Domain] .[Domain Name] .[Domain Name].Members, [Dim Content].[Content Name] .[Content Name] .Members);
THIS = ([Measures].[Display Ads] + [Measures].[Video Ads]) * ([Measures].[Test Revenue Per Request], ROOT([Dim Content]), ROOT([Dim Domain]));
END SCOPE;
END SCOPE;
...
Рейтинг: 0 / 0
24.02.2018, 18:07
    #39606758
bideveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рассчеты в scoped assignment
churupaha,

Потому что вычисляемые меры сами собой не агрегируются.
Поэтому либо писать для них в скрипте агрегацию, либо, как вы сделали, создавать фейковые меры.
...
Рейтинг: 0 / 0
14.03.2018, 18:36
    #39614957
churupaha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рассчеты в scoped assignment
bideveloper,

а вы не подскажете, почему подобное может тупить? верно ли я понимаю, что даже в случае если scope assignment применен к реальным мерам , т. е. "переписываю" реальные меры, то как такового переписывания не происходит, просто ассайнится формула и при обращении вычисляется?
...
Рейтинг: 0 / 0
14.03.2018, 21:46
    #39615057
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рассчеты в scoped assignment
churupahaДоброго времени суток.

- есть метрика Revenue, гранулярность день/арена
- есть метрики DisplayAds, VideoAds, гранулярность день/арена/игра/домен
- хочется сделать метрику ModeledRevenue c гранулярностью день/арена/игра/домен
- сначала надо вычислить для арена/день RevenuePerRequest = Revenue / (DisplayAds + VideoAds)
- затем для день/арена/игра/домен ModeledRevenue = (DisplayAds + VideoAds) * RevenuePerRequest

сделал вот такое

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SCOPE([Dim Calendar].[Calendar YQMD].[Date].Members, [Dim Arena].[Arena Name].[Arena Name].Members);
SCOPE([Measures].[Test Revenue Per Request]);
THIS = IIF([Measures].[Display Ads] + [Measures].[Video Ads] > 0, ([Measures].[Revenue]) / ([Measures].[Display Ads] + [Measures].[Video Ads]), NULL);
END SCOPE;

SCOPE([Measures].[Test Modeled Revenue], [Dim Domain].[Domain Name].[Domain Name].Members, [Dim Content].[Content Name].[Content Name].Members);
THIS = ([Measures].[Display Ads] + [Measures].[Video Ads]) * ([Measures].[Test Revenue Per Request], ROOT([Dim Content]), ROOT([Dim Domain]));
END SCOPE;
END SCOPE;



Вместо
Код: sql
1.
2.
3.
4.
5.
SCOPE([Dim Calendar].[Calendar YQMD].[Date].Members, [Dim Arena].[Arena Name].[Arena Name].Members);
SCOPE([Measures].[Test Modeled Revenue], [Dim Domain].[Domain Name].[Domain Name].Members, [Dim Content].[Content Name].[Content Name].Members);
THIS = ([Measures].[Display Ads] + [Measures].[Video Ads]) * ([Measures].[Test Revenue Per Request], ROOT([Dim Content]), ROOT([Dim Domain]));
END SCOPE;
END SCOPE;


попробуйте так - сначала идет scope для "Test Revenue Per Request", а затем за ним независимый scope для "Test Modeled Revenue"
Код: sql
1.
2.
3.
4.
5.
6.
7.
SCOPE([Measures].[Test Modeled Revenue],[Dim Calendar].[Calendar YQMD].[Date].Members, [Dim Arena].[Arena Name].[Arena Name].Members);
THIS = ([Measures].[Display Ads] + [Measures].[Video Ads]) * 
aggregate([Dim Domain].[Domain Name].&[All],
aggregate([Dim Content].[Content Name].&[All],
[Measures].[Test Revenue Per Request]))
 );
END SCOPE;


вдруг быстрее пойдет...
...
Рейтинг: 0 / 0
19.03.2018, 19:01
    #39617027
churupaha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рассчеты в scoped assignment
Andy_OLAP,

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE MEMBER CURRENTCUBE.[Measures].[Revenue Per Video Request] AS
IIF ([Measures].[Video Ads] > 0, [Measures].[Video Revenue] / [Measures].[Video Ads], NULL),
FORMAT_STRING = "$#,##0.000000;($#,##0.000000)",
VISIBLE = 1 ,  DISPLAY_FOLDER = 'Video' ,  ASSOCIATED_MEASURE_GROUP = '01 - Daily - Fact Revenue';

CREATE MEMBER CURRENTCUBE.[Measures].[Revenue Per Display Request] AS
IIF ([Measures].[Display Ads] > 0, [Measures].[Display Revenue] / [Measures].[Display Ads], NULL),
FORMAT_STRING = "$#,##0.000000;($#,##0.000000)",
VISIBLE = 1 ,  DISPLAY_FOLDER = 'Display' ,  ASSOCIATED_MEASURE_GROUP = '01 - Daily - Fact Revenue';


SCOPE([Measures].[Modeled Video Revenue]);
    THIS = [Measures].[Video Ads] * ([Measures].[Revenue Per Video Request], ROOT([Dim Domain]), ROOT([Dim Content]));
    FORMAT_STRING(THIS) = "$#,##0.00;($#,##0.00)";
END SCOPE;
SCOPE([Measures].[Modeled Display Revenue]);
    THIS = [Measures].[Display Ads] * ([Measures].[Revenue Per Display Request], ROOT([Dim Domain]), ROOT([Dim Content]));
    FORMAT_STRING(THIS) = "$#,##0.00;($#,##0.00)";
END SCOPE;
SCOPE([Measures].[Modeled Revenue]);
    THIS = [Measures].[Modeled Video Revenue] + [Measures].[Modeled Display Revenue];
    FORMAT_STRING(THIS) = "$#,##0.00;($#,##0.00)";
END SCOPE;



Всё летает по щелчку мышки. Получается сейчас он рассчитывает только для того что есть в таблице фактов в зависимости от контекста.
...
Рейтинг: 0 / 0
20.03.2018, 18:53
    #39617763
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
рассчеты в scoped assignment
churupahaAndy_OLAP,

таоке ощущение, что примеры выше обрабатываются движком так: строится произведение множеств значений атрибутов (полное, даже то, чего нет в таблицах фактов) и оно вычисляет для всех
Для scope поверх scope так и есть.
churupahaВсё летает по щелчку мышки. Получается сейчас он рассчитывает только для того что есть в таблице фактов в зависимости от контекста.
В лучших традициях мудрого еврея из Лениграда Моши Пасуманского. Поздравляю, коллега, Вы стали гуру оптимизации :)
Таки кроме шуток - здорово, что смогли переписать просто и наглядно. За это Вам спасибо скажут те, кто придет Вам на смену в этом проекте через пару-тройку лет.
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / рассчеты в scoped assignment / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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