powered by simpleCommunicator - 2.0.43     © 2025 Programmizd 02
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Остатки по товарам на дату
15 сообщений из 15, страница 1 из 1
Остатки по товарам на дату
    #40088869
Kellyjkee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет,

Есть у меня задача, посчитать остатки по товарам на каждую дату по всем складам и товарам
Пытался сделать это средствами SQL и сделал, но работает это все очень очень долго и объем таблицы гигантский
Решил попробовать сделать это в Кубе, но для меня это темный лес, поэтому прошу помощи разобраться, что и как и дать совет по решению

1. Решил попробовать построить куб прочитав статью - https://www.sql.ru/blogs/dklmnmsbi/1450 , да и в целом хотелось бы освоить и далее использовать Кубы в работе

У меня есть - Таблица движений, которая отличает от таблицы, автора, я ее преобразовал в запросе, и вместо прихода \ расхода, я имею сразу готовое значение Оборота по товару на дату - выглядит так


Мое представление Куба -


Использование измерений -


Куб -


Без мер, куб разворачивается, все ОК, остается задача написать вычисления.
В MDX полный 0, формулы которые вижу в примерах понимаю пока с трудом

У Автора в статье, идет расчет прихода, расхода, оборота, Конечного остатка
У меня уже все посчитано в SQL мне надо только конечный остаток
Если я беру формулу Автора и применяю к своим таблицам, я получаю ошибку при развертывании
Использую формулу так -

Сама формула -
Код: sql
1.
sum({null:tail(exists([Calendar].[Date].[День], [Calendar].[Hierarchy].CurrentMember),1)(0)})


Даже просто вывести столбец оборота у меня не получается


Помогите пожалуйста разобраться, что я делаю не так, из-за чего ошибка и что сделать, чтобы ее исправить
...
Рейтинг: 0 / 0
Остатки по товарам на дату
    #40088873
Kellyjkee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kellyjkee,
Удалил все меры
Вставил в Calculate

Код: sql
1.
2.
3.
4.
5.
6.
CREATE MEMBER CURRENTCUBE.[Measures].[КонечныйОстаток] 
/*остаток на конец периода расчитываемый по 
сумме оборота с начала времен*/
as sum({null:tail(exists([Calendar].[Дата].[Дата], [Calendar].[Hierarchy].CurrentMember),1)(0)},[Dvizenie Tovarov].[Количество]) 
,Caption='КонечныйОстаток'
,FORMAT_STRING="#,#"



Построился куб без ошибок, но в результате только NULL..
...
Рейтинг: 0 / 0
Остатки по товарам на дату
    #40088883
Kellyjkee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kellyjkee,



Вот такой сейчас рез
...
Рейтинг: 0 / 0
Остатки по товарам на дату
    #40088954
Kellyjkee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kellyjkee,

В общем разобрался, все оказалось очень просто

Код: sql
1.
SUM ({null:[Calendar].[Дата].CurrentMember}, [Measures].[Оборот]) 
...
Рейтинг: 0 / 0
Остатки по товарам на дату
    #40089013
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно считать не от начала времен, а от среза

https://www.sql.ru/forum/524753/novyy-podhod-k-ostatkam-v-2005
...
Рейтинг: 0 / 0
Остатки по товарам на дату
    #40089373
montoya.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Критик
можно считать не от начала времен, а от среза

https://www.sql.ru/forum/524753/novyy-podhod-k-ostatkam-v-2005


вопрос есть)
как от среза - понятно.
но если есть 2 календаря? фискальный и человечески.
как делать?
городить 2 таблицы?
первая таблица - движение
вторая таблица - срезы.

или даже 2 таблицы срезов
срезы обычный календарь
срезы фискальный календарь....
?
...
Рейтинг: 0 / 0
Остатки по товарам на дату
    #40089395
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
montoya.,

один календарь, но разные иерархии
...
Рейтинг: 0 / 0
Остатки по товарам на дату
    #40089804
montoya.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Критик
montoya.,

один календарь, но разные иерархии


календарь то один
и иерархии разные.

но вот допустим календарный 2021 год начинается с 1 января 2021
а фискальный с 22 декабря 2020 года.

ломается концепция срезов на начало периода....
думаю как всё же можно сделать со срезами
что бы не считать каждый раз с начала истории.
...
Рейтинг: 0 / 0
Остатки по товарам на дату
    #40089864
LogrusAS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
montoya.,

