Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 Поиск в иерархии  [new]
chenix
Member

Откуда:
Сообщений: 14
Здравствуйте.

Есть иерархия:

Картинка с другого сайта.

Из неё нужно получить элемент иерархии (Uniquename) по ID.
Сейчас это делаю так:

WITH
MEMBER [Measures].[Uniquename] AS [Work Item Tree].[Work Item Tree Hierarchy].CurrentMember.Uniquename
SELECT {[Measures].[Uniquename]} ON 0,
FILTER 
( 
	(Descendants([Work Item Tree].[Work Item Tree Hierarchy].[Work Item Tree], [Work Item].[System_Id].&[12345])),
	[Work Item].[System_Id].&[12345]
)
ON 1
FROM [Work Item]


При этом возвращается не искомый, а родительский элемент, в котором он находится.
Как получить искомый?
1 окт 18, 14:17    [21691254]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
chenix
Member

Откуда:
Сообщений: 14
Дело в том что искомый член находится в разных иерархиях: Work Item Tree, Work Item Tree 1, Work Item Tree 2, Work Item Tree 3, ...
Как его искать сразу в нескольких иерархиях?
2 окт 18, 13:20    [21692551]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
vikkiv
Member

Откуда: London
Сообщений: 1650
chenix,

1) Если нужно вывести элемент зная его уникальный идентификатор - то зачем выполнять поиск? Прямо его и пиши на ось.
2) Точно-ли на других уровнях этот-же элемент? Выведи ключ рядом и проверь (скорее всего он окажется другим, например &[123] и &[124]). Имя может совпадать, а ключи наверное разные.
2 окт 18, 16:26    [21692940]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
vikkiv
Member

Откуда: London
Сообщений: 1650
3) Выполни поиск по имени элемента : через Filter (.. , instr()>0)
2 окт 18, 16:28    [21692946]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
chenix
Member

Откуда:
Сообщений: 14
1) В этом и проблема - нужно узнать идентификатор, чтобы в дальнейшем с ним работать через параметры в SSRS.
2) На каждом уровне разные элементы, но они связаны.

Я мог бы получить это так:

WITH
MEMBER [Measures].[Uniquename] AS [Work Item Tree].[Work Item Tree Hierarchy].CurrentMember.Uniquename
SELECT {[Measures].[Uniquename]} ON 0,
nonempty(
{[Work Item Tree].[Work Item Tree Hierarchy].[Work Item Tree],
[Work Item Tree].[Work Item Tree Hierarchy].[Work Item Tree 1],
[Work Item Tree].[Work Item Tree Hierarchy].[Work Item Tree 2]},
[Work Item].[System_Id].&[12345]
)
ON 1
FROM [Work Item]


И это работает, но я не знаю на каком уровне окажется искомый элемент.
Если указываю лишний уровень, на котором его нет, то получаю исключение:

Executing the query ...
Внутренняя ошибка: Возникло непредвиденное исключение.
Run complete


vikkiv
chenix,

1) Если нужно вывести элемент зная его уникальный идентификатор - то зачем выполнять поиск? Прямо его и пиши на ось.
2) Точно-ли на других уровнях этот-же элемент? Выведи ключ рядом и проверь (скорее всего он окажется другим, например &[123] и &[124]). Имя может совпадать, а ключи наверное разные.
2 окт 18, 17:08    [21693014]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
vikkiv
Member

Откуда: London
Сообщений: 1650
chenix,

Т.е. тебе нужно выполнить поиск на только на выбранном уровне?
в таком случае можно использовать свойства элемента, такие как:
например для поиска по имени .member_caption или .member_name
для идентификации уровня level.name или .level.ordinal
всё это ставится условием в фильтр откуда и получается искомый идентификатор элемента к примеру через .member_unique_name
2 окт 18, 17:33    [21693046]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
vikkiv
Member

Откуда: London
Сообщений: 1650
например
with --// полный список
member[Measures].[_x1]as[Employee].[Employees].level.name
member[Measures].[_x2]as[Employee].[Employees].level.ordinal
member[Measures].[_x3]as[Employee].[Employees].member_caption
member[Measures].[_x4]as[Employee].[Employees].member_name
member[Measures].[_x5]as[Employee].[Employees].member_unique_name
member[Measures].[_x6]as[Employee].[Employees].member_key
select{[Measures].[_x1],[Measures].[_x2],[Measures].[_x3],[Measures].[_x4],[Measures].[_x5],[Measures].[_x6]}on 0,
order([Employee].[Employees].members,[Employee].[Employees].currentmember.member_caption,basc)on 1
from[Adventure Works];
go

