Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Итоговая сумма по нескольким валютам / 7 сообщений из 7, страница 1 из 1
26.12.2019, 19:24
    #39908678
IlyamI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоговая сумма по нескольким валютам
Всем доброго времени суток.

Имеется таблица фактов с датой, валютой, балансом.
Есть "курсы" (дата, id валюты, курс). Факты с курсами соединены по (дата, id валюты)

Курс на дату определяется следующим образом:

Код: 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.
with member [Курс на дату] as
(
	linkmember
	(
		[Дата].[Дата].currentmember,
		[Календарь].[Иерархия]
	),
        [Валюта].[Валюта].currentmember,
	[Measures].[Курс]
)

        member [Баланс в валюте на дату] as
        (
		linkmember
		(
			[Дата].[Дата].currentmember,
			[Календарь].[Иерархия]
		),
		[Measures].[Баланс]
	)

        member [Баланс по курсу на дату] as
	iif
	(
		[Валюта].[Валюта].currentmember.level.name='Валюта',
		(
			linkmember
			(
				[Дата].[Дата].currentmember,
				[Календарь].[Иерархия]
			),
			[Валюта].[Валюта].currentmember,
			[Measures].[Баланс]
		)
		*
		[Курс на дату],
		null
	)



По строчкам на каждую валюту все замечательно. Но проблема возникает на уровне итогов (где заглушка NULL): сумма балансов всех валют умножается на сумму всех курсов.

Замена NULL на:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
		(
				linkmember
				(
					[Дата].[Дата].currentmember,
					[Календарь].[Иерархия]
				),
				[Валюта].[Валюта].children,
				[Measures].[Баланс]
			)
			*
			[Курс RUR на дату сравнения]
		)



вызывает ошибку: В функции Crossjoin иерархия Measures используется более одного раза

Помогите посчитать итоги.
...
Рейтинг: 0 / 0
26.12.2019, 21:31
    #39908721
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоговая сумма по нескольким валютам
IlyamI,

У вас в фактах должна быть как сумма в оригинальной валюте, так и сумма в рублях в следующем столбце. Всё.
...
Рейтинг: 0 / 0
26.12.2019, 23:59
    #39908779
IlyamI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоговая сумма по нескольким валютам
Критик,

к сожалению, есть нюанс - в подавляющем числе случаев выбранная пользователем дата баланса не соответствует выбранной пользователем дате курса (требование бизнеса).
...
Рейтинг: 0 / 0
27.12.2019, 09:57
    #39908842
Гулин Федор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоговая сумма по нескольким валютам
IlyamI,
Послушайте умных людей (я имею ввиду в данном случае Критика :) )
пересчитайте все в ETL


PS у меня сейчас пересчитано в 4 валютах (хотя используется реально только 2 )
...
Рейтинг: 0 / 0
27.12.2019, 12:43
    #39908938
StarikNavy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоговая сумма по нескольким валютам
IlyamI
Критик,

к сожалению, есть нюанс - в подавляющем числе случаев выбранная пользователем дата баланса не соответствует выбранной пользователем дате курса (требование бизнеса).


так и считайте в фактах по дате курса выбранного бизнесом

+1050 за Критика
...
Рейтинг: 0 / 0
27.12.2019, 12:46
    #39908939
IlyamI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоговая сумма по нескольким валютам
Задача решена.

Небольшое пояснение:

в фактах имеется баланс на конкретную дату. Также имеется таблица с курсами на конкретную дату.
Пользователи хотят сравнить баланс в пересчете по курсу. НО !!!!! Например: первое сравнение - баланс на первое число и баланс на последний день прошлого месяца. второе - баланс на второе число и баланс на первое, третье - баланс на пятницу и баланс на вторник. на каждый день курс может быть разный. Таким образом, чтобы сравнить балансы на два произвольных дня, нужно в таблице фактов иметь столбцы балансов на каждый произвольный день с учетом соответствующего курса.

Мое решение:

Код: 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.
dynamic [hidden] set _cur as
		[Валюта].[Валюта].children

	member [Баланс по курсу на дату] as
	iif
	(
		[Валюта].[Валюта].currentmember.level.name='Валюта',
		(
			linkmember
			(
				[Дата].[Дата].currentmember,
				[Календарь].[Иерархия]
			),
			[Валюта].[Валюта].currentmember,
			[Measures].[Баланс]
		)
		*
		[Курс на дату]
		,
		sum
		(
			_cur,
			[Баланс по курсу на дату] 
		)
	)



Жду критики, или вопрос закрыт.

P.S. Хотел сделать через scope: добавить в скрипт начитки фактов четыре столбца - баланс на последний день пред. месяца (обязательная дата), баланс на дату_1, баланс на дату_2, которые инициируются нулями. Соответственно, для каждого из них меры с агрегирующей функцией SUM. А в scope уже налету считать для каждой строки.
Но пока мне что-то плохо дается понимание scope. хотелось бы что-нибудь почитать, где "на пальцах" показано. Видео и мсдн перечитаны тыщу раз.
...
Рейтинг: 0 / 0
27.12.2019, 19:14
    #39909287
IlyamI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоговая сумма по нескольким валютам
Ну и реализовал это через SCOPE )))))))))))
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Итоговая сумма по нескольким валютам / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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