Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 SSAS Script Оптимизация  [new]
Беляев
Member

Откуда:
Сообщений: 574
Что быстрее
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]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
Владимир Штепа
Member

Откуда: Hannover
Сообщений: 5943
Если SSAS написан грамотно, то 2-й вариант должен быть на волосок быстрее.

А как оно на практике будет - надо на реальной базе и формулах проверять.
16 сен 08, 02:29    [6188287]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
Mosha
Member

Откуда:
Сообщений: 1272
Оба варианта одинаково плохи.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
16 сен 08, 07:09    [6188365]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
Беляев
Member

Откуда:
Сообщений: 574
Mosha
Оба варианта одинаково плохи.


???

Как быть, если надо модифицировать значение и FORMAT_STRING

Владислав Беляев
16 сен 08, 07:37    [6188385]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
Mosha
Member

Откуда:
Сообщений: 1272
Какое у Вас "условие от [Measure].CurrentMember" ?

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
16 сен 08, 08:04    [6188401]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
Беляев
Member

Откуда:
Сообщений: 574
Самое простое условие
[Measure].CurrentMember>=1

Владислав Беляев
16 сен 08, 08:41    [6188445]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
Mosha
Member

Откуда:
Сообщений: 1272
Ещё хуже :( Может быть Вы можете озвучить всю задачу целиком ?

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
16 сен 08, 08:48    [6188456]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
Беляев
Member

Откуда:
Сообщений: 574
Хочу выдать пользователю длительность в днях, часах, минутах и секундах

Формата для этого нет, поэтому делаю так для длительности меньше 1 дня ставлю формат 'hh:mm:ss' для длительности больше дня формирую дату 01.01.1900 и выдаю формат 'd hh:mm:ss'

Владислав Беляев
16 сен 08, 09:05    [6188492]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
Беляев
Member

Откуда:
Сообщений: 574
И еще вопрос как лучше в SCOPE реализовать что-то типа
IF not условие THEN
    THIS=null
END IF;
IF условие THEN
    THIS=value
END IF;

или
    THIS=IIF(условие,value,null)

Владислав Беляев
16 сен 08, 09:28    [6188536]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
Владимир Штепа
Member

Откуда: Hannover
Сообщений: 5943
Беляев
Хочу выдать пользователю длительность в днях, часах, минутах и секундах

Формата для этого нет, поэтому делаю так для длительности меньше 1 дня ставлю формат 'hh:mm:ss' для длительности больше дня формирую дату 01.01.1900 и выдаю формат 'd hh:mm:ss'

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

А если количество дней больше 31?
16 сен 08, 09:35    [6188555]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
Владимир Штепа
Member

Откуда: Hannover
Сообщений: 5943
Моша, большое вам спасибо, что вы открыли "еще один секрет", о возможности написания нетривиальных выражений в Format_String.

А где еще что можно?
16 сен 08, 11:28    [6189150]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
Беляев
Member

Откуда:
Сообщений: 574
Моша, большое спасибо Вы раскрыли очень интересную функциональность, я про нее не знал

А если использовать CALCULATED CELL будет также работать как CM или будет также плохо как SCOPE?
SCOPE используется у меня потому, чтобы контекст легче определять
У меня такое форматирование должно быть на нескольких мерах, если использовать CM придется писать сложный IIF

Владислав Беляев
16 сен 08, 13:36    [6190178]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
Mosha
Member

Откуда:
Сообщений: 1272
Я не думал что это "секрет". Собственно и в документации по MDX и в BNF всегда было написано что можно использовать "scalar expressions" для calculation properties. И примеров этому достаточно много, например в моей книге "Fast Track to MDX" целая глава посвящена тому как ставить нетривиальные MDX выражения для BACK_COLOR.

Беляев
А если использовать CALCULATED CELL будет также работать как CM или будет также плохо как SCOPE?

У 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]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
Mosha
Member

Откуда:
Сообщений: 1272
Беляев
У меня такое форматирование должно быть на нескольких мерах, если использовать CM придется писать сложный IIF

Предлагаю сделать так:

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]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
Беляев
Member

Откуда:
Сообщений: 574
Спасибо, большое
Я написал точно такую же формулу
Теперь-то я про форматирование знаю на порядок больше, благодаря Вам, Моша!!!

Владислав Беляев
17 сен 08, 06:59    [6193376]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
mishgan1
Member

Откуда:
Сообщений: 370
Вопросик по FORMAT_STRING. Есть SCOPE

SCOPE ([Дата].[Календарное время].[Прирост]);


[Дата].[Календарное время].[Прирост]=(Месяц1-Месяц2)/Месяц2

FORMAT_STRING([Дата].[Календарное время].[Прирост]) = "Percent";

END SCOPE;

Format_string не работает. Остается формат Меры, которую выводим. В чем ошибка ?
20 ноя 08, 10:09    [6464627]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
mishgan1
Member

Откуда:
Сообщений: 370
Вопрос снят. Разобрался -))
20 ноя 08, 10:21    [6464680]     Ответить | Цитировать Сообщить модератору
 Re: SSAS Script Оптимизация  [new]
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 Ответить