powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Как посчитать долю от родителя?
25 сообщений из 27, страница 1 из 2
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #38984882
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nika gnome, как это побороть?

Судя по всему вам нужен SCOPE
...
Рейтинг: 0 / 0
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #38991730
Фотография Nika gnome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voroninNika gnome, как это побороть?

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


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

SCOPE переопределяет значения какого-то показателя в зависимости от текущего выбора на осях. То есть например для листьев иерархии показывать одно выражение, для корня другое. Это рекомендуемый способ переопределения выражений в OLAP кубах. Так что вкуривайте. Это только на первый взгляд сложно.
...
Рейтинг: 0 / 0
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #38992473
RioMare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nika gnome,

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


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

А ежели по-теме : скорее всего "иерархии заказчиков" и "люди" никак не связяны между собой, поэтому и выдаёт 100%.
...
Рейтинг: 0 / 0
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #38993459
RioMare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nika gnome,

Если не серет - в чём глубокий смысл упражнений с StrToMember ? Как пример решения я привёл немного другой пример. :)
И ещё ( как мне кажется ) у вас немного не корректно построена factless table M2M третья - связывает их многие-ко-многим
...
Рейтинг: 0 / 0
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #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
Как посчитать долю от родителя?
    #38994093
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RioMare
зачем вам *.all.children ?

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

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



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

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

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


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