|
Вопрос по синтаксису MDX
|
|||
---|---|---|---|
#18+
Коллеги! Подскажите начинающему. Вот в MDX выражениях я могу работать с измерениями, непосредственно указывая значения членов, используя функции для навигации. А можно ли каким нибудь образом, в конструкцию измерения встроить значения членов из других измерений? Например, есть измерение: [Товар] | |.Имя |-Properties Id_Tov |-Properties Id_Class Есть ещё одно измерение: [КлассТовара] | |.Имя |-Properties Id Смысл в том, что бы в вычисляемом поле показывать имена товаров, выбранного класса. Выбранный класс я могу определить как [КлассТовара].CurrentMember Имя товара я могу выводить с помощью [Товар].CurrentMember.Name. Но в том то и фишка что мне нужно не [Товар].CurrentMember.Name, а только товары выбранного класса. Товарная иерархия содержит коды классов в Properties Id_Class. Как построить запрос? Нужно что то типа [Товар].[...вместо явного указания члена, ссылка на него из иерархии "КлассТовара"].Name Суть вопроса и заключатеся именно в том, можно ли как нибудь вместо явного указания члена, использовать значения других иерархий? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2003, 13:53 |
|
Вопрос по синтаксису MDX
|
|||
---|---|---|---|
#18+
Посмотрите ф-цию StrToMember. Но, если честно, мне Ваша структура не нравится, потому что насколько я помню из классики OLAP, измерения должны быть ортогональны. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2003, 14:24 |
|
Вопрос по синтаксису MDX
|
|||
---|---|---|---|
#18+
Да структура здесь не причем. Это так, выдумано. Дед, а аргументом в 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]") ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2003, 11:05 |
|
Вопрос по синтаксису MDX
|
|||
---|---|---|---|
#18+
Аргументом в 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2003, 11:31 |
|
Вопрос по синтаксису MDX
|
|||
---|---|---|---|
#18+
Ну т.е. Вам следует извратиться как-нибудь так: with member measures.aaa as '(StrToMember("[" + Customers.CurrentMember.Name + "]"), Measures.[Unit Sales])' select {measures.aaa} on columns, Customers.Members on rows from Sales ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2003, 11:44 |
|
Вопрос по синтаксису MDX
|
|||
---|---|---|---|
#18+
А как написать аналогичную конструкцию в 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 И таким образом узнать значение "К" Как в запросе подставить известные значения членов дргих измерений? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2003, 07:25 |
|
Вопрос по синтаксису MDX
|
|||
---|---|---|---|
#18+
Хотелось быстро ответить, но не получается, задача совсем не простая как кажется на первый взгляд. А кроме того, я не поняла последний пост, поэтому отвечать буду на первый:)) Вопрос в том где выбранное измерение выбранно, если на одной из осей, то будет проблема, так как каждая из осей вычисляется независимо и в примере Маздая 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2003, 10:07 |
|
Вопрос по синтаксису MDX
|
|||
---|---|---|---|
#18+
Спасибо Ира! Потренеруюсь сейчас. По поводу "последнего" поста. Я всё пытаюсь решить проблему выбора единиц измерения и вывода в них количества. Я так понимаю есть два пути решения этой проблемы: 1. Создание виртуального куба. 1.1.Сделать, куб с данными по продажам (с мерой "Количество" в "базовых" единицах). 1.2. Сделать куб с измерениями "Товары", "Единица", а коэффициент пересчёта - в качестве меры этого куба. 1.3. Объедитнить это всё в один виртуальный куб, где коэффициент можно брать спокой но из меры. Но проблема в том что по виртуальным кубам сложно найти описание. Да и неизвестно, как такой кубик будет работать на больших массивах данных. Поэтому я пытаюсь решить проблему другим путём: 2.Попробовать обойтись без виртуального куба. Я так понимаю, мой набор данных (Товар, Единица, Коэффициент пересчёта) можно описать соответствующим измерением с реализацией каждого параметра, в качестве уровня измерения: [Коэффициент] |.Id_Tovar |..ID_Edinica |...K Т.е. товар может выводиться в нескольких единицах измерения (штуки, коробки, кг...), и на каждое сочетание Товар-Единица, существет есс-но только один коэффициент (почему я и применил firstChild в попытке примера : Коэффициенты].[ИзмерениеТовара.CurrentMember].[ИзмерениеЕдиницы.CurrentMember].firstChild.name ) И видимо Properties здесь ни как не применишь. Безусловным недостатком этого способа является ограничение со стороны количества членов в измерении. Но по моим подсчётом, пока это не актуально. Другое дело в том, что я не могу подобраться к известным мне членам. Вот выбрал пользователь в клиенте нужную единицу, и я её могу определить как [Единица].CurrentMember. Так же я знаю товар, который сейчас обрабатывается: [Товары].currentmember И в иерархии "Коэффициенты", для этой единицы и товара есть "К". Но как написать формулу??? Должно же это как то делаться..... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2003, 10:39 |
|
Вопрос по синтаксису MDX
|
|||
---|---|---|---|
#18+
И на всякий случай повторюсь. В качестве клиента пока используется Excel. Но так как что будет дальше неизвестно, то я пытаюсь всделать весь куб (в том числе и выч. члены) непосредственно средствами Cube Editor Analysis Manager. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2003, 11:13 |
|
Вопрос по синтаксису MDX
|
|||
---|---|---|---|
#18+
На самом деле виртуальные кубы очень сильная вещь, и при больших массивах данных будет работать намного быстрее, чем если городить огород из вычисляемых членов. А что значит "по виртуальным кубам сложно найти описание"? Что именно интересует? Ирина ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2003, 09:16 |
|
Вопрос по синтаксису MDX
|
|||
---|---|---|---|
#18+
Действительно, создание Виртуальных кубов оказалось не таким сложным делом :) Только я не понял. Когда надо процессить виртуальный куб? При внесении любых изменений в структуру включаемых кубов и/или измерений? И как долго он процессится на больших данных? Это получается что я должен отпроцессить ключаемые куба, а затем столько же времени (1 час) и виртуальный??? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2003, 10:49 |
|
Вопрос по синтаксису MDX
|
|||
---|---|---|---|
#18+
Сделал я своё любимое колоичество методом виртуального куба. И получил есс-ную проблему. Коэффициент выводится только если в таблице используется иерархия "Товары". Как только товары убираю - Mesuarues[K] становится есс-но ноль, и формула Mesuarues[Kol]/Mesuarues[K] даёт соответствующий результат:((( Можно ли это как нибудь обойти? И мож кто ответит на мой вопрос про процессинг виртуальных кубов? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2003, 14:17 |
|
|
start [/forum/topic.php?fid=49&msg=32094476&tid=1873560]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 254ms |
total: | 382ms |
0 / 0 |