powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MDX вычисляемая мера для куба с акциями акционеров.
13 сообщений из 38, страница 2 из 2
MDX вычисляемая мера для куба с акциями акционеров.
    #40024126
AlphaDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мера Rate у меня объявлена вот так:
...
Рейтинг: 0 / 0
MDX вычисляемая мера для куба с акциями акционеров.
    #40024127
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlphaDog,

еще попробуйте

create member currentcube.measures.AmountAcc
AS SUM(null:[Dim Date].[Date].currentMember,[Measures].[Amount] * курс);
...
Рейтинг: 0 / 0
MDX вычисляемая мера для куба с акциями акционеров.
    #40024128
AlphaDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик
AlphaDog
Но MeasureExpression property не может работать с вычисляемыми мерами


Точно? Просто я с ними не особо работал.


Сообщение об ошибке:

Код: sql
1.
2.
Severity	Code	Description
Error		Errors in the metadata manager. The measure expression of the DayBalance measure contains the [AmountAcc] operand , which could not be resolved.




Критик
Попробуйте сделать AmountAcc фиктивной мерой, а ваше вычисляемое выражение написать в scope


Я не совсем понимаю, что такое "фиктивная мера", да и значение AmountAcc пользователям будет нужно для анализа и отчетов.

А SCOPE я банально не могу понять как он работает. Нет, я понимаю что он вырубает в кубе подкуб и задает вычисления отличные от остальной части куба. Но моя трехмерная голова ломается многомерном пространстве. Вроде все просто, но я туплю 😢
...
Рейтинг: 0 / 0
MDX вычисляемая мера для куба с акциями акционеров.
    #40024129
AlphaDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик
AlphaDog,

еще попробуйте

create member currentcube.measures.AmountAcc
AS SUM(null:[Dim Date].[Date].currentMember,[Measures].[Amount] * курс);


Сделал:

Код: sql
1.
2.
create member currentcube.measures.BalanceSUM
    AS SUM(null:[Dim Date].[Date].currentMember,[Measures].[Amount]*[Measures].[Rate]);



Возвращает NULL. Да и если бы считало, я так понимаю, [Measures].[Rate] был бы на конкретный [Dim Date].[Date].currentMember и на [Measures].[Amount] на этот день, а мне нужно на ТЕКУЩУЮ дату получения всей суммы.
...
Рейтинг: 0 / 0
MDX вычисляемая мера для куба с акциями акционеров.
    #40024138
AlphaDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю, что проблема в том, что [Measures].[Rate] возвращает NULL. Но для искомого значения, на мой взгляд, есть все нужные данные - связи по ключам date и currency есть. Все что нужно - на определенную дату и тип валюты\акции вытащить конкретное значение Rate и умножить его на расчитанное аддитивной мерой значение. В TSQL это проще простого...
...
Рейтинг: 0 / 0
MDX вычисляемая мера для куба с акциями акционеров.
    #40024139
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlphaDog
Я не совсем понимаю, что такое "фиктивная мера", да и значение AmountAcc пользователям будет нужно для анализа и отчетов


определяете меру как null в DSV-слое или в представлении/запросе,
а в scope переопределяете её
...
Рейтинг: 0 / 0
MDX вычисляемая мера для куба с акциями акционеров.
    #40024141
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlphaDog
Но для искомого значения, на мой взгляд, есть все нужные данные - связи по ключам date и currency есть


возможно у вас currency и ее ключ неверно связаны,
то есть идет агрегация (даже если ее в реальности нет), соответственно rate пустой
...
Рейтинг: 0 / 0
MDX вычисляемая мера для куба с акциями акционеров.
    #40024184
AlphaDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.

Практически получилось. Да, было что-то с агрегациями и связями. Сделал все аккуратно и внимательно - получил нужные цифры.

НО! Баланс собирается ТОЛЬКО если в запросе есть оба дименшина - даты и валюты:

Клиент->Дата->Валюта=БалансНаДату

Как сделать что бы подобная агрегация работала бы и в случае сворачивания запроса до

Клиент->Дата=БалансНаДату

Ну и с большой долей вероятности клиент захочет агрегацию

Клиент->Валюта=БалансНаПоследнююДату.

И

Клиент=БалансНаПоследнююДату.

На текущий момент три последние агрегации возвращают NULL.

Я решал эту проблему через IIF( dim.currentmember.level.name='text', функция, функция), но в данном случае в сводной таблице вообще нет дименшина - как с этим работать?
...
Рейтинг: 0 / 0
MDX вычисляемая мера для куба с акциями акционеров.
    #40024275
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlphaDog
НО! Баланс собирается ТОЛЬКО если в запросе есть оба дименшина - даты и валюты


Значит у вас что-то не так сделано, раз считается только на детальном уровне )
По смыслу - у вас только перемножение должно работать на детальном уровне, а все остальное должно считаться от уже умноженных цифр. Имхо - штудируйте первую ссылку в топике.
...
Рейтинг: 0 / 0
MDX вычисляемая мера для куба с акциями акционеров.
    #40024418
AlphaDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик
AlphaDog
НО! Баланс собирается ТОЛЬКО если в запросе есть оба дименшина - даты и валюты


Значит у вас что-то не так сделано, раз считается только на детальном уровне )
По смыслу - у вас только перемножение должно работать на детальном уровне, а все остальное должно считаться от уже умноженных цифр. Имхо - штудируйте первую ссылку в топике.


Я сделал не через "фиктивная меру", а просто вот так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE MEMBER CURRENTCUBE.[Measures].[UnitsSUM]
 AS SUM(null:[Date].[Date].currentMember,[Measures].[Units]), 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Units'  ; 


CREATE MEMBER CURRENTCUBE.measures.BalanceSUM
 AS [Measures].[UnitsSUM]* [Measures].[Rate], 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Units'  ; 



Далее, видимо, нужно прописать SCOPE, который будет на более высоких уровнях агрегации (или как это правильно описать) агрегировать все что было насчитано на более низких

Пошел читать дальше....
...
Рейтинг: 0 / 0
MDX вычисляемая мера для куба с акциями акционеров.
    #40024427
AlphaDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пришел вот к такому решению.

Теперь вопрос - как в местах кода THIS = 1,2,3 спуститься до нижнего уровня йерархии, просчитать на нем все [Measures].[UnitsSUM] * [Measures].[Rate] и потом проагрегировать?


Код: 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.
25.
26.
27.
CREATE MEMBER CURRENTCUBE.[Measures].[UnitsSUM]
 AS SUM(null:[Date].[Date].currentMember,[Measures].[Units]), 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Units'  ; 

CREATE MEMBER CURRENTCUBE.[Measures].[BalanceSUM]
 AS NULL, 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Units'  ; 

SCOPE ( { [Measures].[BalanceSUM]} );
    -- this when the only member(s) selected
    THIS = 1;
    SCOPE( Leaves([Date]));
        -- this is the only when member and date (no currency) selected
         THIS = 2;
    END SCOPE;
    SCOPE(  Leaves([Currency]));
         -- this is the only when member and currency (no date) selected
         THIS = 3;
    END SCOPE;
    SCOPE(  Leaves([Currency]));
            SCOPE( Leaves([Date]));
                -- here when all dimensions 1) member 2) date 3) currency presented
                -- the same as straight calculated measure instead NULL
                 THIS = [Measures].[UnitsSUM] * [Measures].[Rate];
            END SCOPE;
    END SCOPE;
END SCOPE;
...
Рейтинг: 0 / 0
MDX вычисляемая мера для куба с акциями акционеров.
    #40024435
AlphaDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже нашел решение...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SCOPE ( { [Measures].[BalanceSUM]} );
    -- this when the only member(s) selected
    THIS = SUM(
                [Date].[Date].children 
                * 
                [Currency].[Currency].children
                ,[Measures].[UnitsSUM]* [Measures].[Rate]);
    SCOPE( Leaves([Date]));
        -- this is the only when member and date (no currency) selected
         THIS = SUM([Currency].[Currency].children,[Measures].[UnitsSUM]* [Measures].[Rate]);
    END SCOPE;
    SCOPE(  Leaves([Currency]));
         -- this is the only when member and currency (no date) selected
         THIS = SUM([Date].[Date].children,[Measures].[UnitsSUM]* [Measures].[Rate]);
    END SCOPE;
    SCOPE(  Leaves([Currency]));
            SCOPE( Leaves([Date]));
                -- here when all dimensions 1) member 2) date 3) currency presented
                -- the same as stright calculated measure instead NULL
                 THIS = [Measures].[UnitsSUM]* [Measures].[Rate];
            END SCOPE;
    END SCOPE;
END SCOPE;
...
Рейтинг: 0 / 0
MDX вычисляемая мера для куба с акциями акционеров.
    #40025007
AlphaDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный вопрос - а как Property "Visible" меры влияет на меру в Calculations? Я так полагал, этот параметр влияет только на видимость меры в Excel или PowerB. Но, похоже, все иначе - делаю меру [Measures].[Rate], невидимой и у меня перестает считаться моя measures.BalanceSUM. Почему? Это же бред...


Код: sql
1.
2.
3.
CREATE MEMBER CURRENTCUBE.measures.BalanceSUM
 AS [Measures].[UnitsSUM]* [Measures].[Rate], 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Units'  ; 
...
Рейтинг: 0 / 0
13 сообщений из 38, страница 2 из 2
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MDX вычисляемая мера для куба с акциями акционеров.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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