Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / AS2K. Можно ли упростить выражение? Торможу. / 11 сообщений из 11, страница 1 из 1
06.01.2006, 20:06
    #33470815
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AS2K. Можно ли упростить выражение? Торможу.
Код: plaintext
1.
2.
3.
Sum(PeriodsToDate([YMD].[Year],[YMD].CurrentMember), [Measures].[A]) * 
Sum(PeriodsToDate([YMD].[Year],[YMD].CurrentMember), [Measures].[C]) / 
Sum(PeriodsToDate([YMD].[Year],[YMD].CurrentMember), [Measures].[B]*[Measures].[C]) * 

Правильно ли я думаю, что в общем виде это не подлежит упрощению?
...
Рейтинг: 0 / 0
06.01.2006, 22:19
    #33470901
Беляев
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AS2K. Можно ли упростить выражение? Торможу.
Ну если у тебя нет [Measures], которые были бы const от [YMD] - то упростить нельзя
Можно только заменить конструкцию вида PeriodsToDate([YMD].[Year],[YMD].CurrentMember) на YTD() если [YMD] единственное измерение типа time или на конструкцию вида YTD([YMD]), если есть другие time dimensions

Владислав Беляев
...
Рейтинг: 0 / 0
06.01.2006, 23:30
    #33470942
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AS2K. Можно ли упростить выражение? Торможу.
БеляевНу если у тебя нет [Measures], которые были бы const от [YMD] - то упростить нельзя
Можно только заменить конструкцию вида PeriodsToDate([YMD].[Year],[YMD].CurrentMember) на YTD() если [YMD] единственное измерение типа time или на конструкцию вида YTD([YMD]), если есть другие time dimensions

Владислав Беляев

спасибо.

как же "нет"... есть, аж 3 штуки. поэтому реалный CM содержит еще 3-жды вложенный iif(), чтобы определить на какой временной иерархии находимся.
...
Рейтинг: 0 / 0
06.01.2006, 23:37
    #33470949
Mosha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AS2K. Можно ли упростить выражение? Торможу.
backfireпоэтому реалный CM содержит еще 3-жды вложенный iif(), чтобы определить на какой временной иерархии находимся
А что значит "определить на какой временной иерархии находимся" ? Можно привести пример этого IIF ?

Беляевзаменить конструкцию вида PeriodsToDate([YMD].[Year],[YMD].CurrentMember) на YTD()
Это реально ничего не дает, только мешает немножко, т.к. AS должен каждый раз сам искать нужную иерархию.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
06.01.2006, 23:57
    #33470960
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AS2K. Можно ли упростить выражение? Торможу.
Mosha backfireпоэтому реалный CM содержит еще 3-жды вложенный iif(), чтобы определить на какой временной иерархии находимся
А что значит "определить на какой временной иерархии находимся" ? Можно привести пример этого IIF ?

Код: 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.
iif (([YMD].CurrentMember.Level.ordinal <>  0  AND [FYMD].CurrentMember.Level.ordinal =  0  AND [YWD].CurrentMember.Level.ordinal =  0 ),
-- Calender Year
iif(

Sum(PeriodsToDate([YMD].[Year],[YMD].CurrentMember), [Measures].[C]) <>  0 , 

 100  * 
Sum(PeriodsToDate([YWD].[Year],[YWD].CurrentMember), [Measures].[A]) * 
Sum(PeriodsToDate([YWD].[Year],[YWD].CurrentMember), [Measures].) / 
Sum(PeriodsToDate([YWD].[Year],[YWD].CurrentMember), [Measures].[C]),

null)
,
iif (([FYMD].CurrentMember.Level.ordinal <>  [b]0  AND [YMD].CurrentMember.Level.ordinal =  0   AND [YWD].CurrentMember.Level.ordinal =  0 ),
-- Fiscal Year
iif(

Sum(PeriodsToDate([FYMD].[Year],[FYMD].CurrentMember), [Measures].[C]) <>  0 , 

 100  * 
Sum(PeriodsToDate([YWD].[Year],[YWD].CurrentMember), [Measures].[A]) * 
Sum(PeriodsToDate([YWD].[Year],[YWD].CurrentMember), [Measures].) / 
Sum(PeriodsToDate([YWD].[Year],[YWD].CurrentMember), [Measures].[C]),

null)
,
-- Calender Week
iif (([YWD].CurrentMember.Level.ordinal <>  [b]0  AND [YMD].CurrentMember.Level.ordinal =  0   AND [FYMD].CurrentMember.Level.ordinal =  0 ),
iif(

Sum(PeriodsToDate([YWD].[Year],[YMD].CurrentMember), [Measures].[C]) <>  0 , 

 100  * 
Sum(PeriodsToDate([YWD].[Year],[YWD].CurrentMember), [Measures].[A]) * 
Sum(PeriodsToDate([YWD].[Year],[YWD].CurrentMember), [Measures].[B]) / 
Sum(PeriodsToDate([YWD].[Year],[YWD].CurrentMember), [Measures].[C]),

null)
,
null)))

А как бы Вы это написали?

А что Вы подразумеваете под MoshaAS должен каждый раз сам искать нужную иерархию. ?
...
Рейтинг: 0 / 0
07.01.2006, 16:12
    #33471270
Беляев
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AS2K. Можно ли упростить выражение? Торможу.
Mosha
Беляевзаменить конструкцию вида PeriodsToDate([YMD].[Year],[YMD].CurrentMember) на YTD()
Это реально ничего не дает, только мешает немножко, т.к. AS должен каждый раз сам искать нужную иерархию.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights

Красота записи формулы тоже Вещь нужная и за нее тоже надо платить - производительностью. Хотя думаю, что backfire именно с точки зрения производительности спрашивал.

Владислав Беляев
...
Рейтинг: 0 / 0
07.01.2006, 16:46
    #33471305
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AS2K. Можно ли упростить выражение? Торможу.
Хотя думаю, что backfire именно с точки зрения производительности спрашивал.

Правильно думаете.
...
Рейтинг: 0 / 0
08.01.2006, 01:30
    #33471562
Mosha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AS2K. Можно ли упростить выражение? Торможу.
БеляевКрасота записи формулы тоже Вещь нужная и за нее тоже надо платить - производительностью
Совершенно согласен. К счастью в случае замены PeriodsToDate на YTD потери производительности реально конечно нет. Просто потеря пары инструкций на то чтобы найти иерархии Time т.к. она explicitly не указана.

backfireА как бы Вы это написали?
Улучшить производительность здесь можно многими способами - начиная от common subexpression elimination и продолжая убиранием IIF's. Но сначала у меня такой вопрос: Я так понимаю что у Вас там просто опечатка, и выражения пользуются не только YWD но и другими иерархиями. В таком случае скорее всего Вы не делали уровня All ни в одной из этих иерархий, иначе работать это правильно не будет т.к. условие
Код: plaintext
[YWD].CurrentMember.Level.ordinal <>  0  AND [YMD].CurrentMember.Level.ordinal =  0 
никогда не будет выполняться. А как насчет FYMD ? Какие атрибуты используются в ней ? А заодно какие все атрибуты в измерении и какие у них relationships.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
08.01.2006, 12:32
    #33471707
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AS2K. Можно ли упростить выражение? Торможу.
Моша, я исправил очепятки. Должно выглядеть так.

Код: 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.
iif (([YMD].CurrentMember.Level.ordinal <>  0  AND [FYMD].CurrentMember.Level.ordinal =  0  AND [YWD].CurrentMember.Level.ordinal =  0 ),
-- Calender Year
iif(

Sum(PeriodsToDate([YMD].[Year],[YMD].CurrentMember), [Measures].[C]) <>  0 , 

 100  * 
Sum(PeriodsToDate([YMD].[Year],[YMD].CurrentMember), [Measures].[A]) * 
Sum(PeriodsToDate([YMD].[Year],[YMD].CurrentMember), [Measures].) / 
Sum(PeriodsToDate([YMD].[Year],[YMD].CurrentMember), [Measures].[C]),

null)
,
iif (([FYMD].CurrentMember.Level.ordinal <>  [b]0  AND [YMD].CurrentMember.Level.ordinal =  0   AND [YWD].CurrentMember.Level.ordinal =  0 ),
-- Fiscal Year
iif(

Sum(PeriodsToDate([FYMD].[Year],[FYMD].CurrentMember), [Measures].[C]) <>  0 , 

 100  * 
Sum(PeriodsToDate([FYMD].[Year],[FYMD].CurrentMember), [Measures].[A]) * 
Sum(PeriodsToDate([FYMD].[Year],[FYMD].CurrentMember), [Measures].) / 
Sum(PeriodsToDate([FYMD].[Year],[FYMD].CurrentMember), [Measures].[C]),

null)
,
-- Calender Week
iif (([YWD].CurrentMember.Level.ordinal <>  [b]0  AND [YMD].CurrentMember.Level.ordinal =  0   AND [FYMD].CurrentMember.Level.ordinal =  0 ),
iif(

Sum(PeriodsToDate([YWD].[Year],[YWD].CurrentMember), [Measures].[C]) <>  0 , 

 100  * 
Sum(PeriodsToDate([YWD].[Year],[YWD].CurrentMember), [Measures].[A]) * 
Sum(PeriodsToDate([YWD].[Year],[YWD].CurrentMember), [Measures].[B]) / 
Sum(PeriodsToDate([YWD].[Year],[YWD].CurrentMember), [Measures].[C]),

null)
,
null)))


У всех измерений YMD, YWD, FYMD есть all level.

Эта формула из AS2000, поэтому говорить о реляциях между аттрибутами еще рано. Есть 3 имерения времени, потроенные на одной и той же таблице. Поэтому в AS2005 3 ихмерения становятся 3-мя иерархиями.

Таблица содержит следующие аттрибуты.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Create Table Dim_Time (
DATE_ID smalldatetime not null primary_key,
CY int,
FY int,
CW int, --(год в иерархии YWD. потому как 1.1.2006 принадлежит последней неделе 2005 года)
CM int,
FM int,
WEEK int,
DAY_of_MONTH int,
DAY_of _WEEK int
)

MoshaУлучшить производительность здесь можно многими способами - начиная от common subexpression elimination и продолжая убиранием IIF's.

Давайте четко разделять, что можно сделать в AS2000 и что можно только в AS2005, дабы не приходилось домысливать.

начиная от common subexpression elimination и продолжая убиранием IIF'

Если Вас не затруднит, пожалуйста, сопроводите это примером.
...
Рейтинг: 0 / 0
09.01.2006, 21:38
    #33473034
Mosha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AS2K. Можно ли упростить выражение? Торможу.
Из AS2000 особо сильных улучшений производительности не выжать, я почему то думал что это уже на AS2005. Пожалуй единственное что может принести здесь измеряемую разницу, так это убрать пересчет одного и того же выражения два раза. А именно создать невидимые calculated measures вида

Код: plaintext
RSumCYMD AS 'Sum(PeriodsToDate([YMD].[Year],[YMD].CurrentMember), [Measures].[C])' 
и т.д. и потом использовать их внутри

iif(
Measures.RSumCYMD <> 0,
100 *
Sum(PeriodsToDate([YWD].[Year],[YWD].CurrentMember), [Measures].[A]) *
Sum(PeriodsToDate([YWD].[Year],[YWD].CurrentMember), [Measures]. ) /
Measures.RSumCYMD,
null)


Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
09.01.2006, 22:12
    #33473060
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AS2K. Можно ли упростить выражение? Торможу.
Спасибо.

Moshaя почему то думал что это уже на AS2005.

Я тоже так думал и хотел, что мол, все, большой привет Шилону от Юкона в виде Polar Fox, но жизнь диктует свои условия,

так что не одни Вы "делаете в Юконе локальные кубы и DSO доступ к untouched мигрированным кубам.
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / AS2K. Можно ли упростить выражение? Торможу. / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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