powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Правило формирования UniqueName (AS 2000)
21 сообщений из 21, страница 1 из 1
Правило формирования UniqueName (AS 2000)
    #32543181
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что является необходимым и достаточным устовием, чтобы

Meber.UniqueName всегда возвращал стороку вида

Код: plaintext
[Customers].[All Customers].&[Country_key].&[Region_Key].&[City_Key].&[Customer_Key]

а не

Код: plaintext
[Customers].[All Customers].[Country_Name].[Region_Name].[City_Name].&[Customer_Name]
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32543185
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очепятка :-)

Имелось ввиду

Код: plaintext
[Customers].[All Customers].[Country_Name].[Region_Name].[City_Name].[Customer_Name]
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32543689
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему вас важна форма Unique Name ? Согласно OLEDB for OLAP, unique name является всего навсего уникальным идентификатором и не имеет никакой структуры. Провайдер может вернуть GUID если захочет. Полагаться на конкретную форму unique name - это очень опасно, потому что они могут меняться.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32543747
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моше

Во-первых, это же чертовски удобно :-) (только чур, апологетам OOП и прочих отраслей теологии не тащить меня сразу на костер)

из UniqueName выдернуть кучу полезной информации:
- Измерение,
- Номер Уровня,
- Показываемое имя.
и использовать UniqueName со 100% гарантией при построении MDX-запросов.

Во-вторых, работая с ADOMD (не .NET) и делая из Client-Server VB6 приложения 3-х звенку на С#, было "лень", да и бюджет проекта не позволял, воплотить полностью объектную модель ADOMD (не .NET) в С#, .NET pure. , да чтоб все это было сериализируемо и т.д... (в конце концов MSFT должен тоже мышей ловить).

Понимаю, что сэкономили, но такова жизнь, и цитируя посла России на Украине - "хотели как лучше, а получилось как всегда" - но мир то не идеален.
А ваше намек, что в один прекрасный день я могу получить в UniqueName ничего не говорящий GUID, я принимаю к сведению, как руководство к действию.

p.s Я мог бы это написать на "волне отличном" английском, но было бы ужасно сухо и безчувственно, а душа то тоже хочет слово замолвить.
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32544054
Фотография Валек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мда уж Моша обнадежил, эх а так просто все было тянуть из UniqueName 8-/
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32544348
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята - я не понимаю в чем проблема. Практически единственный способ получить member unique name - это из MDSCHEMA_MEMBERS schema rowset. Там есть и имя иерархии, и имя уровня, и просто имя - зачем парсить unique name ?

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32545057
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моше

А проблема в том, что работать с ADODB.Connection.OpenSchema, учитывая "подробность" и "доходчивость" документации по ADOMD и "квалифицированность" второго параметра OpenSchema - удовольствие ниже среднего - чуть ошибся в составлении object Array и ищи - "почему я не верблюд".

Во вторых, только начиная с ADOMD.NET в документации появилось в явном виде.
ADOMD.NET SDK (Member.UniqueName Property)The UniqueName property returns the fully-qualified unique name of the Member. To get the member name of the Member, use the Name property.
Warning Because this value is provider specific and may change in the future, it should be used in whole, and not be parsed.

но как это вяжется с

ADOMD.NET SDK (Member.Name Property)Using the member key ensures precise member identification in these cases. The ampersand (&) character is used in Multidimensional Expressions (MDX) to differentiate a member key from a member name, as shown in the following example:

[Time].[Time].[2nd half].&[Q4]
In this case, the member key of the fourth quarter member, Q4, is used.

The Name property returns the member name of the Member. To get the member key of a Member, use the UniqueName property.

Что же это получается - в доке по Member.UniqueName предупреждается, что форма UniqueName не гарантипрвана, и не надо интерпретировать содержание. А в доке по Member.Name предлагается "выуживать" member key из UniqueName.

Вот в этом то и наши проблемы - как получать member key, не используя "фичи" и work around и гарантировать независимость от "provider specific and may change in the future".
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32545616
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
backfireВо вторых, только начиная с ADOMD.NET в документации появилось в явном виде.
ADOMD.NET SDK (Member.UniqueName Property)
The UniqueName property returns the fully-qualified unique name of the Member. To get the member name of the Member, use the Name property.
Warning Because this value is provider specific and may change in the future, it should be used in whole, and not be parsed.

