powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / SSAS 2012 MDX-запрос
6 сообщений из 6, страница 1 из 1
SSAS 2012 MDX-запрос
    #39457932
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello World!
Есть запрос, который должен возвращать количество брендов, которые продавались в 2016 и товар - не перекупка
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
WITH SET [Product1] AS 
	 NONEMPTY(
		  EXISTING([Product].[Brand].[Brand].members), 
		  [Measures].[Прибыль на дату продажи, р]
		 )
	 MEMBER [Measures].Profit1 as [Product1].count
select {[Measures].[Прибыль на дату продажи, р],
		[Measures].Profit1 }  ON 0,
		[Product1]  ON 1
FROM	[Cube]
WHERE	([Sale Date].[Year].&[2016], [Product].[Признак Перекупки].[НеПерекупка])


Результат
Бренды Прибыль р. Profit1<Нет> 235 592.62 510A/S Wodschow & Co 614 138.99 510Abat 34 212 891.23 510Abbott 2 958 817.65 510Abert 584 453.01 510 и так далее ...

ЭРГ-AL 6 789.51 510ЭРТИЛЬСКИЙ ЗАВОД 113 863.06 510ЮМТ-ИНДАСТРИ 45 696.00 510Юнитрейд 2 377 628.94 510 Всего 510 записей

Также в кубе есть калк мембер:
Код: sql
1.
2.
3.
4.
CREATE MEMBER CURRENTCUBE.[Measures].[Продажи. КолВо Брендов]
AS (NONEMPTY(EXISTING([Product].[Brand].[Brand].MEMBERS), [Measures].[Прибыль на дату продажи, р])).Count, 
FORMAT_STRING = "#,##;-#,##", 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Sale';    

Который дает несколько другой результат(см. скрин)

1.
Подскажите, действительно ли в обоих случаях необходимо использоваль конструкцию
Код: sql
1.
EXISTING([Product].[Brand].[Brand].members)

или достаточно
Код: sql
1.
[Product].[Brand].[Brand]


2.
Из-за чего результаты отличаются?
...
Рейтинг: 0 / 0
SSAS 2012 MDX-запрос
    #39464278
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,
Эти вопросы слишком простые или сложные?
...
Рейтинг: 0 / 0
SSAS 2012 MDX-запрос
    #39464871
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

Скучные скорее..

разные результаты потому, что используются видимо разные клиенты.
разница от настроек подключения до конечного запроса.

что касается 510 и 1 в "кол-ве брендов"
в первом случае указан вычисляемый набор, если нет слова Dynamic, значит он вычисляется (набор) один единственный раз до вычисления осей в контексте WHERE. отсюда непустых значений всегда 510.
во втором случае, набор перевычисляется каждый раз когда идет расчет ячейки и контекст теперь не только WHERE но и пересечение осей. Далее вступает в дело Existing или Autoexists. Отсюда и значение = 1.

по первому вопросу не совсем понятен о чем, если о members - то (любимый ответ от MS) "в зависимости".. от выражения (иерархия или уровень)
если о existing, то тоже "в зависимости" но уже от того что хотите получить, она сдвигает контекст вычисления с контекста куба на текущий.
...
Рейтинг: 0 / 0
SSAS 2012 MDX-запрос
    #39468970
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quot ShIgor, Спасибо за ваши разъяснения.
ShIgorпо первому вопросу не совсем понятен о чем, если о members - то (любимый ответ от MS) "в зависимости".. от выражения (иерархия или уровень)
В моем случае я использую иерархию [Brand], которая имеет один уровень.
Получается что
Код: sql
1.
[Product].[Brand].[Brand].MEMBERS


это тоже самое что и
Код: sql
1.
[Product].[Brand].[Brand]


И использование MEMBERS не имет смысла?
...
Рейтинг: 0 / 0
SSAS 2012 MDX-запрос
    #39469039
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

В случае с уровнем, вариантов не много, а вот с иерархией посложнее, поэтому лучше всегда использовать такие функции как Members, CurrentMember и т.п. Иначе запутать можете не только себя.
пример:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with 
  member h as SetToStr([Sales Channel].[Sales Channel])
  member hm as SetToStr([Sales Channel].[Sales Channel].Members)
  member l as SetToStr([Sales Channel].[Sales Channel].[Sales Channel])
  member lm as SetToStr([Sales Channel].[Sales Channel].[Sales Channel].Members)
  member mh as MemberToStr([Sales Channel].[Sales Channel]) -- так можно
  member mle as MemberToStr([Sales Channel].[Sales Channel].[Sales Channel]) -- а так нельзя
  member ml as MemberToStr([Sales Channel].[Sales Channel].[Sales Channel].Item(0)) 
select 
 {[Date].[Calendar Year].&[2005]} on columns,
 {h, hm, l, lm, mh, mle, ml} on rows
from 
  [Adventure Works]


результат:
CY 2005h {[Sales Channel].[Sales Channel].[All Sales Channels]}hm {[Sales Channel].[Sales Channel].[All Sales Channels],[Sales Channel].[Sales Channel].&[Internet],[Sales Channel].[Sales Channel].&[Reseller]}l {[Sales Channel].[Sales Channel].&[Internet],[Sales Channel].[Sales Channel].&[Reseller]}lm {[Sales Channel].[Sales Channel].&[Internet],[Sales Channel].[Sales Channel].&[Reseller]}mh [Sales Channel].[Sales Channel].[All Sales Channels]mle #Error (Query (7, 15) Функция MemberToStr ожидает для аргумента 1 выражение элемента. Было использовано выражение уровня.)ml [Sales Channel].[Sales Channel].&[Internet]
...
Рейтинг: 0 / 0
SSAS 2012 MDX-запрос
    #39469427
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за пояснение.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / SSAS 2012 MDX-запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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