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

Есть MDX-запрос
MDX-запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
WITH
MEMBER [Цена] AS
	(CASE WHEN [Measures].[Отгрузки шт]<>0 THEN
		[Measures].[Отгрузки сумма без НДС]/[Measures].[Отгрузки шт]
	END)
SELECT
	{[Measures].[Отгрузки шт],
	[Measures].[Отгрузки сумма без НДС],	
	[Цена]}
ON 0,	
	NONEMPTY([Торговые точки].[Код ТТ].[Код ТТ],[Measures].[Отгрузки шт])*
	NONEMPTY([Продукция].[Код продукции].[Код продукции],[Measures].[Отгрузки шт])*	
	[Время].[Дата].[Дата]
ON 1
FROM
	(SELECT
		([Время].[Месяц].&[2018-01-01T00:00:00]:[Время].[Месяц].&[2018-05-01T00:00:00],
		[Торговые точки].[Код ТТ].&[00001ГРД1],
		[Продукция].[Код продукции].&[00001]
		) ON 0
	FROM
		PROFIT)


Получаем такой результат по дням
Код ТТКод продукцииДатаОтгрузки штОтгрузки сумма без НДСЦенаКод ТТ1Код продукции101.01.20181100100Код ТТ1Код продукции102.01.20181100100Код ТТ1Код продукции103.01.2018nullnullnullКод ТТ1Код продукции104.01.2018216080Код ТТ1Код продукции105.01.2018324080Код ТТ1Код продукции106.01.20181100100..................
Но тут задачка интересная, которую решаю. Нужно промаркировать строки, где идет снижение цены от базовой цены больше чем на 9%. То есть маркируем акции. Написал MDX-запрос и завис.

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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
WITH
MEMBER [Дельта] AS 0.09
MEMBER [Цена] AS
	(CASE WHEN [Measures].[Отгрузки шт]<>0 THEN
		[Measures].[Отгрузки сумма без НДС]/[Measures].[Отгрузки шт]
	END)
MEMBER [Предыдущая цена] AS //?
	(CASE WHEN [Цена] = NULL THEN
		[Предыдущая цена]
	ELSE
		([Время].[Дата].CurrentMember.PrevMember,[Цена])
	END)
MEMBER [Отклонение] AS
	(CASE WHEN [Предыдущая цена] <> 0 THEN
		[Цена]/[Предыдущая цена] - 1
	END)
MEMBER [Предыдущая маркировка] AS //?
MEMBER [Маркировка] AS //?
	(CASE WHEN [Отклонение] <= - [Дельта] THEN
		'Да'
	WHEN [Отклонение] < [Дельта]  AND [Предыдущая маркировка] = 'Да' THEN
		'Да'
	END)
SELECT
	{[Measures].[Отгрузки шт],
	[Measures].[Отгрузки сумма без НДС],	
	[Цена],
	[Предыдущая цена],
	[Отклонение],
        [Предыдущая маркировка],
        [Маркировка]}
ON 0,	
	NONEMPTY([Торговые точки].[Код ТТ].[Код ТТ],[Measures].[Отгрузки шт])*
	NONEMPTY([Продукция].[Код продукции].[Код продукции],[Measures].[Отгрузки шт])*	
	[Время].[Дата].[Дата]
ON 1
FROM
	(SELECT
		([Время].[Месяц].&[2018-01-01T00:00:00]:[Время].[Месяц].&[2018-05-01T00:00:00],
		[Торговые точки].[Код ТТ].&[00001ГРД1],
		[Продукция].[Код продукции].&[00001]
		) ON 0
	FROM
		PROFIT)


Результат должен быть таким.
Код ТТКод продукцииДатаОтгрузки штОтгрузки сумма без НДСЦенаПредыдущая ценаОтклонениеПредыдущая маркировкаМаркировкаКод ТТ1Код продукции101.01.20181100100nullnullnullnullКод ТТ1Код продукции102.01.201811001001000nullnullКод ТТ1Код продукции103.01.2018nullnullnullnullnullnullnullКод ТТ1Код продукции104.01.2018216080100-0.2nullДаКод ТТ1Код продукции105.01.2018324080800ДаДаКод ТТ1Код продукции106.01.20181100100800.25Даnull..............................
1. Данные выгружены по дням. Есть поле [Предыдущая цена], который вытягивает цены предыдущей строки, то есть цена предыдущего дня. Период в субкубе указан с первого 1 января 2018. Первая строка берется из 31.12.2017 г. или 01.01.2018?

2. Отгрузки бывают не ежедневные, поэтому предыдущая цена должна игнорировать null. То есть из таблицы: для 4-ой строки предыдущая цена берется из второй строки. Как правильно написать MEMBER?

3. Есть MEMBER [Маркировка]. Улавливает снижение цены больше 9% и маркирует. Если повышение цены до 9 % нету, но в предыдущей строке есть маркировка, то продолжает маркировать. В остальном случае не маркирует. Тут формула смотрит на предыдущую маркировку. Также игнорируются строки null. То есть MEMBER [Маркировка] должна посмотреть на текущий MEMBER [Предыдущая маркировка], а MEMBER [Предыдущая маркировка] берет из предыдущей строки с учетом null MEMBER [Маркировка].Как правильно написать MEMBER? Как правильно написать MEMBER [Предыдущая маркировка]?

Пока игнорируем такие случаи:
- в первой строке снижение цены, то есть акция
- двойное снижение цен (которые больше дельты)
- двойное повышение цен (которые больше дельты) после снижения цен
- само повышение цен
- в какой то один день повышение цен от базовой (не акционной) цены.
...
Рейтинг: 0 / 0
Вопрос по MDX-запросу.
    #39712789
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk3. Есть MEMBER [Маркировка]. Улавливает снижение цены больше 9% и маркирует. Если повышение цены до 9 % нету, но в предыдущей строке есть маркировка, то продолжает маркировать. В остальном случае не маркирует. Тут формула смотрит на предыдущую маркировку. Также игнорируются строки null. То есть MEMBER [Маркировка] должна посмотреть на текущий MEMBER [Предыдущая маркировка], а MEMBER [Предыдущая маркировка] берет из предыдущей строки с учетом null MEMBER [Маркировка].Как правильно написать MEMBER? Как правильно написать MEMBER [Предыдущая маркировка]?
Реально ли такую задачу решить в MDX?
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Вопрос по MDX-запросу.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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