Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Как посчитать долю от родителя? / 25 сообщений из 27, страница 1 из 2
16.06.2015, 14:14:08
    #38984827
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
Я нашла, как это, в общем-то, делается: в "вычислениях" создаю
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE MEMBER CURRENTCUBE.[Measures].[Процент от итога]
AS Case
// Test to avoid division by zero.
When IsEmpty
     ( 
        [Measures].[деньги]
     ) 
Then Null

Else 
    ( 
        [Заказчики].[Иерархия заказчиков].CurrentMember,
        [Measures].[деньги] 
    ) 
    /
    ( 
        // The Root function returns the (All) value for the target dimension.
        [Заказчики].[Иерархия заказчиков].CurrentMember.Parent, 
        [Measures].[деньги]
    )

End


"иерархия заказчиков" - это условно заказчиков так в группы объединила. И это работает, если скинуть "Иерархия Заказчиков" по строкам и "деньги"
Но.
при построении "сводной таблицы" в excel если добавить в строки помимо "иерархии заказчиков" ещё и "люди", то для них всех будут 100%, как это побороть?
...
Рейтинг: 0 / 0
16.06.2015, 14:53:11
    #38984882
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
Nika gnome, как это побороть?

Судя по всему вам нужен SCOPE
...
Рейтинг: 0 / 0
16.06.2015, 17:53:14
    #38985109
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
А возможен ли какой-то подобный вариант написания кода? Чтобы вне зависимости от того, что будет скинуто на строки или столбцы (или другие оси), в случае нахождения иерархии, вычислялся бы итог по строкам (Rows)?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE MEMBER CURRENTCUBE.[Measures].[Процент от итога]
AS Case
// Test to avoid division by zero.
When IsEmpty
     ( 
        [Measures].[деньги]
     ) 
Then Null

Else 
    ( 
        Rows.CurrentMember,
        [Measures].[деньги] 
    ) 
    /
    ( 
        // The Root function returns the (All) value for the target dimension.
        Rows.CurrentMember.Parent, 
        [Measures].[деньги]
    )

End
...
Рейтинг: 0 / 0
24.06.2015, 15:05:09
    #38991730
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
a_voroninNika gnome, как это побороть?

Судя по всему вам нужен SCOPE
чё-то вообще в него никак не вкурю :-?
...
Рейтинг: 0 / 0
24.06.2015, 17:49:35
    #38991901
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
Nika gnomea_voroninпропущено...


Судя по всему вам нужен SCOPE
чё-то вообще в него никак не вкурю :-?

SCOPE переопределяет значения какого-то показателя в зависимости от текущего выбора на осях. То есть например для листьев иерархии показывать одно выражение, для корня другое. Это рекомендуемый способ переопределения выражений в OLAP кубах. Так что вкуривайте. Это только на первый взгляд сложно.
...
Рейтинг: 0 / 0
25.06.2015, 12:03:56
    #38992434
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
scope([Measures].[Процент от итога]);
    scope([Заказчики].[Иерархия заказчиков].MEMBERS,[Сотрудники].[Контактное лицо].MEMBERS);
            if ([Сотрудники].[Контактное лицо].CurrentMember
                <> [Сотрудники].[Контактное лицо].[All]) then
                this = this/2 /*пусть для начала хотя бы попробует на 2 поделить*/
            end if;
    end scope;
end scope;


