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

Откуда: Москва
Сообщений: 639
Hello World!
Есть запрос, который должен возвращать количество брендов, которые продавались в 2016 и товар - не перекупка
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 510
A/S Wodschow & Co 614 138.99 510
Abat 34 212 891.23 510
Abbott 2 958 817.65 510
Abert 584 453.01 510
и так далее ...

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

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

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

2.
Из-за чего результаты отличаются?

К сообщению приложен файл. Размер - 29Kb
23 май 17, 12:15    [20503803]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012 MDX-запрос  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 639
Yagrus2,
Эти вопросы слишком простые или сложные?
2 июн 17, 09:29    [20533635]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012 MDX-запрос  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 1953
Yagrus2,

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

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

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

по первому вопросу не совсем понятен о чем, если о members - то (любимый ответ от MS) "в зависимости".. от выражения (иерархия или уровень)
если о existing, то тоже "в зависимости" но уже от того что хотите получить, она сдвигает контекст вычисления с контекста куба на текущий.
2 июн 17, 16:58    [20535643]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012 MDX-запрос  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 639
quot ShIgor, Спасибо за ваши разъяснения.
ShIgor
по первому вопросу не совсем понятен о чем, если о members - то (любимый ответ от MS) "в зависимости".. от выражения (иерархия или уровень)

В моем случае я использую иерархию [Brand], которая имеет один уровень.
Получается что
[Product].[Brand].[Brand].MEMBERS

это тоже самое что и
[Product].[Brand].[Brand]

И использование MEMBERS не имет смысла?
8 июн 17, 18:23    [20551155]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012 MDX-запрос  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 1953
Yagrus2,

В случае с уровнем, вариантов не много, а вот с иерархией посложнее, поэтому лучше всегда использовать такие функции как Members, CurrentMember и т.п. Иначе запутать можете не только себя.
пример:
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 2005
h {[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]
8 июн 17, 19:56    [20551360]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012 MDX-запрос  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 639
Спасибо за пояснение.
9 июн 17, 13:06    [20552959]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить