powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / AS2K. Можно ли упростить выражение? Торможу.
11 сообщений из 11, страница 1 из 1
AS2K. Можно ли упростить выражение? Торможу.
    #33470815
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
AS2K. Можно ли упростить выражение? Торможу.
    #33470901
Беляев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну если у тебя нет [Measures], которые были бы const от [YMD] - то упростить нельзя
Можно только заменить конструкцию вида PeriodsToDate([YMD].[Year],[YMD].CurrentMember) на YTD() если [YMD] единственное измерение типа time или на конструкцию вида YTD([YMD]), если есть другие time dimensions

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

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

спасибо.

как же "нет"... есть, аж 3 штуки. поэтому реалный CM содержит еще 3-жды вложенный iif(), чтобы определить на какой временной иерархии находимся.
...
Рейтинг: 0 / 0
AS2K. Можно ли упростить выражение? Торможу.
    #33470949
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
AS2K. Можно ли упростить выражение? Торможу.
    #33470960
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
AS2K. Можно ли упростить выражение? Торможу.
    #33471270
Беляев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mosha
Беляевзаменить конструкцию вида PeriodsToDate([YMD].[Year],[YMD].CurrentMember) на YTD()
Это реально ничего не дает, только мешает немножко, т.к. AS должен каждый раз сам искать нужную иерархию.

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

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

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

Правильно думаете.
...
Рейтинг: 0 / 0
AS2K. Можно ли упростить выражение? Торможу.
    #33471562
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БеляевКрасота записи формулы тоже Вещь нужная и за нее тоже надо платить - производительностью
Совершенно согласен. К счастью в случае замены 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
AS2K. Можно ли упростить выражение? Торможу.
    #33471707
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моша, я исправил очепятки. Должно выглядеть так.

Код: 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
AS2K. Можно ли упростить выражение? Торможу.
    #33473034
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из 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
AS2K. Можно ли упростить выражение? Торможу.
    #33473060
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.

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

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

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


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