до-о-олго висит у меня при разворачивании и при построении "сводной таблицы" в excel :-(
...
Рейтинг: 0 / 0
25.06.2015, 12:35:39
    #38992473
RioMare
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
Nika gnome,

Код: sql
1.
Rows.CurrentMember,[Measures].[деньги] => Axis(0).Item(0).....


Как пример написания кода 9902513 . вот пример решения.

А ежели по-теме : скорее всего "иерархии заказчиков" и "люди" никак не связяны между собой, поэтому и выдаёт 100%.
...
Рейтинг: 0 / 0
25.06.2015, 14:55:23
    #38992760
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
RioMareА ежели по-теме : скорее всего "иерархии заказчиков" и "люди" никак не связяны между собой, поэтому и выдаёт 100%.
Они связаны многие ко многим. Там такая ситуация:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Банки и финансы
    Банковский сектор
        Московский Банк
            ЗАО "Московский Банк Депозиты"
            ЗАО "Московский Банк Ещёченибудь"
        Питерский Банк
            ЗАО "Питерский Банк"
    Кредитные организации
        ЗАО "Кредит даром"
Медицина и фармация
    ....


и т.д. Т.е. это список каких-то заказчиков (организаций и частных лиц)

А ещё есть отдельная таблица из людей (сотрудников), которые работают с этими клиентами
Код: sql
1.
2.
3.
Иванов А.С.
Петров П.С.
Ещёктотов Р.Р.


Соответственно, есть два справочника (с клиентами и с "людьми"), и третья - связывает их многие-ко-многим
ID клиента ID людака деньги дата4 1 1000 11.01.20155 1 1200 17.03.20154 2 1500 15.05.2015... .........
да, поэтому, логично, выдаёт 100% - с этим я не спорю. Но хочется "поменять правила". То есть, если сделать такой запрос, который выдаст
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Банки и финансы                               | 5 700
    Банковский сектор                         | 4 200
        Московский Банк                       | 3 200
            ЗАО "Московский Банк Депозиты"    | 2 500
                 Иванов А.С.                  | 1 200
                 Петров П.С.                  | 1 300
            ЗАО "Московский Банк Ещёченибудь" |   700
                 Иванов А.С.                  |   700
        Питерский Банк                        | 1 000
            ЗАО "Питерский Банк"              | 1 000
                 Ещёктотов Р.Р.               | 1 000
    Кредитные организации                     | 1 500
        ЗАО "Кредит даром"                    | 1 500
            Ещёктотов Р.Р.                    |   300
            Петров П.С.                       | 1 200
Медицина и фармация
    ....


(из результатов игнорирую все те значения, где "клиент" == "All", чтобы не подводить итоги по каждому человеку)
и добавить к нему второй столбец "Процент от итога", который я наваяла в предыдущем посте, то он выдаст нужные проценты для иерархии, а напротив фамилий сотрудников выдаст значение "100%", поскольку у меня так записан запрос "CREATE MEMBER CURRENTCUBE.[Measures].[Процент от итога]". Логично.

Что требуется:
В предыдущем моём посте я пыталась подменить значения меры "Процент от итога" так, чтобы для клиентов он выдавал бы всё те же значения, что и раньше, а вот для людей он бы выдавал (для начала) что-нибудь другое. А в идеале - долю от клиента, в котором он записан.

p.s. да, со ссылками я сейчас ознакомлюсь...
...
Рейтинг: 0 / 0
25.06.2015, 14:57:59
    #38992764
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
Nika gnome
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
scope([Measures].[Процент от итога]);
    scope([Заказчики].[Иерархия заказчиков].MEMBERS,[Сотрудники].[Контактное лицо].MEMBERS);
            if ([Сотрудники].[Контактное лицо].CurrentMember
                <> [Сотрудники].[Контактное лицо].[All]) then
                this = this/2 /*пусть для начала хотя бы попробует на 2 поделить*/
            end if;
    end scope;
end scope;


до-о-олго висит у меня при разворачивании и при построении "сводной таблицы" в excel :-(

надо не if ([Сотрудники].[Контактное лицо].CurrentMember
<> [Сотрудники].[Контактное лицо].[All]) then

А SCOPE([Сотрудники].[Контактное лицо].[All]) одно выражение
А SCOPE([Сотрудники].[Контактное лицо].[All].Children) другое выражение
...
Рейтинг: 0 / 0
25.06.2015, 16:59:21
    #38992940
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
RioMareNika gnome,

Код: sql
1.
Rows.CurrentMember,[Measures].[деньги] => Axis(0).Item(0).....



Как пример написания кода 9902513 . вот пример решения.

А ежели по-теме : скорее всего "иерархии заказчиков" и "люди" никак не связяны между собой, поэтому и выдаёт 100%.
Почитала программу по первой ссылке - прямо то, что надо!
НО
не работает StrToMember.
Вот так работает
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE MEMBER CURRENTCUBE.[Measures].[Процент от итога]
 AS 
    [Measures].[Выполнено - деньги]
    /
    ([Заказчики].[Иерархия заказчиков].CurrentMember.Parent
        , [Measures].[Выполнено - деньги]), 

FORMAT_STRING = "Percent", 
VISIBLE = 1  ; 


А вот так - уже не работает (в excel выдаёт для всех значений #ЗНАЧ! )
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE MEMBER CURRENTCUBE.[Measures].[Процент от итога]
 AS 
    [Measures].[Выполнено - деньги]
    /
    (StrToMember('[Заказчики].[Иерархия заказчиков]').CurrentMember.Parent
        , [Measures].[Выполнено - деньги]), 

FORMAT_STRING = "Percent", 
VISIBLE = 1  ; 


В MSDN строки в апострофы берутся, а в примере по вашей ссылке - в кавычках. И так, и иначе пробовала. Всегда ошибка "#ЗНАЧ!".
...
Рейтинг: 0 / 0
25.06.2015, 21:13:34
    #38993107
RioMare
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
Nika gnomeне работает StrToMember.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE MEMBER CURRENTCUBE.[Measures].[Процент от итога]
 AS 
    [Measures].[Выполнено - деньги]
    /
    (StrToMember('[Заказчики].[Иерархия заказчиков]').CurrentMember.Parent
        , [Measures].[Выполнено - деньги]), 

FORMAT_STRING = "Percent", 
VISIBLE = 1  ; 




если не секрет откуда такая уверенность ? А по-моему StrToMember как раз работает, только .Currentmember вы берёте от того, что возвращает StrToMember, т.е. от члена измерения, а не от иерархии.
...
Рейтинг: 0 / 0
26.06.2015, 10:02:26
    #38993321
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
RioMareNika gnomeне работает StrToMember.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE MEMBER CURRENTCUBE.[Measures].[Процент от итога]
 AS 
    [Measures].[Выполнено - деньги]
    /
    (StrToMember('[Заказчики].[Иерархия заказчиков]').CurrentMember.Parent
        , [Measures].[Выполнено - деньги]), 

FORMAT_STRING = "Percent", 
VISIBLE = 1  ; 





если не секрет откуда такая уверенность ? А по-моему StrToMember как раз работает, только .Currentmember вы берёте от того, что возвращает StrToMember, т.е. от члена измерения, а не от иерархии.

ну, ошибочка вышла...
так вот всё равно не работает
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE MEMBER CURRENTCUBE.[Measures].[Процент от итога]
 AS 
    [Measures].[Выполнено - деньги]
    /
    (StrToMember('[Заказчики].[Иерархия заказчиков].CurrentMember.Parent')
        , [Measures].[Выполнено - деньги]), 

FORMAT_STRING = "Percent", 
VISIBLE = 1  ; 



[/quote]
...
Рейтинг: 0 / 0
26.06.2015, 10:55:51
    #38993381
RioMare
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
Nika gnome,

Вот пример на Adventure Works ( у меня работает )

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create member currentcube.measures.category_name as 
 [Product].[Product Categories].currentmember.member_unique_name;

Create Member CurrentCube.[Measures].[Ratio to Parent Product]

 As Case
        When [Product].[Product Categories].CurrentMember.Level.Ordinal 
             = 0
        Then 1
        Else [Measures].[Sales Amount]
             /
             ( StrToMember(category_name).parent,
               [Measures].[Sales Amount] )
    End,
Format_String = "Percent",
Associated_Measure_Group = 'Sales Summary' ;  
...
Рейтинг: 0 / 0
26.06.2015, 11:44:55
    #38993459
RioMare
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
Nika gnome,

Если не серет - в чём глубокий смысл упражнений с StrToMember ? Как пример решения я привёл немного другой пример. :)
И ещё ( как мне кажется ) у вас немного не корректно построена factless table M2M третья - связывает их многие-ко-многим
...
Рейтинг: 0 / 0
26.06.2015, 12:08:32
    #38993496
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
всё понятно... туплю....
При построении отчёта OLAP в сводной таблице excel я скидываю
Код: sql
1.
[Заказчики].[Иерархия заказчиков]

в строки, думая, что "строки" - это "rows", а следовательно, ось номер 1 (ведь Columns - это axis(0), значит, Rows - axis(1)).
Но при этом ничего не скидываю в столбцы (даты там обычно стоят). А excel отправляет MDX запрос на сервер
Код: sql
1.
[Заказчики].[Иерархия заказчиков] On Columns

- но отображает их, как и просил пользователь, в строках.
Соответственно, Оси Axis(1) просто тупо не существует, пока я даты не скину.

Короче
Приведённые мной выше примеры всё-таки работают - автоматически определяют, какая иерархия в строках и успешно анализируют её.
НО если я в строки скину, помимо клиентов, людей (в сообщении 17815809 чуть выше - я описала, как я хочу) - то он определяет только первую иерархию, а для "людей" по-прежднему ставит 100%. И до сих пор не знаю, как сделать так, чтобы для каждого человека просчитывался свой процент, если брать клиента, которому он совместно со своими коллегками что-то сделал, за 100%.

Пытаюсь разобраться с другой ссылкой, которую вы мне скинули, но... можно как-то всё решить одним только MDX-ом? Либо привязывая новый MEMBER к "строкам", либо привязывая новый MEMBER конкретно к клиентам+людям
...
Рейтинг: 0 / 0
26.06.2015, 14:24:36
    #38993699
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
Nika gnomeвсё понятно... туплю....
При построении отчёта OLAP в сводной таблице excel я скидываю
Код: sql
1.
[Заказчики].[Иерархия заказчиков]

в строки, думая, что "строки" - это "rows", а следовательно, ось номер 1 (ведь Columns - это axis(0), значит, Rows - axis(1)).
Но при этом ничего не скидываю в столбцы (даты там обычно стоят). А excel отправляет MDX запрос на сервер
Код: sql
1.
[Заказчики].[Иерархия заказчиков] On Columns

- но отображает их, как и просил пользователь, в строках.
Соответственно, Оси Axis(1) просто тупо не существует, пока я даты не скину.

Короче
Приведённые мной выше примеры всё-таки работают - автоматически определяют, какая иерархия в строках и успешно анализируют её.
НО если я в строки скину, помимо клиентов, людей (в сообщении 17815809 чуть выше - я описала, как я хочу) - то он определяет только первую иерархию, а для "людей" по-прежднему ставит 100%. И до сих пор не знаю, как сделать так, чтобы для каждого человека просчитывался свой процент, если брать клиента, которому он совместно со своими коллегками что-то сделал, за 100%.

Пытаюсь разобраться с другой ссылкой, которую вы мне скинули, но... можно как-то всё решить одним только MDX-ом? Либо привязывая новый MEMBER к "строкам", либо привязывая новый MEMBER конкретно к клиентам+людям


если у вас люди -- это отдельное измерение, то никакой Parent тут работать не будет. Он считает процент человека от самого себя. т.е 100% . Вы можете всю иерархию собрать внутри одного измерения?

Вы упорно не хотите изучить SCOPE, между тем он позволяет делать очень крутые вещь.

Вы можете написать вот так и это будет работать в ситуации, когда выбран конкретный заказчик и конкретное контакное лицо.
Код: sql
1.
2.
3.
4.
5.
6.
7.
scope([Заказчики].[Иерархия заказчиков].All.Children)
scope([Сотрудники].[Контактное лицо].All.Children)
scope([Measures].[Процент от итога]);
     this = this/2 /*пусть для начала хотя бы попробует на 2 поделить*/
end scope;
end scope;
end scope;



А можете написать вот так, и это будет означать ситуацию, когда выбран заказчик, а контакное лицо не выбрано, например в итоге.

Код: sql
1.
2.
3.
4.
5.
6.
7.
scope([Заказчики].[Иерархия заказчиков].All.Children)
scope([Сотрудники].[Контактное лицо].All)
scope([Measures].[Процент от итога]);
     this = this/3 /*пусть для начала хотя бы попробует на 3 поделить*/
end scope;
end scope;
end scope;



Вам не придётся думать о том, что попало на ROWS, а что на COLUMS, потому что SCOPE-у всё равно.
...
Рейтинг: 0 / 0
26.06.2015, 14:30:03
    #38993715
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
Также

this = this / 2 возможно не стаботает

Я обычно делаю так
Сначала делаю [Measures].[Процент от итога Скрытый], который является физическим показателем, потом объявляю вычисляемый

[Measures].[Процент от итога]



и пишу

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE MEMBER CURRENTCUBE.[Measures].[Процент от итога]
AS 
[Measures].[Процент от итога Скрытый]
;

SCOPE(...)
SCOPE([Measures].[Процент от итога]) 
This = [Measures].[Процент от итога Скрытый] /2 
END SCOPE;
END SCOPE;

SCOPE(...)
SCOPE([Measures].[Процент от итога]) 
This = [Measures].[Процент от итога Скрытый] /3 
END SCOPE;
END SCOPE;
...
Рейтинг: 0 / 0
26.06.2015, 17:13:18
    #38994037
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
я с 16 июня, когда мне посоветовали SCOPE, много раз к нему возвращалась, пытаясь его понять, когда не получалось, искала вариант чтения иерархии со строки. Но не сколько часов назад поняла, что без него нельзя вообще никак, других вариантов нет. Но scope как-то плохо входит в моё сознание. Непрерывно ищу и читаю различную литературу на эту тему и временами экспериментирую.
чувствую себя очень тупой :'(

Вот, например,

Код: sql
1.
2.
3.
4.
5.
6.
7.
scope([Measures].[Процент от итога]);
scope([Заказчики].[Иерархия заказчиков].All.Children);
scope([Сотрудники].[Контактное лицо].All.Children);
     this = 4;
end scope;
end scope;
end scope;


Работает нереально долго и выдаёт нереальное количество лишних данных. По задумке, он должен был напротив фамилий контактных лиц писать "4", а во всех остальных строках (напротив заказчиков) писать процент из поля "процент от итога". Но в итоге он везде пишет проценты (соответственно, напротив людей значится 100%), а вот в случае, если он в дереве натыкается на заказчика в Level=2 (т.е. child от All), то там у него он начинает перечислять вообще всех людей, кто только есть в базе, и напротив писать 4.

Я понимаю, почему у него такая реакция. Но не понимаю, как добиться желаемого.
Т.е.
1. Как узнать, является ли заказчик "листовым" в дереве заказчиков? И применять SCOPE только к нему.
2. Содержит ли контактное лицо какие-то данные по этому заказичку? Если нет, то игнорить, если да, то влепить ему 4. (тут я ещё могу разобраться)

А вообще, я потихоньку начинаю доходить, что это и с чем едят))))
...
Рейтинг: 0 / 0
26.06.2015, 17:51:55
    #38994079
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
Nika gnomeя с 16 июня, когда мне посоветовали SCOPE, много раз к нему возвращалась, пытаясь его понять, когда не получалось, искала вариант чтения иерархии со строки. Но не сколько часов назад поняла, что без него нельзя вообще никак, других вариантов нет. Но scope как-то плохо входит в моё сознание. Непрерывно ищу и читаю различную литературу на эту тему и временами экспериментирую.
чувствую себя очень тупой :'(

