Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / SSAS 2012. Calculation / 15 сообщений из 15, страница 1 из 1
16.05.2018, 17:07
    #39645676
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSAS 2012. Calculation
Hello world!
В кубе есть вычислимая мера:
Код: sql
1.
2.
3.
4.
CREATE MEMBER CURRENTCUBE.[Measures].[Поступления. Тек Ц5, р]
 AS sum ([Counteragent].[Сторон Пост].&[СторонПост], [Measures].[Cost In Current P5  Receipt]), 
FORMAT_STRING = "#,##;-#,##", 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Receipt';  

Подскжите почему для всех членов иерархии [Counteragent].[Сторон Пост], запрос возвращает одно и тоже значение?
Код: sql
1.
2.
3.
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
...
Рейтинг: 0 / 0
16.05.2018, 17:08
    #39645678
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSAS 2012. Calculation
Вот еще скрин аналогичного отчета из EXCEL
...
Рейтинг: 0 / 0
16.05.2018, 17:33
    #39645700
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSAS 2012. Calculation
вероятно, группа мер не связана с измерением
...
Рейтинг: 0 / 0
16.05.2018, 17:43
    #39645704
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSAS 2012. Calculation
Критик,
Связь есть, так как по другим атрибутам этого же измерения [Counteragent] такой поблемы нет.
Вот скрин физической меры
...
Рейтинг: 0 / 0
16.05.2018, 17:43
    #39645705
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSAS 2012. Calculation
И скрин связи
...
Рейтинг: 0 / 0
16.05.2018, 17:49
    #39645706
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSAS 2012. Calculation
Детализация до контрагента выглядит так
...
Рейтинг: 0 / 0
16.05.2018, 17:50
    #39645708
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSAS 2012. Calculation
Yagrus2Hello world!
В кубе есть вычислимая мера:
Код: sql
1.
2.
3.
4.
CREATE MEMBER CURRENTCUBE.[Measures].[Поступления. Тек Ц5, р]
 AS sum ([Counteragent].[Сторон Пост].&[СторонПост], [Measures].[Cost In Current P5  Receipt]), 
FORMAT_STRING = "#,##;-#,##", 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Receipt';  

Подскжите почему для всех членов иерархии [Counteragent].[Сторон Пост], запрос возвращает одно и тоже значение?
Код: sql
1.
2.
3.
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 удалит элемент или по правам доступа кто-нибудь снимет галочку для него - и куб для определенных пользователей "сломается"...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
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'; 
...
Рейтинг: 0 / 0
16.05.2018, 18:20
    #39645724
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSAS 2012. Calculation
Yagrus2,

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

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

Я таки думаю, что достаточно наглядно изложил...
...
Рейтинг: 0 / 0
16.05.2018, 22:36
    #39645804
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSAS 2012. Calculation
Yagrus2,

Т.е. ты жестко назначил на меру какой-то элемент из атрибута и ожидаешь что при оценке на других элементах значение будет другим?
Добавь логику is в iif или пускай считает через exists() если нужна смена контекста.
...
Рейтинг: 0 / 0
17.05.2018, 10:45
    #39645935
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSAS 2012. Calculation
Andy_OLAP,
Понял про что вы.
Спасибо за полезные советы!
Будем их учитывать.
...
Рейтинг: 0 / 0
17.05.2018, 11:02
    #39645948
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSAS 2012. Calculation
vikkivYagrus2,

Т.е. ты жестко назначил на меру какой-то элемент из атрибута и ожидаешь что при оценке на других элементах значение будет другим?
То есть находясь в контексте [Counteragent].[Сторон Пост].&[ЦО] SSAS переводит контекст на [Counteragent].[Сторон Пост].&[СторонПост]?

Но почему если сформировать отчет в разрезе [Сторон Пост], [Контрагент] вычислимая мера [Measures].[Поступления. Тек Ц5, р] дает (null)?
...
Рейтинг: 0 / 0
17.05.2018, 12:51
    #39646053
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSAS 2012. Calculation
Хотел еще добавить, что в посте выше {null} получается для тех контрагентов у которых [СторонПост] равен ЦО или ЦО ТД
...
Рейтинг: 0 / 0
17.05.2018, 23:35
    #39646421
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSAS 2012. Calculation
Yagrus2,

элемент расчётный, там где одинаково - привязка работает на одном уровне (атрибуте) между всеми элементами.
на более детальной гранулярности - идёт оценка в контексте привязки, для родного уровня контекст существует, для других - нет (т.е. для этого parent-элемента нет таких children), поэтому и null.
...
Рейтинг: 0 / 0
18.05.2018, 08:08
    #39646496
Ferdipux
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSAS 2012. Calculation
Andy_OLAP...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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'; 


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


вы делаете именно для обработки multiselect?
Я подобные ситуации обрабатывал через SCOPE на вычислимой мере, который объявляется на [Counteragent].[Сторон Пост].[Сторон Пост] (для данного примера). ИМХО SCOPE немножко быстрее, так как условный обсчет идет только в некоторых случаях, а не во всех.
...
Рейтинг: 0 / 0
18.05.2018, 14:15
    #39646726
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SSAS 2012. Calculation
FerdipuxAndy_OLAP...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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'; 


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


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

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

Я бы назвал это ленинградской инженерной школой...
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / SSAS 2012. Calculation / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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