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

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

MDX-запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
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, чтоб не суммировал.

Как правильно написать, чтобы корректно количество ТТ показывал?
...
Рейтинг: 0 / 0
Количество по условию
    #39681427
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Количество по условию
    #39681625
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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 строчное или числовое выражение. Было использовано выражение набора кортежей."


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

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

Работает, но не правильно количество показывает.

Как правильно написать?
...
Рейтинг: 0 / 0
Количество по условию
    #39681663
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

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

Код: sql
1.
2.
3.
4.
FILTER(
  existing [Торговые точки].[Код ТТ].[Код ТТ],
  sum([Набор брендов 1], ([Время].[Месяц].&[2018-04-01T00:00:00], [Measures].[Отгрузки количество ТТ])>0
)
...
Рейтинг: 0 / 0
Количество по условию
    #39681665
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скобку забыл
Код: sql
1.
2.
3.
4.
FILTER(
  existing [Торговые точки].[Код ТТ].[Код ТТ],
  sum([Набор брендов 1], ([Время].[Месяц].&[2018-04-01T00:00:00], [Measures].[Отгрузки количество ТТ]))>0
)
...
Рейтинг: 0 / 0
Количество по условию
    #39681855
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, так не работает
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
MEMBER [Measures].[Количество ТТ Набор брендов 1] AS
	COUNT(
		FILTER(
			EXISTING [Торговые точки].[Код ТТ].[Код ТТ],
			SUM([Набор брендов 1],
				([Время].[Месяц].&[2018-03-01T00:00:00]:[Время].[Месяц].&[2018-04-01T00:00:00],
				[Measures].[Отгрузки количество ТТ]))>0
			)
		)



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


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

Пытаюсь понять, почему отсутствует запись [Города].[Город].CurrentMember ?
...
Рейтинг: 0 / 0
Количество по условию
    #39681897
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

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

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



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

почему отсутствует [Города].[Город].CurrentMember? а разве код ТТ не уникален? и ТТ присутствует в нескольких городах?
...
Рейтинг: 0 / 0
Количество по условию
    #39681929
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgorпочему отсутствует [Города].[Город].CurrentMember? а разве код ТТ не уникален? и ТТ присутствует в нескольких городах?Физически ТТ географически относятся к соответствующему городу, но бывает со временем город меняет свое соответствие, то есть меняет центр финансовой ответственности. Есть [Города].[Город].[Город] , где учитывается история. А есть еще [Города].[Город Текущий].[Город Текущий] , где не учитывается история.
...
Рейтинг: 0 / 0
Количество по условию
    #39681933
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

Читай документацию. (ключевое слово "контекст")
...
Рейтинг: 0 / 0
Количество по условию
    #39685252
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мера [Measures].[Отгрузки количество ТТ] считает по сочетанию следующих атрибутов:
[Торговые точки].[Адрес].[Адрес]
[Торговые точки].[Клиент].[Клиент]
[Торговые точки].[Юрлицо].[Юрлицо]
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
...
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].[Отгрузки шт], где больше нуля.
...
Рейтинг: 0 / 0
Количество по условию
    #39685664
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

по первому вопросу - для ускорения лучше отдать в разработку специалистам.
по второму вопросу - кто-ж лучше тебя знает какая бизнес логика и как ты ее реализовал.
...
Рейтинг: 0 / 0
Количество по условию
    #39690433
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данная мера отображает количество ТТ, где суммирует отдельно и за март, и апрель.
Код: sql
1.
2.
3.
4.
MEMBER	[Measures].[Количество ТТ Категория1 Март-Апрель 2018] AS
		SUM([Продукция].[КатегорияПродукции].&[Категория1]*
		{[Время].[Месяц].&[2018-03-01T00:00:00]:[Время].[Месяц].&[2018-04-01T00:00:00]},
			[Measures].[Отгрузки количество ТТ])


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

Как правильно написать? Без использования FILTER, а использовать готовую меру [Measures].[Отгрузки количество ТТ] .
...
Рейтинг: 0 / 0
Количество по условию
    #39690771
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понимаю, если есть готовая мера [Measures].[Отгрузки количество ТТ], то посчитать количество за несколько месяцев объединенно не получится?
...
Рейтинг: 0 / 0
Количество по условию
    #39690775
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все, получилось
Код: sql
1.
2.
3.
4.
5.
6.
7.
MEMBER [Время].[Месяц].[Март-Апрель 2018] AS
	AGGREGATE ({[Время].[Месяц].&[2018-03-01T00:00:00]:[Время].[Месяц].&[2018-04-01T00:00:00]})

MEMBER	[Measures].[Количество ТТ Категория1 Март-Апрель 2018] AS
		SUM([Продукция].[КатегорияПродукции].&[Категория1]*
		{[Время].[Месяц].[Март-Апрель 2018]},
			[Measures].[Отгрузки количество ТТ])
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Количество по условию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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