Так срезы то не про период! Срезы про деление данных. Как бы партицирование. То что на конец периода считается автоматом быстро и поднимается выше по иерархии - это приятный побочный бонус.
Ну сделайте заливку да даты фискального года.
Хотя все равно не понимаю. У вас что в фискальном календаре последний день ЛЮБОГО месяца - 22?
Если таки да - залейте еще и на 22 физические данные и "магическое число" в календаре добавьте.
...
Рейтинг: 0 / 0
Остатки по товарам на дату
    #40089924
montoya.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kellyjkee
Kellyjkee,

В общем разобрался, все оказалось очень просто

Код: sql
1.
SUM ({null:[Calendar].[Дата].CurrentMember}, [Measures].[Оборот]) 



на уровне даты всё считает хорошо
но на уровне месяца и т.д. - пусто.
а как на уровень месяц/год ит.д. поднять LastChild ?
...
Рейтинг: 0 / 0
Остатки по товарам на дату
    #40089946
montoya.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LogrusAS
montoya.,

Так срезы то не про период! Срезы про деление данных. Как бы партицирование. То что на конец периода считается автоматом быстро и поднимается выше по иерархии - это приятный побочный бонус.
Ну сделайте заливку да даты фискального года.
Хотя все равно не понимаю. У вас что в фискальном календаре последний день ЛЮБОГО месяца - 22?
Если таки да - залейте еще и на 22 физические данные и "магическое число" в календаре добавьте.


немного хуже)
каждый фискальный месяц может быть на разную дату) (не я придумал)
...
Рейтинг: 0 / 0
Остатки по товарам на дату
    #40090074
LogrusAS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
montoya.,

Во первых заливайте на ту вот последнюю дату.
А во вторых я не совсем понимаю как отображается Ваш календарь.
Если 22 декабря это последний день, то 23 декабря это уже не декабря а что?
Значит у вас есть какая то другая иерархия.
И работать метод будет при любых вариантах. В этом его изюминка.
Просто если есть желание ускорить - заливайте еще и на дату последнего дня фискального периода.
...
Рейтинг: 0 / 0
Остатки по товарам на дату
    #40090142
montoya.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LogrusAS
montoya.,

Во первых заливайте на ту вот последнюю дату.
А во вторых я не совсем понимаю как отображается Ваш календарь.
Если 22 декабря это последний день, то 23 декабря это уже не декабря а что?
Значит у вас есть какая то другая иерархия.
И работать метод будет при любых вариантах. В этом его изюминка.
Просто если есть желание ускорить - заливайте еще и на дату последнего дня фискального периода.


да 23е декабря это уже может быть январь следующего фискального года.

для понимания
есть две иерархии
первая - обычный человеческий календарь.
вторая - фискальный: он рассчитан кратно неделям
т.е. любой месяц в нём - кратен 4ём или 5ти неделям.

вообщем я уже поигрался с этим методом
даже при расчёте с начала истории - очень хороший результат получил.
...
Рейтинг: 0 / 0
Остатки по товарам на дату
    #40090313
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всегда нужно иметь свой календарь, где явно прописаны к-л значения: выходные и праздники с учетом переноса раб.дней, номера недель месяца, график работы компании и пр.

Всегда есть внутренние правила, которые отличаются от общепризнанных.

"Таки у всех суббота, а у меня таки четверг" (с) анек
...
Рейтинг: 0 / 0
Остатки по товарам на дату
    #40090776
montoya.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LogrusAS
montoya.,

Во первых заливайте на ту вот последнюю дату.
А во вторых я не совсем понимаю как отображается Ваш календарь.
Если 22 декабря это последний день, то 23 декабря это уже не декабря а что?
Значит у вас есть какая то другая иерархия.
И работать метод будет при любых вариантах. В этом его изюминка.
Просто если есть желание ускорить - заливайте еще и на дату последнего дня фискального периода.


с этой задачей справился
внимательно перечитав https://www.sql.ru/forum/524753/novyy-podhod-k-ostatkam-v-2005
спасибо всем участникам)

возникла следующая задача)

как посчитать возраст запасов?
в таблице фактов "движение" по которой строится остаток на дату
есть поле ДатаПрихода.

сделал ещё одну вьюху фактов
с полями: Дата, ДатаПрихода, ВозрастДней.
в которую включил все необходимые комбинации

создал группу мер и меру ВозрастДней

создал в DSV в таблице "Движение" фиктивную меру .[NULL Age Vesa]
задумка меры посчитать Веса = Остаток * ВозрастДней

а теперь? что прописать в Calculated, что бы посчитать возраст?
пытался так, но результат не получил


([Время].[День].[День], Measures.[NULL Age Vesa]) = [Остаток] * [Measures].[ВозрастДней];
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Остатки по товарам на дату
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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