Вот, например,

Код: sql
1.
2.
3.
4.
5.
6.
7.
scope([Measures].[Процент от итога]);
scope([Заказчики].[Иерархия заказчиков].All.Children);
scope([Сотрудники].[Контактное лицо].All.Children);
     this = 4;
end scope;
end scope;
end scope;


Работает нереально долго и выдаёт нереальное количество лишних данных. По задумке, он должен был напротив фамилий контактных лиц писать "4", а во всех остальных строках (напротив заказчиков) писать процент из поля "процент от итога". Но в итоге он везде пишет проценты (соответственно, напротив людей значится 100%), а вот в случае, если он в дереве натыкается на заказчика в Level=2 (т.е. child от All), то там у него он начинает перечислять вообще всех людей, кто только есть в базе, и напротив писать 4.

Я понимаю, почему у него такая реакция. Но не понимаю, как добиться желаемого.
Т.е.
1. Как узнать, является ли заказчик "листовым" в дереве заказчиков? И применять SCOPE только к нему.
2. Содержит ли контактное лицо какие-то данные по этому заказичку? Если нет, то игнорить, если да, то влепить ему 4. (тут я ещё могу разобраться)

А вообще, я потихоньку начинаю доходить, что это и с чем едят))))


Вы знаете, я в своё время тоже не с первого раза въехал, что это такое.

Почему работает долго -- вполне очевидно. Вы поставили константу в качестве значения, в результате перестали исключаться пустые ячейки.

Далее вы зачем упорно переставляете "scope([Measures].[Процент от итога]);" в начало списка. Вы что пытаетесь переопределить? На что указывает THIS?

Я вам как написал ?
Код: sql
1.
2.
3.
4.
5.
SCOPE(...)
SCOPE([Measures].[Процент от итога]) 
This = [Measures].[Процент от итога Скрытый] /2 
END SCOPE;
END SCOPE;



This это текущий подкуб. Вы говорите, что внутри данного SCOPE(...) этот THIS, то есть [Measures].[Процент от итога] последний SCOPE!!!, должен иметь значение [Measures].[Процент от итога Скрытый] /2
...
Рейтинг: 0 / 0
26.06.2015, 17:52:01
    #38994080
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
yyeeaaaHAHAHAHAHA
Я разобралась!!
Заработало.

Спасибо всем, кто принял участие в обсуждении, особенно, a_voronin!
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE MEMBER CURRENTCUBE.[Measures].[Процент от итога]
 AS 
    [Measures].[Выполнено - деньги]
    /
    ([Заказчики].[Иерархия заказчиков].CurrentMember.Parent
        , [Measures].[деньги]), 