Это не совсем верно. Еще в самой первой версии OLEDB for OLAP которая вышла в 1997 году была следующая глава "Provider Implementation Considerations for Unique Names":

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/oledb/htm/olapprovider_implementation_for_unique_names.asp

Там в частности написано что провайдеры вольны строить unique names как им захочется.

backfireTo get the member key of a Member, use the UniqueName property.

Это серьезная ошибка в документации - большое спасибо что Вы ее заметили. Мы во время tech review это пропустили :( Я открою на это дело баг.

backfireВот в этом то и наши проблемы - как получать member key, не используя "фичи" и work around и гарантировать независимость от "provider specific and may change in the future".

На это я дам два ответа:

1. А зачем Вам нужно знать key ?
2. А вот в Юконе это будет можно :)

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32545624
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МошаНа это я дам два ответа:

1. А зачем Вам нужно знать key ?

Давайте дружно посмеемся, вы знаете над чем :-)
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32545629
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МошаНа это я дам два ответа:

1. А зачем Вам нужно знать key ?
2. А вот в Юконе это будет можно :)

Ну если в Юконе это будет можно (значит это, что с выходом AS 2005 интерфейсы ADOMD.NET и XMLA еще раз поменяют?), то значит это кому то нужно.
Нужно и мне, для 1000 дел.

Одно из них симбиоз SQL и AS. Необходима 100% однозначная идентификация записей в таблицах измерений (фактов) SQL и членов измерений AS. Я уже рассказывал о моей реализации Write-Back.
Затем, на больших измерениях - например "клиенты" или "товары", использовать ADOMD.Catalog и все что в нем для интерактивного выбора элементов измерений - смерти подобно. Вместо этого идем к таблице измерения в SQL - благо дело, там все летает.
Продолжать можно долго.

МошаЭто не совсем верно. Еще в самой первой версии OLEDB for OLAP которая вышла в 1997 году была следующая глава "Provider Implementation Considerations for Unique Names":

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/oledb/htm/olapprovider_implementation_for_unique_names.asp

Там в частности написано что провайдеры вольны строить unique names как им захочется.

Это верно, но как разработчик приложений к SQL и AS я привык сверяться с BOL, а там по этому поводу, применительно к ADOMD не сказано ничего. :-(
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32545636
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моше

Ну а вопрос то изначальный остался совсем без ответа :-(

thisЧто является необходимым и достаточным устовием, чтобы

Meber.UniqueName всегда возвращал стороку вида

[Customers].[All Customers].&[Country_key].&[Region_Key].&[City_Key].&[Customer_Key]

а не

[Customers].[All Customers].[Country_Name].[Region_Name].[City_Name].[Customer_Name]

Ответ же существует? :-) И вы его знаете.

Самое проблематичное, не в том, что провайдер волен стиль UniqueName, что само по себе "безобразие", а в том, что UniqueName меняетс в зависимости от свойств уникальности имен и ключей в измерении и еще каких то темных факторов. Я вот только никак не выведу закономерность, а поэтому и попросил о помощи. Подозреваю что ADOMD.NET отличается от ADOMD, что добавляет нам головной боли.

По поводу "безобразия".
Представьте себе. Аналитическое приложение. Пользователи насоздавали отчетов и сделали их persistent (сохранили их).
В каком же виде будет по-уму сохранять информацию о выбранных Members и прочих составляющих из которых потом MDX запрос построится, если вид UniqueName не гарантируется при переходе с версии на версию?
Или для каждого измерения надо создать UserDefinedProperty класть туда ключ, к норальному MemberKey ведь просто так не подобраться, - по нему запоминать Members. Это будет железобетонно, но с производительностью доступа к UserDefinedProperty это мертворожденное решение.

Вот и получается, что вы говорите как не стоит делать, а как стоит к сожалению не говорите :-)
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32547422
DmitryS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может, я прочитал невнимательно, но чем Properties("key") не катит?
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32547460
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, я прочитал невнимательно, но чем Properties("key") не катит?

Получить то его я могу, а вот можно ли по нему найти - стоит под знаком большого вопроса в силу "подробнейшей" документированности.
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32547512
DmitryS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вас что-то не понимаю. UniqueName действительно может вернуть Бог знамо что, но что по key найти нельзя, никто, вроде, не утверждал. Или я ошибаюсь? А то сам на днях это использовал.
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32547522
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но что по key найти нельзя, никто, вроде, не утверждал. Или я ошибаюсь? А то сам на днях это использовал.

