powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Итоговая сумма по нескольким валютам
7 сообщений из 7, страница 1 из 1
Итоговая сумма по нескольким валютам
    #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
Итоговая сумма по нескольким валютам
    #39908721
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IlyamI,

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

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


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

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


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

+1050 за Критика
...
Рейтинг: 0 / 0
Итоговая сумма по нескольким валютам
    #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
Итоговая сумма по нескольким валютам
    #39909287
IlyamI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и реализовал это через SCOPE )))))))))))
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Итоговая сумма по нескольким валютам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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