FORMAT_STRING = "Percent", 
VISIBLE = 1  ; 

scope ([Measures].[Процент от итога]);
    scope ([Заказчики].[Иерархия заказчиков].Members);
        scope([Сотрудники].[Контактное лицо].[ALL].Children);
            this = 
                ([Заказчики].[Иерархия заказчиков].CurrentMember,
                 [Сотрудники].[Контактное лицо].CurrentMember, 
                    [Measures].[деньги])
                /
                ([Заказчики].[Иерархия заказчиков].CurrentMember,  
                [Сотрудники].[Контактное лицо].[All]
                    , [Measures].[деньги]);
        end scope;
    end scope;
end scope;


Правда, мелочь осталась - не форматирует как процент. Ну это ща разберусь, наверно.
...
Рейтинг: 0 / 0
26.06.2015, 17:53:40
    #38994082
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
Можно вот так писать

Код: sql
1.
2.
3.
4.
5.
6.
Scope 
 ( 
    [Date].[Fiscal Year].&[2005],
    [Date].[Fiscal].[Fiscal Quarter].Members,
    [Measures].[Sales Amount Quota]
 ) ;   



Но последним стоит то, что вы переопределяете.
...
Рейтинг: 0 / 0
26.06.2015, 18:04:29
    #38994091
RioMare
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
по-моему всё гораздо проще ( если я правильно понял вашу задачу )

1. Сделайте физическую null-based меру [Measures].[Процент от итога 4 Excel]
в той же самой группе мер, что и [Measures].[Процент от итога] и поставьте ей тип аггрегации SUM

2. Дальше как тут советовали

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SCOPE([Measures].[Процент от итога 4 Excel]);
 /* для нижнего уровня [Заказчики].[Иерархия заказчиков] присваемаем обычную меру, на верхних уровнях всё 
  просуммируется само */
    SCOPE([Заказчики].[Иерархия заказчиков].[заказчик]);
       this = [Measures].[Процент от итога];
    END SCOPE;
/* для нижнего уровня [Сотрудники].[Контактное лицо] пусть для начала хотя бы попробует на 2 поделить */
    SCOPE([Сотрудники].[Контактное лицо].[сотрудник]);
    this = [Measures].[Процент от итога]/2;
    END SCOPE;
/* для верхнего уровня [Сотрудники] пусть отдувается начальник  */
    SCOPE([Сотрудники].[Департамент].[Департамент]);
    this = NULL;
    END SCOPE;
END SCOPE; 



зачем вам *.all.children ?
...
Рейтинг: 0 / 0
26.06.2015, 18:07:31
    #38994093
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
RioMare
зачем вам *.all.children ?

По определению

Код: sql
1.
2.
3.
SCOPE(Subcube_Expression) 
   [ MDX_Statement ]
END SCOPE



А как записать Subcube_Expression каждый решает сам. Вариантов много.
...
Рейтинг: 0 / 0
26.06.2015, 18:19:28
    #38994108
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
Nika gnomeПравда, мелочь осталась - не форматирует как процент. Ну это ща разберусь, наверно.

Код: sql
1.
Format_String(this) = "Percent";
...
Рейтинг: 0 / 0
29.06.2015, 10:48:04
    #38994734
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как посчитать долю от родителя?
Nika gnome,

У меня прекрасно подхватывается форматирование от первого объявления показателя. Вы как смотрите?
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Как посчитать долю от родителя? / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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