#ssas #mdx
#ssas #многомерные выражения
Вопрос:
У меня есть запрос типа
WITH MEMBER [measures].[Count] AS
SUM(([Location].[Hierarchy].[Zone].[1].Children),[Measures].[Length])
SELECT {[measures].[Count]} ON 0,
{[Location].[Hierarchy].[Zone].amp;[1].Children} on 1
FROM [NTAP]
Я настоящий новичок в многомерных выражениях, но, насколько я понимаю, это должно дать мне список со всеми дочерними элементами зоны 1: s и суммированную длину всех этих дочерних элементов. Проблема в том, что я получаю список с дочерними элементами и сумму всей длины зоны 1: s?
Я понимаю это:
1 103026769420
2 103026769420
3 103026769420
4 103026769420
Но я хотел бы получить что-то вроде этого
1 84984958
2 9494949
3 934883
4 9458948588
Местоположение — это иерархия, подобная:
Дочерние зоны
1
1
2
3
2
1
2
3
редактировать: вероятно, следует сказать, что причина, по которой я использую с членом, заключается в том, что мера.длина будет с Iif в окончательной версии. Но я даже не могу заставить это работать: (
правка 2: исправлена орфография
Ответ №1:
Вы получаете сумму всех дочерних элементов зоны 1 для каждого дочернего элемента зоны 1.
Вы можете переписать его как:
WITH MEMBER [Measures].[Count] AS
SUM([Location].[Hierarchy].CurrentMember.Children, [Measures].[Length])
SELECT {[Measures].[Count]} ON 0,
{[Location].[Hierarchy].[Zone].amp;[1].Children} on 1
FROM [NTAP]
Кстати, [1] <> amp;[1]. Без amp; вы указываете имя, а с помощью — ключ. Если в вашем случае key = name, вам не о чем беспокоиться.
Комментарии:
1. Это не сработало, все, что я получил на этот раз, было 1 (null) 2 (null) 3 (null) 4 (null)
2. Есть ли какие-либо дочерние элементы в дочерних элементах зоны 1? Или это листья? Если это листья, вы не получите значимых результатов. Для исправления вы можете изменить запрос на: С ЧЛЕНОМ [Меры]. [Считать] КАК СУММУ ([Местоположение]. [Иерархия]. CurrentMember, [Измеряет]. [Длина]) ВЫБЕРИТЕ {[Меры]. [Количество]} НА 0, {[Местоположение]. [Иерархия]. [Зона].amp;[1]. Дочерние элементы} на 1 ИЗ [NTAP]
3. Большое спасибо, это было все, это было оставлено в зоне 1. Мне трудно понять, почему это работает? Мне кажется, что CurrentMember в рабочем запросе — это зона 1, а не листья под ней?
4. Ну, у вас есть дочерние элементы зоны 1 на оси СТРОК. Следовательно, функция CurrentMember выдаст вам их вместо самой зоны 1. Кстати, вы также можете пропустить вызов SUM. Если вы запрашиваете кортеж (location.currentmember, measure), вы должны получить то же самое, поскольку вы работаете только с одним членом.
5. Причина с самого начала с SUM заключается в том, что я хотел бы посчитать дочерние элементы зоны 1 длиной > 0 и планировал использовать SUM ([Местоположение]. [Иерархия]. CurrentMember,Iif([Измеряет]. [Длина]> 0, 1, 0) Но это не работает, все, что я получаю, это 1 во всех строках, есть идеи, почему?
Ответ №2:
Запрос, подсчитывающий дочерние элементы с L > 0, будет:
WITH
MEMBER [Measures].[Count of Children with L more than 0] AS
FILTER([Location].[Hierarchy].CurrentMember.Children,
[Measures].[Length] > 0).COUNT
SELECT
{
[Measures].[Count of Children with L more than 0]
} ON 0,
{
[Location].[Hierarchy].[Zone].amp;[1]
} ON 1
FROM [Your Cube]
Это, конечно, не сработает, если вы выберете дочерние элементы в строках, поскольку тогда вы получите NULL, поскольку они являются листьями и сами не имеют дочерних элементов.
Комментарии:
1. Извините, я думаю, что мое обозначение мер является своего рода плохим, Measures. Длина на самом деле не является единственным значением в зоне 1.Дочерние элементы. На самом деле может быть > 10000 значений длины в каждой зоне 1. Дочерние элементы, и я хотел бы подсчитать количество значений длины в каждом дочернем элементе. Извините, моя формулировка отстой…