Вот именно что нигде не написано, что по нему можно найти.
key доступен только как Property, а по Prperty согласно ADOMD (ADOMD.NET) найти Member нельзя (ну или только через ж...).

Так что Properties("MEMEBER_KEY") на сегодняшний ничем не лучше и не хуже UniqueName.
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32547556
DmitryS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стоп. Имея ключи, вы можете слепить строку первого вида - см. свой первый пост. От неё Members взять. И всё получите. Или я что-то недопонял? Я так делал как-то.
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32560938
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне кажется, что в этой дискуссии смешано несколько понятий. Я попытаюсь рассмотреть какая между ними разница.

1. Member Unique Name - это уникальный идентификатор мембера. Он гарантирован быть одним и тем же если в кубе не было structural changes. Т.е. неважно как получен этот самый member unique name - через OLEDB, XMLA, ADOMD, ADOMD.NET и т.д. - он будет один и тот же. Куб который переехал из AS2000 в Юкон тоже должен сохранить unique names. Иначе, как заметил backfire, будет проблема с persisted views. Форма unique name никому не гарантирована.

2. Member Qualified Name - это форма по которой можно найти мембер в измерении, но она не гарантирована быть уникальной. Т.е. мембер
Заказчик.Россия.Ленинград.ВасяПупкин, может быть а может и не быть уникальным. Аппликация которая пользуется qualified name, должна знать можно или нельзя его использовать. Иногда AS2K решает использовать member qualified name в качестве member unique name, когда он знает наверняка что тот будет уникален.

3. Member Name Qualified By Key - это форма когда мембер в измерении находится по его ключу а не по имени. Это как правило уникально (хотя и не обязано быть таковым). Даже если member unique name не построен по принципу hierarchy.level.&key - все равно если ключ уникален на уровне, то такая форма будет работать не хуже member unique name.

Я всегда рекоммендую разработчикам оставаться в рамках куба и пользоваться только member unique name, потому что только такой подход является 100% правильным и совместимым с будующими версиями. Единственное для чего в AS2K нужны keys - это для dimension writeback, все остальное можно сделать не выходя наружу.
Иногда разработчики решают по какой-либо причине использовать ключи напрямую (нету времени сделать правильно, оптимизация производительности и т.д.).

Итог: никто не должен угадывать или парсить unique names, AS2K найдет мемберов и по ключам (см. форму 3) если есть надобность.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32561701
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MoshaЯ всегда рекоммендую разработчикам оставаться в рамках куба и пользоваться только member unique name, потому что только такой подход является 100% правильным и совместимым с будующими версиями. Единственное для чего в AS2K нужны keys - это для dimension writeback, все остальное можно сделать не выходя наружу.
Иногда разработчики решают по какой-либо причине использовать ключи напрямую (нету времени сделать правильно, оптимизация производительности и т.д.).

Полность с Вами согласен.

Но - мир не идеален и бюджеты проектов не резиновые, приходится иногда и экономить. :-)

Производительность тоже немаловажный фактор и 64к на запрос никто не отменял. Прозводительность же больших измерений оставляет желать лучшего.

Поэтому хотелось бы услышать ваши рекомендации как для дизайна измерений, так и для формирования запросов, чтобы:
- не терять производительность,
- не иметь проблем при смене версии
- не писать лишнего кода.
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32624304
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mosha
backfireTo get the member key of a Member, use the UniqueName property.

Это серьезная ошибка в документации - большое спасибо что Вы ее заметили. Мы во время tech review это пропустили :( Я открою на это дело баг.




Вот что мы читаем в доке к ADOMD.NET к свежайшей Beta 2.

ADOMD.NET Member.Name PropertyThe Name property returns the member name of the Member. To get the member key of a Member, use the UniqueName property.

Либо баг не пофиксен, либо нас снова подбивают парсить UniqueName.
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32625111
Gvynt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И всё-таки, для тех, кто хочет рисковать нарваться на несовместимости при переходе на следующие версии: каким образом OLE BD for OLAP формирует UniqueName?
...
Рейтинг: 0 / 0
Правило формирования UniqueName (AS 2000)
    #32625149
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GvyntИ всё-таки, для тех, кто хочет рисковать нарваться на несовместимости при переходе на следующие версии: каким образом OLE BD for OLAP формирует UniqueName?

Я сам бы хотел знать исчерпывающий ответ на этот вопрос.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Правило формирования UniqueName (AS 2000)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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