with --// фильтрованный
member[Measures].[_x1]as[Employee].[Employees].level.name
member[Measures].[_x2]as[Employee].[Employees].level.ordinal
member[Measures].[_x3]as[Employee].[Employees].member_caption
member[Measures].[_x4]as[Employee].[Employees].member_name
member[Measures].[_x5]as[Employee].[Employees].member_unique_name
member[Measures].[_x6]as[Employee].[Employees].member_key
select{[Measures].[_x1],[Measures].[_x2],[Measures].[_x3],[Measures].[_x4],[Measures].[_x5],[Measures].[_x6]}on 0,
filter([Employee].[Employees].members,instr([Employee].[Employees].member_caption,'Sheela')>0 and[Employee].[Employees].level.ordinal=4)on 1
from[Adventure Works]
2 окт 18, 17:45    [21693061]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
chenix
Member

Откуда:
Сообщений: 14
vikkiv
chenix,

Т.е. тебе нужно выполнить поиск на только на выбранном уровне?
в таком случае можно использовать свойства элемента, такие как:
например для поиска по имени .member_caption или .member_name
для идентификации уровня level.name или .level.ordinal
всё это ставится условием в фильтр откуда и получается искомый идентификатор элемента к примеру через .member_unique_name

Нужно во всех иерархиях найти элемент (его идентификатор, например: [Work Item Tree].[Work Item Tree Hierarchy].&[7654321]) с заданным ID (параметр).
После этого идентификатор будет использоваться в других запросах.
2 окт 18, 17:45    [21693063]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
vikkiv
Member

Откуда: London
Сообщений: 1650
chenix,

у тебя слово идентификатор (по формату: ключ) - в единственном числе, и встречаться он будет скорее всего только на одном уровне (иерархии) и только один раз
что значит "во всех иерархиях"? для разных иерархий - разные запросы, в пределах одной иерархии - могут быть разные уровни.
2 окт 18, 17:57    [21693077]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
vikkiv
Member

Откуда: London
Сообщений: 1650
.. для поиска (конвертации между) известного элемента в разных иерархиях - можно использовать MDX функцию LinkMember(), работает так-же и между разными Role-Playing измерениями (т.е. если корневое измерение в базе данных одно и тоже).
2 окт 18, 18:13    [21693098]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
chenix
Member

Откуда:
Сообщений: 14
vikkiv
chenix,

у тебя слово идентификатор (по формату: ключ) - в единственном числе, и встречаться он будет скорее всего только на одном уровне (иерархии) и только один раз
что значит "во всех иерархиях"? для разных иерархий - разные запросы, в пределах одной иерархии - могут быть разные уровни.

Переформулирую, как в иерархии (на всех уровнях) найти нужный элемент (его идентификатор - Uniquename, &) с заданным ID (это отельный параметр у члена иерархии)
Картинка с другого сайта.
2 окт 18, 18:13    [21693099]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
vikkiv
Member

Откуда: London
Сообщений: 1650
chenix,

как задаётся этот ID (отдельный параметр у члена иерархии)?
можешь привести пример его MDX выражения?
(это Properties, имя {а не ключ}, какой-то связанный элемент
{хотя у тебя на диаграмме только один дополнительный атрибут не используемый в запросе})

в обычных иерархиях то что у тебя в начале Descendants - обычно справляется с поиском всех подчинённых (если поставить правильные флаги)

если поиск только по имени - то уже указано выше, если по другим критериям - то приведи их достаточно точно в MDX формате(пока это всего-лишь какой-то мистический ID).
2 окт 18, 18:28    [21693119]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
chenix
Member

Откуда:
Сообщений: 14
vikkiv,
ID вполне себе реальный, это параметр члена иерархии.

Например,

WITH
MEMBER [Measures].[Uniquename] AS [Work Item Tree].[Work Item Tree Hierarchy].CurrentMember.Uniquename
MEMBER [Measures].[System_Id] AS [Work Item Tree].[Work Item Tree Hierarchy].Properties( "System_Id" )
SELECT {[Measures].[Uniquename], [Measures].[System_Id]} ON 0,
[Work Item Tree].[Work Item Tree Hierarchy].&[328370] ON 1
FROM [Work Item]

Возвращает:
Картинка с другого сайта.
2 окт 18, 18:42    [21693141]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
vikkiv
Member

Откуда: London
Сообщений: 1650
chenix,

тогда твоё выражение и идёт в критерий фильтра, например (критерий 3):
with
member[Measures].[_x1]as[Account].[Accounts].level.name
member[Measures].[_x2]as[Account].[Accounts].level.ordinal
member[Measures].[_x3]as[Account].[Accounts].member_caption
member[Measures].[_x4]as[Account].[Accounts].member_name
member[Measures].[_x5]as[Account].[Accounts].member_unique_name
member[Measures].[_x6]as[Account].[Accounts].member_key
member[Measures].[_x7]as[Account].[Accounts].parent.member_key
member[Measures].[_x8]as[Account].[Accounts].Properties('Account Number')
member[Measures].[_x9]as[Account].[Accounts].Properties('Account Type')
select{[Measures].[_x1],[Measures].[_x2],[Measures].[_x3],[Measures].[_x4],[Measures].[_x5]
,[Measures].[_x6],[Measures].[_x7],[Measures].[_x8],[Measures].[_x9]}on 0,
filter([Account].[Accounts].members,
	instr([Account].[Accounts].member_caption,'a')>0 --//критерий 1
	--and[Account].[Accounts].level.ordinal=4           --//критерий 2
	and[Account].[Accounts].Properties('Account Type')='Assets' --//критерий 3
	)
on 1from[Adventure Works]
2 окт 18, 19:24    [21693197]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
chenix
Member

Откуда:
Сообщений: 14
Увы, не выходит.

WITH
MEMBER [Measures].[Uniquename] AS [Work Item Tree].[Work Item Tree Hierarchy].CurrentMember.Uniquename
MEMBER [Measures].[System_Id] AS [Work Item Tree].[Work Item Tree Hierarchy].CurrentMember.Properties( "System_Id" )
MEMBER [Measures].[Caption] AS [Work Item Tree].[Work Item Tree Hierarchy].CurrentMember.member_caption
SELECT {[Measures].[Uniquename], [Measures].[System_Id], [Measures].[Caption]} ON 0,
FILTER
(
	[Work Item Tree].[Work Item Tree Hierarchy].members,
	instr([Measures].[Caption],'Feature') > 0 AND [Measures].[System_Id]='44863'
)
ON 1
FROM [Work Item]


Executing the query ...
Внутренняя ошибка: Возникло непредвиденное исключение.
Run complete
2 окт 18, 20:07    [21693270]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
vikkiv
Member

Откуда: London
Сообщений: 1650
chenix,

классический debug - отвинчиваешь все элементы и прикручиваешь по одному чтобы определить что именно ломает схему.
например сначала пробуй с .member_key а потом с .Properties(...)
WITH
MEMBER[Measures].[System_Id]AS
[Work Item Tree].[Work Item Tree Hierarchy]
.Properties('System_Id')
--.member_key
SELECT[Measures].[System_Id]ON 0,
head([Work Item Tree].[Work Item Tree Hierarchy].members,20)
ON 1FROM[Work Item]
и так далее наращивая сложность
2 окт 18, 20:20    [21693284]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
chenix
Member

Откуда:
Сообщений: 14
vikkiv
chenix,

классический debug - отвинчиваешь все элементы и прикручиваешь по одному чтобы определить что именно ломает схему.
например сначала пробуй с .member_key а потом с .Properties(...)
WITH
MEMBER[Measures].[System_Id]AS
[Work Item Tree].[Work Item Tree Hierarchy]
.Properties('System_Id')
--.member_key
SELECT[Measures].[System_Id]ON 0,
head([Work Item Tree].[Work Item Tree Hierarchy].members,20)
ON 1FROM[Work Item]
и так далее наращивая сложность

Аналог,
Executing the query ...
Внутренняя ошибка: Возникло непредвиденное исключение.
Run complete
2 окт 18, 20:53    [21693328]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
vikkiv
Member

Откуда: London
Сообщений: 1650
chenix,

по моему явно что-то сломано, скорей всего придётся чинить структуру базы, или смотреть права доступа, может даже проверить есть-ли там ROLAP на всякий случай (хотя вряд-ли т.к. это обычно на всё измерение, а здесь остальные атрибуты работают, если только что-то с правами на SQL базу или со структурой SQL таблицы), почистить поле (тип данных, длинна, левые символы в строке)

