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

Откуда: Москва
Сообщений: 781
Hello world!
В кубе есть вычислимая мера:
CREATE MEMBER CURRENTCUBE.[Measures].[Поступления. Тек Ц5, р]
 AS sum ([Counteragent].[Сторон Пост].&[СторонПост], [Measures].[Cost In Current P5  Receipt]), 
FORMAT_STRING = "#,##;-#,##", 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Receipt';  
Подскжите почему для всех членов иерархии [Counteragent].[Сторон Пост], запрос возвращает одно и тоже значение?
SELECT NON EMPTY {[Counteragent].[Сторон Пост].[Сторон Пост]} ON COLUMNS  
FROM	[Cube] 
WHERE ([Sale Date].[Calendar].[Year].&[2017],[Measures].[Поступления. Тек Ц5, р]) 
СторонПост ЦО ЦО ТД
8 939 666 081 8 939 666 081 8 939 666 081


Ожидал, что для "ЦО" и "ЦО ТД" получить 0
16 май 18, 17:07    [21414357]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. Calculation  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 781
Вот еще скрин аналогичного отчета из EXCEL

К сообщению приложен файл. Размер - 39Kb
16 май 18, 17:08    [21414363]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. Calculation  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33390
Блог
вероятно, группа мер не связана с измерением
16 май 18, 17:33    [21414436]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. Calculation  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 781
Критик,
Связь есть, так как по другим атрибутам этого же измерения [Counteragent] такой поблемы нет.
Вот скрин физической меры

К сообщению приложен файл. Размер - 12Kb
16 май 18, 17:43    [21414471]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. Calculation  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 781
И скрин связи

К сообщению приложен файл. Размер - 92Kb
16 май 18, 17:43    [21414473]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. Calculation  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 781
Детализация до контрагента выглядит так

К сообщению приложен файл. Размер - 66Kb
16 май 18, 17:49    [21414493]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. Calculation  [new]
Andy_OLAP
Member

Откуда: я знаю, что Зенит - чемпион
Сообщений: 2199
Yagrus2
Hello world!
В кубе есть вычислимая мера:
CREATE MEMBER CURRENTCUBE.[Measures].[Поступления. Тек Ц5, р]
 AS sum ([Counteragent].[Сторон Пост].&[СторонПост], [Measures].[Cost In Current P5  Receipt]), 
FORMAT_STRING = "#,##;-#,##", 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Receipt';  
Подскжите почему для всех членов иерархии [Counteragent].[Сторон Пост], запрос возвращает одно и тоже значение?
SELECT NON EMPTY {[Counteragent].[Сторон Пост].[Сторон Пост]} ON COLUMNS  
FROM	[Cube] 
WHERE ([Sale Date].[Calendar].[Year].&[2017],[Measures].[Поступления. Тек Ц5, р]) 
СторонПост ЦО ЦО ТД
8 939 666 081 8 939 666 081 8 939 666 081


Ожидал, что для "ЦО" и "ЦО ТД" получить 0


Никогда так не делайте. Никогда не пишите в кубе формулу, которая явно зависит от наличия в измерении определенного элемента. Завтра ProcessUpdate удалит элемент или по правам доступа кто-нибудь снимет галочку для него - и куб для определенных пользователей "сломается"...
CREATE STATIC SET CURRENTCUBE.[SET_СторонПост]
AS iif(IsError(StrToMember("[Counteragent].[Сторон Пост].&[СторонПост]"))
,{},{
[Counteragent].[Сторон Пост].&[СторонПост]
-- иначе может так получиться, что в роли доступа OLAP к именно этому элементу измерения доступа нет
-- и тогда формулы куба тут же в сессии такого несчастного и обделенного вниманием пользователя
-- тут же сломаются, а так хотя бы пустой набор будет получаться
});                 


CREATE MEMBER CURRENTCUBE.[Measures].[Поступления. Тек Ц5, р]
 AS 
iif(
intersect([Counteragent].[Сторон Пост].CurrentMember,[SET_СторонПост]).count>0
-- тут очевидно мультиселект
or [Counteragent].[Сторон Пост].CurrentMember is [Counteragent].[Сторон Пост].[All]
-- уровень ВСЕ считается кошерным по определению
sum ([Counteragent].[Сторон Пост].&[СторонПост], [Measures].[Cost In Current P5  Receipt]), 
null), -- а иначе прячем в пустоту
FORMAT_STRING = "#,##;-#,##", 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Receipt'; 
16 май 18, 17:50    [21414495]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. Calculation  [new]
Andy_OLAP
Member

Откуда: я знаю, что Зенит - чемпион
Сообщений: 2199
Yagrus2,

И это еще не все.
У Вас - если посмотреть на привязку измерения к группе мер - ключевой атрибут вовсе не [Counteragent].[Сторон Пост].CurrentMember, а [Counteragent].[Counteragent].CurrentMember.

Это означает следующее - Вам нужно собирать по набору из ключевых, но таких, где свойство "Сторон Пост" = "СторонПост", а не что-либо другое.
Более того - как только в этот атрибут для элементов измерения пойдет со стороны DSV не "СторонПост", а "Стороннее Поступление" - так сразу формула в кубе сломается.
Поэтому делать нужно так - во view для измерения по такому атрибуту добавлять key и name столбцы, в key заносить 0,1,2, в name заносить "некошерное", "Стороннее Поступление", "Внутреннее Поступление", а в формулах писать не [Counteragent].[Сторон Пост].&[СторонПост], а [Counteragent].[Сторон Пост].&[1].

Я таки думаю, что достаточно наглядно изложил...
16 май 18, 18:20    [21414596]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. Calculation  [new]
vikkiv
Member

Откуда: London
Сообщений: 1442
Yagrus2,

Т.е. ты жестко назначил на меру какой-то элемент из атрибута и ожидаешь что при оценке на других элементах значение будет другим?
Добавь логику is в iif или пускай считает через exists() если нужна смена контекста.
16 май 18, 22:36    [21414985]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. Calculation  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 781
Andy_OLAP,
Понял про что вы.
Спасибо за полезные советы!
Будем их учитывать.
17 май 18, 10:45    [21416092]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. Calculation  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 781
vikkiv
Yagrus2,

Т.е. ты жестко назначил на меру какой-то элемент из атрибута и ожидаешь что при оценке на других элементах значение будет другим?

То есть находясь в контексте [Counteragent].[Сторон Пост].&[ЦО] SSAS переводит контекст на [Counteragent].[Сторон Пост].&[СторонПост]?

Но почему если сформировать отчет в разрезе [Сторон Пост], [Контрагент] вычислимая мера [Measures].[Поступления. Тек Ц5, р] дает (null)?

К сообщению приложен файл. Размер - 24Kb
17 май 18, 11:02    [21416179]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. Calculation  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 781
Хотел еще добавить, что в посте выше {null} получается для тех контрагентов у которых [СторонПост] равен ЦО или ЦО ТД
17 май 18, 12:51    [21416697]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. Calculation  [new]
vikkiv
Member

Откуда: London
Сообщений: 1442
Yagrus2,

элемент расчётный, там где одинаково - привязка работает на одном уровне (атрибуте) между всеми элементами.
на более детальной гранулярности - идёт оценка в контексте привязки, для родного уровня контекст существует, для других - нет (т.е. для этого parent-элемента нет таких children), поэтому и null.
17 май 18, 23:35    [21418991]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. Calculation  [new]
Ferdipux
Member

Откуда: Москва
Сообщений: 447
Andy_OLAP
...
CREATE MEMBER CURRENTCUBE.[Measures].[Поступления. Тек Ц5, р]
 AS 
iif(
intersect([Counteragent].[Сторон Пост].CurrentMember,[SET_СторонПост]).count>0
-- тут очевидно мультиселект
or [Counteragent].[Сторон Пост].CurrentMember is [Counteragent].[Сторон Пост].[All]
-- уровень ВСЕ считается кошерным по определению
sum ([Counteragent].[Сторон Пост].&[СторонПост], [Measures].[Cost In Current P5  Receipt]), 
null), -- а иначе прячем в пустоту
FORMAT_STRING = "#,##;-#,##", 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Receipt'; 

А конструкцию
iif(
intersect([Counteragent].[Сторон Пост].CurrentMember,[SET_СторонПост]).count>0

вы делаете именно для обработки multiselect?
Я подобные ситуации обрабатывал через SCOPE на вычислимой мере, который объявляется на [Counteragent].[Сторон Пост].[Сторон Пост] (для данного примера). ИМХО SCOPE немножко быстрее, так как условный обсчет идет только в некоторых случаях, а не во всех.
18 май 18, 08:08    [21419320]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. Calculation  [new]
Andy_OLAP
Member

Откуда: я знаю, что Зенит - чемпион
Сообщений: 2199
Ferdipux
Andy_OLAP
...
CREATE MEMBER CURRENTCUBE.[Measures].[Поступления. Тек Ц5, р]
 AS 
iif(
intersect([Counteragent].[Сторон Пост].CurrentMember,[SET_СторонПост]).count>0
-- тут очевидно мультиселект
or [Counteragent].[Сторон Пост].CurrentMember is [Counteragent].[Сторон Пост].[All]
-- уровень ВСЕ считается кошерным по определению
sum ([Counteragent].[Сторон Пост].&[СторонПост], [Measures].[Cost In Current P5  Receipt]), 
null), -- а иначе прячем в пустоту
FORMAT_STRING = "#,##;-#,##", 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Receipt'; 

А конструкцию
iif(
intersect([Counteragent].[Сторон Пост].CurrentMember,[SET_СторонПост]).count>0

вы делаете именно для обработки multiselect?
Я подобные ситуации обрабатывал через SCOPE на вычислимой мере, который объявляется на [Counteragent].[Сторон Пост].[Сторон Пост] (для данного примера). ИМХО SCOPE немножко быстрее, так как условный обсчет идет только в некоторых случаях, а не во всех.


Смысл в следующей. Есть set из 2-3 элементов или вариантов атрибута из тысячи. В строки/столбцы клиент кидает тысячу вариантов и отбирает галочками 500 вариантов.
Вот чтобы непустыми отображались только 2-3 и общий итог - всегда делается ОДНОТИПНО формула intesect. И потом уже не важно, чуть быстрее, чуть медленнее, когда расширяемо.

Я бы назвал это ленинградской инженерной школой...
18 май 18, 14:15    [21420358]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить