powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Поиск в иерархии
25 сообщений из 25, страница 1 из 1
Поиск в иерархии
    #39710938
chenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

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



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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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]



При этом возвращается не искомый, а родительский элемент, в котором он находится.
Как получить искомый?
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39711629
chenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в том что искомый член находится в разных иерархиях: Work Item Tree, Work Item Tree 1, Work Item Tree 2, Work Item Tree 3, ...
Как его искать сразу в нескольких иерархиях?
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39711816
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chenix,

1) Если нужно вывести элемент зная его уникальный идентификатор - то зачем выполнять поиск? Прямо его и пиши на ось.
2) Точно-ли на других уровнях этот-же элемент? Выведи ключ рядом и проверь (скорее всего он окажется другим, например &[123] и &[124]). Имя может совпадать, а ключи наверное разные.
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39711818
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3) Выполни поиск по имени элемента : через Filter (.. , instr()>0)
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39711850
chenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) В этом и проблема - нужно узнать идентификатор, чтобы в дальнейшем с ним работать через параметры в SSRS.
2) На каждом уровне разные элементы, но они связаны.

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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]



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

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



vikkivchenix,

1) Если нужно вывести элемент зная его уникальный идентификатор - то зачем выполнять поиск? Прямо его и пиши на ось.
2) Точно-ли на других уровнях этот-же элемент? Выведи ключ рядом и проверь (скорее всего он окажется другим, например &[123] и &[124]). Имя может совпадать, а ключи наверное разные.
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39711871
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chenix,

Т.е. тебе нужно выполнить поиск на только на выбранном уровне?
в таком случае можно использовать свойства элемента, такие как:
например для поиска по имени .member_caption или .member_name
для идентификации уровня level.name или .level.ordinal
всё это ставится условием в фильтр откуда и получается искомый идентификатор элемента к примеру через .member_unique_name
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39711882
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
например
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
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]
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39711883
chenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vikkivchenix,

Т.е. тебе нужно выполнить поиск на только на выбранном уровне?
в таком случае можно использовать свойства элемента, такие как:
например для поиска по имени .member_caption или .member_name
для идентификации уровня level.name или .level.ordinal
всё это ставится условием в фильтр откуда и получается искомый идентификатор элемента к примеру через .member_unique_name
Нужно во всех иерархиях найти элемент (его идентификатор, например: [Work Item Tree].[Work Item Tree Hierarchy].&[7654321]) с заданным ID (параметр).
После этого идентификатор будет использоваться в других запросах.
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39711896
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chenix,

у тебя слово идентификатор (по формату: ключ) - в единственном числе, и встречаться он будет скорее всего только на одном уровне (иерархии) и только один раз
что значит "во всех иерархиях"? для разных иерархий - разные запросы, в пределах одной иерархии - могут быть разные уровни.
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39711915
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.. для поиска (конвертации между) известного элемента в разных иерархиях - можно использовать MDX функцию LinkMember(), работает так-же и между разными Role-Playing измерениями (т.е. если корневое измерение в базе данных одно и тоже).
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39711916
chenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vikkivchenix,

у тебя слово идентификатор (по формату: ключ) - в единственном числе, и встречаться он будет скорее всего только на одном уровне (иерархии) и только один раз
что значит "во всех иерархиях"? для разных иерархий - разные запросы, в пределах одной иерархии - могут быть разные уровни.
Переформулирую, как в иерархии (на всех уровнях) найти нужный элемент (его идентификатор - Uniquename, &) с заданным ID (это отельный параметр у члена иерархии)
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39711932
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chenix,

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

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

если поиск только по имени - то уже указано выше, если по другим критериям - то приведи их достаточно точно в MDX формате(пока это всего-лишь какой-то мистический ID).
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39711952
chenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vikkiv,
ID вполне себе реальный, это параметр члена иерархии.

Например,

Код: sql
1.
2.
3.
4.
5.
6.
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]


Возвращает:
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39711981
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chenix,

тогда твоё выражение и идёт в критерий фильтра, например (критерий 3):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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]
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39712035
chenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Увы, не выходит.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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]



Код: sql
1.
2.
3.
Executing the query ...
Внутренняя ошибка: Возникло непредвиденное исключение.
Run complete
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39712039
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chenix,

классический debug - отвинчиваешь все элементы и прикручиваешь по одному чтобы определить что именно ломает схему.
например сначала пробуй с .member_key а потом с .Properties(...)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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]

и так далее наращивая сложность
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39712069
chenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vikkivchenix,

классический debug - отвинчиваешь все элементы и прикручиваешь по одному чтобы определить что именно ломает схему.
например сначала пробуй с .member_key а потом с .Properties(...)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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]

и так далее наращивая сложность
Аналог,
Код: sql
1.
2.
3.
Executing the query ...
Внутренняя ошибка: Возникло непредвиденное исключение.
Run complete
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39712084
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chenix,

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

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

в общем копать на исключение одной возможной проблемы за другой.
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39712086
chenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vikkivchenix,

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

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

в общем копать на исключение одной возможной проблемы за другой.
Спасибо.
Это "проприетарный" куб, который создает TFS, в него не вносились какие-либо коррективы.
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39712087
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как альтернатива - попробуй добавь в атрибут (если он Browsable) который System_Id в запрос (CrossJoin) и выводи вместо Properties для [Work Item Tree Hierarchy] - собственно имя самого элемента атрибута содержащего System_Id
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39712088
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkivв
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39712089
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chenix..Это "проприетарный" куб, который создает TFS, в него не вносились какие-либо коррективы.ну так делов-то, сделай с него копию и внеси нужные изменения для проверки
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39712091
chenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vikkivchenix..Это "проприетарный" куб, который создает TFS, в него не вносились какие-либо коррективы.ну так делов-то, сделай с него копию и внеси нужные изменения для проверки
Создать копию без проблем, но на счет правок куба - пока нет уверенности)
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39712096
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chenix,

ну это уже чисто опыт разработчика, импортировать SSAS базу в Visual Studio тестовый проект и раздеть до минимума (оставить нужное измерение, выкинуть скрипты, и группы мер кроме одной минимальной/фиктивной) да развернуть на проверочный сервер на своё имя базы - вопрос обычно минут пяти-десяти, потом главное чтобы доступ к SQL источнику был, и вопрос решен.
...
Рейтинг: 0 / 0
Поиск в иерархии
    #39712097
chenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vikkivchenix,

ну это уже чисто опыт разработчика, импортировать SSAS базу в Visual Studio тестовый проект и раздеть до минимума (оставить нужное измерение, выкинуть скрипты, и группы мер кроме одной минимальной/фиктивной) да развернуть на проверочный сервер на своё имя базы - вопрос обычно минут пяти-десяти, потом главное чтобы доступ к SQL источнику был, и вопрос решен.
Возможно, но я не настоящий сварщик.
Я администратор, которого занесло в BI (MDX+SSAS+SSRS).
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Поиск в иерархии
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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