для полноты картины разверни где-нибудь на свободном сервере и отпроцесь урезанное решение в котором 2-3 малых измерения (включая это, попробуй даже ограничь количество элементов в каждом атрибуте измерения до Top 1000) и символическая группа мер без скриптов, убрать атрибуты до минимума, проверить связи (и тип) между ними, тип измерений (и есть-ли связи между ними типа Referenced)
смотри как там MDX запрос отработает. поставить последнее обновление на сервер, проверить работу решения на другом сервере (может даже с более новой SQL версией).

в общем копать на исключение одной возможной проблемы за другой.
2 окт 18, 21:16    [21693357]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
chenix
Member

Откуда:
Сообщений: 14
vikkiv
chenix,

по моему явно что-то сломано, скорей всего придётся чинить структуру базы, или смотреть права доступа, может даже проверить есть-ли там ROLAP на всякий случай (хотя вряд-ли т.к. это обычно на всё измерение, а здесь остальные атрибуты работают, если только что-то с правами на SQL базу или со структурой SQL таблицы), почистить поле (тип данных, длинна, левые символы в строке)

для полноты картины разверни где-нибудь на свободном сервере и отпроцесь урезанное решение в котором 2-3 малых измерения (включая это, попробуй даже ограничь количество элементов в каждом атрибуте измерения до Top 1000) и символическая группа мер без скриптов, убрать атрибуты до минимума, проверить связи (и тип) между ними, тип измерений (и есть-ли связи между ними типа Referenced)
смотри как там MDX запрос отработает. поставить последнее обновление на сервер, проверить работу решения на другом сервере (может даже с более новой SQL версией).

в общем копать на исключение одной возможной проблемы за другой.

Спасибо.
Это "проприетарный" куб, который создает TFS, в него не вносились какие-либо коррективы.
2 окт 18, 21:23    [21693360]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
vikkiv
Member

Откуда: London
Сообщений: 1650
как альтернатива - попробуй добавь в атрибут (если он Browsable) который System_Id в запрос (CrossJoin) и выводи вместо Properties для [Work Item Tree Hierarchy] - собственно имя самого элемента атрибута содержащего System_Id
2 окт 18, 21:24    [21693362]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
vikkiv
Member

Откуда: London
Сообщений: 1650
vikkiv
в
2 окт 18, 21:24    [21693363]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
vikkiv
Member

Откуда: London
Сообщений: 1650
chenix
..Это "проприетарный" куб, который создает TFS, в него не вносились какие-либо коррективы.
ну так делов-то, сделай с него копию и внеси нужные изменения для проверки
2 окт 18, 21:25    [21693364]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
chenix
Member

Откуда:
Сообщений: 14
vikkiv
chenix
..Это "проприетарный" куб, который создает TFS, в него не вносились какие-либо коррективы.
ну так делов-то, сделай с него копию и внеси нужные изменения для проверки

Создать копию без проблем, но на счет правок куба - пока нет уверенности)
2 окт 18, 21:29    [21693369]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
vikkiv
Member

Откуда: London
Сообщений: 1650
chenix,

ну это уже чисто опыт разработчика, импортировать SSAS базу в Visual Studio тестовый проект и раздеть до минимума (оставить нужное измерение, выкинуть скрипты, и группы мер кроме одной минимальной/фиктивной) да развернуть на проверочный сервер на своё имя базы - вопрос обычно минут пяти-десяти, потом главное чтобы доступ к SQL источнику был, и вопрос решен.
2 окт 18, 21:40    [21693380]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в иерархии  [new]
chenix
Member

Откуда:
Сообщений: 14
vikkiv
chenix,

ну это уже чисто опыт разработчика, импортировать SSAS базу в Visual Studio тестовый проект и раздеть до минимума (оставить нужное измерение, выкинуть скрипты, и группы мер кроме одной минимальной/фиктивной) да развернуть на проверочный сервер на своё имя базы - вопрос обычно минут пяти-десяти, потом главное чтобы доступ к SQL источнику был, и вопрос решен.

Возможно, но я не настоящий сварщик.
Я администратор, которого занесло в BI (MDX+SSAS+SSRS).
2 окт 18, 21:44    [21693390]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить