powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Вопрос по синтаксису MDX
12 сообщений из 12, страница 1 из 1
Вопрос по синтаксису MDX
    #32093356
GoodLeo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги! Подскажите начинающему.
Вот в MDX выражениях я могу работать с измерениями, непосредственно указывая значения членов, используя функции для навигации.
А можно ли каким нибудь образом, в конструкцию измерения встроить значения членов из других измерений?
Например, есть измерение:
[Товар]
|
|.Имя
|-Properties Id_Tov
|-Properties Id_Class

Есть ещё одно измерение:
[КлассТовара]
|
|.Имя
|-Properties Id

Смысл в том, что бы в вычисляемом поле показывать имена товаров, выбранного класса.

Выбранный класс я могу определить как [КлассТовара].CurrentMember
Имя товара я могу выводить с помощью [Товар].CurrentMember.Name.
Но в том то и фишка что мне нужно не [Товар].CurrentMember.Name, а только товары выбранного класса. Товарная иерархия содержит коды классов в Properties Id_Class.
Как построить запрос?
Нужно что то типа [Товар].[...вместо явного указания члена, ссылка на него из иерархии "КлассТовара"].Name
Суть вопроса и заключатеся именно в том, можно ли как нибудь вместо явного указания члена, использовать значения других иерархий?
...
Рейтинг: 0 / 0
Вопрос по синтаксису MDX
    #32093394
Фотография Дед Маздай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите ф-цию StrToMember. Но, если честно, мне Ваша структура не нравится, потому что насколько я помню из классики OLAP, измерения должны быть ортогональны.
...
Рейтинг: 0 / 0
Вопрос по синтаксису MDX
    #32093826
GoodLeo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да структура здесь не причем. Это так, выдумано.
Дед, а аргументом в StrToMember может являться только поле или так же и член измерения?
Я вот к чему.
Пишу например:
with member measure.[Продажа] as
'
StrToMember("measure.[Количество]")
'
select
{([Дата].members)} on columns,
{[Measures].[Продажа]} on rows
from Продажи

И всё пучком.
А вот если написать (в качестве аргумента - измерение, а не меру):
with member measure.[НаименованиеТовара] as
'
StrToMember("[Товары_Иерархия]")
'
select
{([Дата].members)} on columns,
{[Measures].[НаименованиеТовара]} on rows
from Продажи

то в колонке "НаименованиеТовара" (в MDX Sample Application) выводится "Err".
Я так думал что там должно выводится имя.
Не помогает и:
StrToMember("[Товары_Иерархия]").name
StrToMember("[Товары_Иерархия].currentMember").name

Хотя в BOL есть явный пример:
StrToMember("Time.[1996]")
...
Рейтинг: 0 / 0
Вопрос по синтаксису MDX
    #32094476
Фотография Дед Маздай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аргументом в StrToMember может являться строка. Ваша ошибка связана не с этой функцией, а с бесконечной рекурсией. Если Вы напишете просто
with member measures.aaa as 'Customers.[USA]'
select {measures.aaa} on columns, Product.Members on rows from Sales
будет то же самое, потому что в вычисляемом члене по измерению мер он неявно полагает себя. Чтобы этого не происходило, укажите явно, какую меру брать:
with member measures.aaa as '(Customers.[USA], Measures.[Unit Sales])'
select {measures.aaa} on columns, Product.Members on rows from Sales.
...
Рейтинг: 0 / 0
Вопрос по синтаксису MDX
    #32094491
Фотография Дед Маздай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну т.е. Вам следует извратиться как-нибудь так:
with member measures.aaa as '(StrToMember("[" + Customers.CurrentMember.Name + "]"), Measures.[Unit Sales])'
select {measures.aaa} on columns, Customers.Members on rows from Sales
...
Рейтинг: 0 / 0
Вопрос по синтаксису MDX
    #32097106
GoodLeo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как написать аналогичную конструкцию в Calculate Member Analysis Manager?
Попробую ещё один пример привести.
В AS есть измерение "Коэффициент", с уровнями:
Коэффициент
|.Id_Tovar
|..ID_Edinica
|...K
Вот в обычном языке программирования можно создать массив размерностью:
D(10,20,1)
И сделать так:
a=2
b=3
d(a,b,1)=40

e=d(a,b,1)

Вот мне и надо, в качестве известных переменные a,b подставить в измерение "Коэффициент", на место членов уровней известные значения членов других измерений.
То есть вместо:
[Коэффициенты]...
Подставить что-то типа:
[Коэффициенты].[ИзмерениеТовара.CurrentMember].[ИзмерениеЕдиницы.CurrentMember].firstChild.name
И таким образом узнать значение "К"
Как в запросе подставить известные значения членов дргих измерений?
...
Рейтинг: 0 / 0
Вопрос по синтаксису MDX
    #32097925
Ирина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотелось быстро ответить, но не получается, задача совсем не простая как кажется на первый взгляд. А кроме того, я не поняла последний пост, поэтому отвечать буду на первый:))
Вопрос в том где выбранное измерение выбранно, если на одной из осей, то будет проблема, так как каждая из осей вычисляется независимо и в примере Маздая
with member measures.aaa as '(StrToMember("[" + Customers.CurrentMember.Name + "]"), Measures.[Unit Sales])'
select {measures.aaa} on columns, Customers.Members on rows from Sales

Customers.CurrentMember.Name будет default член измерения Customers, а не тот, что выбран на оси Rows, т.е если посмотреть это будет скорее всего [Customers].[All Customers]. Можно попробовать поиграть с функцией Axis, но с ней есть несколько заморочек, например ее нельзя использовать в вычисляемом члене, создаваемом Analysis Manager, так как AM делает валидацию и в тот момент оси не существует. Так что такой вычисляемый член нужно будет задавать либо непосредственно из клиента, либо при помощи DSO.
T.e. можно попробовать, что-то типа:
with set s as '[Customers].[All Customers].children'
set t as '
filter
(
s,

Axis(1).Item(0).Properties("Name") = s.Current.Item(0).Properties("Name")
)
'
select
t

on 0,
{[Store].[All Stores].[Canada]} on 1
from sales

НО!!! Если этот set не будет использован на columns, а на rows будет, что-то другое, то дизайн работать не будет. Можно конечно iif понаставить, но ...

Последний вариант, если второе измерение будет выбранно на slicer оси, т.е. на where claus, тогда первый запрос может работать.

Ирина

----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
Вопрос по синтаксису MDX
    #32097948
GoodLeo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Ира! Потренеруюсь сейчас.
По поводу "последнего" поста.
Я всё пытаюсь решить проблему выбора единиц измерения и вывода в них количества.
Я так понимаю есть два пути решения этой проблемы:

1. Создание виртуального куба.
1.1.Сделать, куб с данными по продажам (с мерой "Количество" в "базовых" единицах).
1.2. Сделать куб с измерениями "Товары", "Единица", а коэффициент пересчёта - в качестве меры этого куба.
1.3. Объедитнить это всё в один виртуальный куб, где коэффициент можно брать спокой но из меры.

Но проблема в том что по виртуальным кубам сложно найти описание. Да и неизвестно, как такой кубик будет работать на больших массивах данных.

Поэтому я пытаюсь решить проблему другим путём:

2.Попробовать обойтись без виртуального куба.
Я так понимаю, мой набор данных (Товар, Единица, Коэффициент пересчёта) можно описать соответствующим измерением с реализацией каждого параметра, в качестве уровня измерения:
[Коэффициент]
|.Id_Tovar
|..ID_Edinica
|...K
Т.е. товар может выводиться в нескольких единицах измерения (штуки, коробки, кг...), и на каждое сочетание Товар-Единица, существет есс-но только один коэффициент (почему я и применил firstChild в попытке примера :

Коэффициенты].[ИзмерениеТовара.CurrentMember].[ИзмерениеЕдиницы.CurrentMember].firstChild.name
)
И видимо Properties здесь ни как не применишь.
Безусловным недостатком этого способа является ограничение со стороны количества членов в измерении. Но по моим подсчётом, пока это не актуально.

Другое дело в том, что я не могу подобраться к известным мне членам.
Вот выбрал пользователь в клиенте нужную единицу, и я её могу определить как [Единица].CurrentMember.
Так же я знаю товар, который сейчас обрабатывается:
[Товары].currentmember
И в иерархии "Коэффициенты", для этой единицы и товара есть "К".
Но как написать формулу???
Должно же это как то делаться.....
...
Рейтинг: 0 / 0
Вопрос по синтаксису MDX
    #32097979
GoodLeo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И на всякий случай повторюсь.
В качестве клиента пока используется Excel. Но так как что будет дальше неизвестно, то я пытаюсь всделать весь куб (в том числе и выч. члены) непосредственно средствами Cube Editor Analysis Manager.
...
Рейтинг: 0 / 0
Вопрос по синтаксису MDX
    #32098593
Ирина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле виртуальные кубы очень сильная вещь, и при больших массивах данных будет работать намного быстрее, чем если городить огород из вычисляемых членов. А что значит "по виртуальным кубам сложно найти описание"? Что именно интересует?

Ирина

----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
Вопрос по синтаксису MDX
    #32098657
GoodLeo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Действительно, создание Виртуальных кубов оказалось не таким сложным делом :)
Только я не понял. Когда надо процессить виртуальный куб?
При внесении любых изменений в структуру включаемых кубов и/или измерений?
И как долго он процессится на больших данных?
Это получается что я должен отпроцессить ключаемые куба, а затем столько же времени (1 час) и виртуальный???
...
Рейтинг: 0 / 0
Вопрос по синтаксису MDX
    #32099574
GoodLeo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал я своё любимое колоичество методом виртуального куба. И получил есс-ную проблему. Коэффициент выводится только если в таблице используется иерархия "Товары". Как только товары убираю - Mesuarues[K] становится есс-но ноль, и формула Mesuarues[Kol]/Mesuarues[K] даёт соответствующий результат:(((
Можно ли это как нибудь обойти?
И мож кто ответит на мой вопрос про процессинг виртуальных кубов?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Вопрос по синтаксису MDX
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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