| Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
| Все форумы / OLAP и DWH |
![]() |
||
|
Беляев Member Откуда: Сообщений: 569 |
Что быстрее
SCOPE()
IF условие от [Measure].CurrentMember THEN
THIS=value
END IF;
IF [Measure].CurrentMember=value THEN
FORMAT_STRING(THIS)='hh:mm:ss'
END IF;
END SCOPE;
или
SCOPE()
IF условие от [Measure].CurrentMember THEN
THIS=value
END IF;
END SCOPE;
SCOPE()
IF [Measure].CurrentMember=value THEN
FORMAT_STRING(THIS)='hh:mm:ss'
END IF;
END SCOPE;
Владислав Беляев |
| 15 сен 08, 10:58 [6184198] Ответить | Цитировать Сообщить модератору | |
|
Владимир Штепа Member Откуда: Hannover Сообщений: 5929 |
Если SSAS написан грамотно, то 2-й вариант должен быть на волосок быстрее. А как оно на практике будет - надо на реальной базе и формулах проверять. |
| 16 сен 08, 02:29 [6188287] Ответить | Цитировать Сообщить модератору | |
|
Mosha Member Откуда: Сообщений: 1272 |
Оба варианта одинаково плохи. Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights |
| 16 сен 08, 07:09 [6188365] Ответить | Цитировать Сообщить модератору | |
|
Беляев Member Откуда: Сообщений: 569 |
??? Как быть, если надо модифицировать значение и FORMAT_STRING Владислав Беляев |
||
| 16 сен 08, 07:37 [6188385] Ответить | Цитировать Сообщить модератору | |||
|
Mosha Member Откуда: Сообщений: 1272 |
Какое у Вас "условие от [Measure].CurrentMember" ? Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights |
| 16 сен 08, 08:04 [6188401] Ответить | Цитировать Сообщить модератору | |
|
Беляев Member Откуда: Сообщений: 569 |
Самое простое условие [Measure].CurrentMember>=1 Владислав Беляев |
| 16 сен 08, 08:41 [6188445] Ответить | Цитировать Сообщить модератору | |
|
Mosha Member Откуда: Сообщений: 1272 |
Ещё хуже :( Может быть Вы можете озвучить всю задачу целиком ? Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights |
| 16 сен 08, 08:48 [6188456] Ответить | Цитировать Сообщить модератору | |
|
Беляев Member Откуда: Сообщений: 569 |
Хочу выдать пользователю длительность в днях, часах, минутах и секундах Формата для этого нет, поэтому делаю так для длительности меньше 1 дня ставлю формат 'hh:mm:ss' для длительности больше дня формирую дату 01.01.1900 и выдаю формат 'd hh:mm:ss' Владислав Беляев |
| 16 сен 08, 09:05 [6188492] Ответить | Цитировать Сообщить модератору | |
|
Беляев Member Откуда: Сообщений: 569 |
И еще вопрос как лучше в SCOPE реализовать что-то типа
IF not условие THEN
THIS=null
END IF;
IF условие THEN
THIS=value
END IF;
или
THIS=IIF(условие,value,null)
Владислав Беляев |
| 16 сен 08, 09:28 [6188536] Ответить | Цитировать Сообщить модератору | |
|
Владимир Штепа Member Откуда: Hannover Сообщений: 5929 |
А если количество дней больше 31? |
||
| 16 сен 08, 09:35 [6188555] Ответить | Цитировать Сообщить модератору | |||
|
Mosha Member Откуда: Сообщений: 1272 |
Предлагаю такое решение:CREATE MEMBER Delta = ..., FORMAT_STRING = '"' + cstr(int(Delta)) + ' days" hh:mm:ss' А если не хочется писать "0 days", то можно прибегнуть к помощи ";" внутри строки форматирования. Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights |
| 16 сен 08, 10:12 [6188689] Ответить | Цитировать Сообщить модератору | |
|
Mosha Member Откуда: Сообщений: 1272 |
...или по простомуCREATE MEMBER Delta = ..., FORMAT_STRING = IIF(Delta < 1, 'hh:mm:ss', '"' + cstr(int(Delta)) + ' days" hh:mm:ss') И будет работать если Delta > 31 тоже. Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights |
| 16 сен 08, 10:15 [6188704] Ответить | Цитировать Сообщить модератору | |
|
Владимир Штепа Member Откуда: Hannover Сообщений: 5929 |
Моша, большое вам спасибо, что вы открыли "еще один секрет", о возможности написания нетривиальных выражений в Format_String. А где еще что можно? |
| 16 сен 08, 11:28 [6189150] Ответить | Цитировать Сообщить модератору | |
|
Беляев Member Откуда: Сообщений: 569 |
Моша, большое спасибо Вы раскрыли очень интересную функциональность, я про нее не знал А если использовать CALCULATED CELL будет также работать как CM или будет также плохо как SCOPE? SCOPE используется у меня потому, чтобы контекст легче определять У меня такое форматирование должно быть на нескольких мерах, если использовать CM придется писать сложный IIF Владислав Беляев |
| 16 сен 08, 13:36 [6190178] Ответить | Цитировать Сообщить модератору | |
|
Mosha Member Откуда: Сообщений: 1272 |
Я не думал что это "секрет". Собственно и в документации по MDX и в BNF всегда было написано что можно использовать "scalar expressions" для calculation properties. И примеров этому достаточно много, например в моей книге "Fast Track to MDX" целая глава посвящена тому как ставить нетривиальные MDX выражения для BACK_COLOR.
У SCOPE никаких проблем нет. Проблема в Вашем решении была в использовании IF statement и в том что Вы меняли значение самого measure value а не только его format_string. Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights |
||
| 16 сен 08, 20:30 [6192701] Ответить | Цитировать Сообщить модератору | |||
|
Mosha Member Откуда: Сообщений: 1272 |
Предлагаю сделать так: SCOPE ({[Measures].[M1], [Measures].[M2], [Measures].[M3], ..., [Measures].[MN]});
FORMAT_STRING(THIS) = IIF(Measures.CurrentMember < 1, 'hh:mm:ss', '"' + cstr(int(Measures.CurrentMember)) + ' days" hh:mm:ss');
END SCOPE;Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights |
||
| 16 сен 08, 21:54 [6192910] Ответить | Цитировать Сообщить модератору | |||
|
Беляев Member Откуда: Сообщений: 569 |
Спасибо, большое Я написал точно такую же формулу Теперь-то я про форматирование знаю на порядок больше, благодаря Вам, Моша!!! Владислав Беляев |
| 17 сен 08, 06:59 [6193376] Ответить | Цитировать Сообщить модератору | |
|
mishgan1 Member Откуда: Сообщений: 356 |
Вопросик по FORMAT_STRING. Есть SCOPE SCOPE ([Дата].[Календарное время].[Прирост]); [Дата].[Календарное время].[Прирост]=(Месяц1-Месяц2)/Месяц2 FORMAT_STRING([Дата].[Календарное время].[Прирост]) = "Percent"; END SCOPE; Format_string не работает. Остается формат Меры, которую выводим. В чем ошибка ? |
| 20 ноя 08, 10:09 [6464627] Ответить | Цитировать Сообщить модератору | |
|
mishgan1 Member Откуда: Сообщений: 356 |
Вопрос снят. Разобрался -)) |
| 20 ноя 08, 10:21 [6464680] Ответить | Цитировать Сообщить модератору | |
|
blackcatworld Member Откуда: Сообщений: 1 |
Здравствуйте. Возникла такая ситуация : Определили калькуляберный мембер; необходимо, чтобы его значение форматировалось согласно FORMAT_STRING текущей метрики предположим, что [Measures].[M1] - FORMAT_STRING = "#.0" [Measures].[M2] - FORMAT_STRING = "Percent" [Measures].[M3] - FORMAT_STRING = "currency" тогда, например WITH SET [Some Measures] AS '{[Measures].[M1], [Measures].[M2], [Measures].[M3]}' MEMBER [DIM1].[A] AS '1 + 1' SELECT [Some Measures] ON COLUMNS, {[DIM1].[A]} ON ROWS FROM SOME_CUBE вернёт 3 значения "2", а неоходимо "2.0", "200%", "$2" приходит на ум только проверять метрику в IIF в FORMAT_STRING или определении самого мембера, например: FORMAT_STRING = IIF ( [Measures].CurrentMember is [Measures].[M1], '#.0', 'Percent' ) Можно ли решить задачу без перечеслений? Спасибо |
| 20 ноя 08, 19:31 [6468583] Ответить | Цитировать Сообщить модератору | |
| Все форумы / OLAP и DWH | ![]() |
|