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

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

Есть MDX-запрос, который выгружает два поля. Количество ТТ за 1 месяц первого набора брендов и Количество ТТ за 2 месяца второго набора брендов.

+MDX-запрос
WITH
SET [Набор брендов 1] AS ({[Продукция].[Бренд].&[5],
				[Продукция].[Бренд].&[11], 
				[Продукция].[Бренд].&[18], 
				[Продукция].[Бренд].&[7], 
				[Продукция].[Бренд].&[15]}) 
SET [Набор брендов 2] AS ({[Продукция].[Бренд].&[19], 
				[Продукция].[Бренд].&[20], 
				[Продукция].[Бренд].&[2], 
				[Продукция].[Бренд].&[24],
				[Продукция].[Бренд].&[3]}
MEMBER [Measures].[Количество ТТ Набор брендов 1] AS
	SUM(([Время].[Месяц].&[2018-04-01T00:00:00], [Набор брендов 1]),[Measures].[Отгрузки количество ТТ])
MEMBER [Measures].[Количество ТТ Набор брендов 2] AS
	SUM(([Время].[Месяц].&[2018-03-01T00:00:00]:[Время].[Месяц].&[2018-04-01T00:00:00],[Набор брендов 2]),[Measures].[Отгрузки количество ТТ])
	
SELECT
        {[Measures].[Количество ТТ Набор брендов 1],
        [Measures].[Количество ТТ Набор брендов 2]}
ON 0,
NON EMPTY
        [Города].[Город].[Город]
ON 1
FROM 
        (SELECT ([Время].[Месяц].&[2018-04-01T00:00:00]:[Время].[Месяц].&[2018-04-01T00:00:00],				
			[Торговые точки].[Тип клиента].&[2],
			{[Торговые точки].[Клиент].[Клиент]
				- [Торговые точки].[Клиент].&[379] 
				- [Торговые точки].[Клиент].&[310] 
				- [Торговые точки].[Клиент].&[203]
				- [Торговые точки].[Клиент].&[18] },
				) ON 0 FROM PROFIT)

Вычисляемые меры не корректно показывают количество ТТ. Похоже надо избавиться от SUM, чтоб не суммировал.

Как правильно написать, чтобы корректно количество ТТ показывал?
31 июл 18, 09:32    [21616661]     Ответить | Цитировать Сообщить модератору
 Re: Количество по условию  [new]
ShIgor
Member

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

по аналогии
http://www.sql.ru/forum/1201057/mdx-zapros-i-svodnye-tablicy?hl=filter existing
31 июл 18, 10:19    [21616824]     Ответить | Цитировать Сообщить модератору
 Re: Количество по условию  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
WITH
SET [Набор брендов 1] AS ({[Продукция].[Бренд].&[5],
				[Продукция].[Бренд].&[11], 
				[Продукция].[Бренд].&[18], 
				[Продукция].[Бренд].&[7], 
				[Продукция].[Бренд].&[15]}) 
MEMBER [Measures].[Количество ТТ Набор брендов 1] AS
	COUNT(
		FILTER(
			[Торговые точки].[Код ТТ].[Код ТТ],
			([Города].[Город].CurrentMember,
				[Время].[Месяц].&[2018-04-01T00:00:00],
				//[Набор брендов 1],
				[Measures].[Отгрузки количество ТТ])>0
			)
		)
...
Запрос работает.

Если убрать комментарий, то в вычисляемом поле выдает сообщение "Функция GreaterThan ожидает для аргумента 1 строчное или числовое выражение. Было использовано выражение набора кортежей."


А если так написать

MEMBER [Measures].[Количество ТТ Набор брендов 1] AS
	COUNT(
		FILTER(
			{{[Торговые точки].[Код ТТ].[Код ТТ]}*
			{[Города].[Город].CurrentMember}*
				{[Время].[Месяц].&[2018-04-01T00:00:00]}*
				{[Набор брендов 1],}},
				[Measures].[Отгрузки количество ТТ]>0
			)
		)
Работает, но не правильно количество показывает.

Как правильно написать?
31 июл 18, 15:40    [21618523]     Ответить | Цитировать Сообщить модератору
 Re: Количество по условию  [new]
ShIgor
Member

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

я скоро в твоих структурах и серверах буду лучше тебя разбираться... возьмешь на полставки?

FILTER(
  existing [Торговые точки].[Код ТТ].[Код ТТ],
  sum([Набор брендов 1], ([Время].[Месяц].&[2018-04-01T00:00:00], [Measures].[Отгрузки количество ТТ])>0
)
31 июл 18, 16:45    [21618753]     Ответить | Цитировать Сообщить модератору
 Re: Количество по условию  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2116
скобку забыл
FILTER(
  existing [Торговые точки].[Код ТТ].[Код ТТ],
  sum([Набор брендов 1], ([Время].[Месяц].&[2018-04-01T00:00:00], [Measures].[Отгрузки количество ТТ]))>0
)
31 июл 18, 16:46    [21618758]     Ответить | Цитировать Сообщить модератору
 Re: Количество по условию  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
В общем, так не работает
MEMBER [Measures].[Количество ТТ Набор брендов 1] AS
	COUNT(
		FILTER(
			EXISTING [Торговые точки].[Код ТТ].[Код ТТ],
			SUM([Набор брендов 1],
				([Время].[Месяц].&[2018-03-01T00:00:00]:[Время].[Месяц].&[2018-04-01T00:00:00],
				[Measures].[Отгрузки количество ТТ]))>0
			)
		)


Так работает, если усложнить
MEMBER [Measures].[Количество ТТ Набор брендов 1] AS
	COUNT(
		FILTER(
			EXISTING [Торговые точки].[Код ТТ].[Код ТТ],
			SUM([Набор брендов 1],
				([Время].[Месяц].&[2018-03-01T00:00:00],[Measures].[Отгрузки количество ТТ])
				+
				([Время].[Месяц].&[2018-04-01T00:00:00],[Measures].[Отгрузки количество ТТ]))>0
			)
		)

Возможно как то было избежать усложнения? Количество выбранных месяцев может быть не малое.

Пытаюсь понять, почему отсутствует запись [Города].[Город].CurrentMember?
1 авг 18, 09:27    [21620005]     Ответить | Цитировать Сообщить модератору
 Re: Количество по условию  [new]
ShIgor
Member

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

все! бери на полставки.. мы тебе уже полгода твердим "изучай матчасть" если хочешь что-то писать.

 
MEMBER [Measures].[СуммаОтгрузкиКоличество] AS SUM([Набор брендов 1][color=orange] * [Набор месяцев][/color], [Measures].[Отгрузки количество ТТ])
MEMBER [Measures].[Количество ТТ Набор брендов 1] AS
	SUM(
		  EXISTING [Торговые точки].[Код ТТ].[Код ТТ],
		  IIF([Measures].[СуммаОтгрузкиКоличество] > 0, 1, null)
		)


уж набор месяцев создашь как-нибудь...
но есть вариант еще быстрее

почему отсутствует [Города].[Город].CurrentMember? а разве код ТТ не уникален? и ТТ присутствует в нескольких городах?
1 авг 18, 11:07    [21620466]     Ответить | Цитировать Сообщить модератору
 Re: Количество по условию  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
ShIgor
почему отсутствует [Города].[Город].CurrentMember? а разве код ТТ не уникален? и ТТ присутствует в нескольких городах?
Физически ТТ географически относятся к соответствующему городу, но бывает со временем город меняет свое соответствие, то есть меняет центр финансовой ответственности. Есть [Города].[Город].[Город], где учитывается история. А есть еще [Города].[Город Текущий].[Город Текущий], где не учитывается история.
1 авг 18, 12:05    [21620746]     Ответить | Цитировать Сообщить модератору
 Re: Количество по условию  [new]
ShIgor
Member

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

Читай документацию. (ключевое слово "контекст")
1 авг 18, 12:12    [21620776]     Ответить | Цитировать Сообщить модератору
 Re: Количество по условию  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
Мера [Measures].[Отгрузки количество ТТ] считает по сочетанию следующих атрибутов:
[Торговые точки].[Адрес].[Адрес]
[Торговые точки].[Клиент].[Клиент]
[Торговые точки].[Юрлицо].[Юрлицо]
...
MEMBER [Measures].[СуммаОтгрузкиКоличество] AS SUM([Набор брендов 1] * [Набор месяцев], [Measures].[Отгрузки количество ТТ])
MEMBER [Measures].[Количество ТТ Набор брендов 1] AS
	SUM(
		  EXISTING ([Торговые точки].[Адрес].[Адрес],
                           [Торговые точки].[Клиент].[Клиент],
                           [Торговые точки].[Юрлицо].[Юрлицо])
		  IIF([Measures].[СуммаОтгрузкиКоличество] > 0, 1, null)
		)
SELECT
	[Measures].[Количество ТТ Набор брендов 1] 
ON 0,
NON EMPTY
	//[Города].[Регион города].[Регион города]*
	[Города].[Город].[Город]*
	//[Дилер].[Имя дилера].[Имя дилера]
...

Выгружает очень долго, даже не дожидаюсь. Я правильно понимаю, что для ускорения запроса нужно внутри EXISTING добавить функцию NONEMPTY?

Думаю, может проще смотреть не на меру [Measures].[Отгрузки количество ТТ], а на [Measures].[Отгрузки шт], где больше нуля.
9 авг 18, 10:00    [21635446]     Ответить | Цитировать Сообщить модератору
 Re: Количество по условию  [new]
ShIgor
Member

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

по первому вопросу - для ускорения лучше отдать в разработку специалистам.
по второму вопросу - кто-ж лучше тебя знает какая бизнес логика и как ты ее реализовал.
9 авг 18, 16:40    [21636445]     Ответить | Цитировать Сообщить модератору
 Re: Количество по условию  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
Данная мера отображает количество ТТ, где суммирует отдельно и за март, и апрель.
MEMBER	[Measures].[Количество ТТ Категория1 Март-Апрель 2018] AS
		SUM([Продукция].[КатегорияПродукции].&[Категория1]*
		{[Время].[Месяц].&[2018-03-01T00:00:00]:[Время].[Месяц].&[2018-04-01T00:00:00]},
			[Measures].[Отгрузки количество ТТ])

А надо не сумму по каждому месяцу, а за 2 месяца всего. Через AGGREGATE не получается.

Как правильно написать? Без использования FILTER, а использовать готовую меру [Measures].[Отгрузки количество ТТ].
20 авг 18, 14:32    [21648223]     Ответить | Цитировать Сообщить модератору
 Re: Количество по условию  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
Я правильно понимаю, если есть готовая мера [Measures].[Отгрузки количество ТТ], то посчитать количество за несколько месяцев объединенно не получится?
21 авг 18, 08:04    [21648834]     Ответить | Цитировать Сообщить модератору
 Re: Количество по условию  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
Все, получилось
MEMBER [Время].[Месяц].[Март-Апрель 2018] AS
	AGGREGATE ({[Время].[Месяц].&[2018-03-01T00:00:00]:[Время].[Месяц].&[2018-04-01T00:00:00]})

MEMBER	[Measures].[Количество ТТ Категория1 Март-Апрель 2018] AS
		SUM([Продукция].[КатегорияПродукции].&[Категория1]*
		{[Время].[Месяц].[Март-Апрель 2018]},
			[Measures].[Отгрузки количество ТТ])
21 авг 18, 08:20    [21648847]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить