powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Число позиций на остатках
15 сообщений из 15, страница 1 из 1
Число позиций на остатках
    #33596024
Yprit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пересмотрел все обсуждения, но до конца так и не понял.....
Есть куб движений: Дата,Номенклатура,Поставщик,Количество (приход - с плюсом, расход - с минусом).
Измерение Номенклатура иерархическое (группа 1 ур., группа 2 ур, номенклатура)

Есть СМ для вычисления остатков на конец
Код: plaintext
SUM(PeriodsToDate([Дата].Levels( 0 ),[Дата].CurrentMember),Measures.Количество)

можно ли посчитать количество позиций, для которых остаток на конец > 0? С относительно приемлемым быстродействием? Чтобы работала фильтрация по уровням номенклатуры и датам? MSAS 2000 Клиент Excel. Мультиселекта не будет. Пожалуйста, ткните носом,в каком направлении копать.
...
Рейтинг: 0 / 0
Число позиций на остатках
    #33596058
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что вы подразумеваете под

"С относительно приемлемым быстродействием?"

Выходов повысить быстродействие несколько:

1. Использовать только куб движений но перейти к формуле, так популярной на форуме (с ascendants)

2. Сделать дополнительный куб остатков по принципу periodic snapshot

3. 2 + перейти на Юкон и использовать semiadditive measures.
...
Рейтинг: 0 / 0
Число позиций на остатках
    #33596138
Yprit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, backfire!

Пункты 2 и 3 пока не представляется возможным сделать....

С acsendants попробую, хотя PeriodsTodate до сих пор работала на ура в плане быстродействия.

Пытался сделать примерно так (пишу по памяти, нет возможности помотреть в куб)
Код: plaintext
filter(crossjoin({[Дата].CurrentMember},{[Номенлатура.CurrentMember,Номенклатура.Levels( 2 )]}),[НачОст]  >  0 ).Count
Сервак ушел в раздумья и так из них и не вышел....
...
Рейтинг: 0 / 0
Число позиций на остатках
    #33596563
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YpritСпасибо, backfire!

Пункты 2 и 3 пока не представляется возможным сделать....

С acsendants попробую, хотя PeriodsTodate до сих пор работала на ура в плане быстродействия.

Пытался сделать примерно так (пишу по памяти, нет возможности помотреть в куб)
Код: plaintext
filter(crossjoin({[Дата].CurrentMember},{[Номенлатура.CurrentMember,Номенклатура.Levels( 2 )]}),[НачОст]  >  0 ).Count
Сервак ушел в раздумья и так из них и не вышел....

Ясно дело, ведь он считает [НачОст] для каждого товара.

А надо чтобы он брал это уже готовое из базы

например (для варианта 2)


Код: plaintext
NonEmptyCrossJoin(Product.Product.members, {[Measures].[StockBegin]},  1 ).count

[Measures].[StockBegin] это физическая мера, поэтому рассчет идет в доли секунд.
...
Рейтинг: 0 / 0
Число позиций на остатках
    #33596908
Yprit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ох, не делал я еще ни разу periodic snapshot... Это в виртуальный куб движения с остатками запихивать придется, чтобы остаток получить?

backfire,простите за назойливость, но не могли бы Вы привести примеры оптимальных формул расчета, с Вашей точки зрения, для такой меры, через приведенный мной СМ.

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

1.
Код: plaintext
filter(Descendants([Номенклатура].CurrentMember, 3 ),[НачОст]  >  0 ).Count
2.
Код: plaintext
sum(Descendants([Номенклатура].CurrentMember, 3 ),IIf([НачОст]  >  0 , 1 , 0 ))
...
Рейтинг: 0 / 0
Число позиций на остатках
    #33645577
Yprit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попытался сделать вариант 2. Итак, есть куб движений: Товар (4 уровня), Поставщик (2 уровня), Склад, Дата (Год-Месяц-Декада-День),Движение (Приход/Расход)
Есть куб остатков (на конец каждой декады все ненулевые остатки): Товар (4 уровня), Поставщик (2 уровня), Склад, Дата (Год-Месяц-Декада-День)

Сделал виртуальный куб. Сделал 4 СМ:

Начальный остаток позиций:
Код: plaintext
NonEmptyCrossJoin(Descendants([Номенклатура].Currentmember,[Код номенклатуры]),{[Measures].[Qty]},{[Период].CurrentMember.PrevMember}, 1 ).count

Приход позиций:
Код: plaintext
NonEmptyCrossJoin(descendants([Номенклатура].CurrentMember,[Код номенклатуры]),{[Measures].[Количество]},{[Движение].[Вид движения].&[ 0 ]}, 1 ).count

Расход позиций:
Код: plaintext
NonEmptyCrossJoin(descendants([Номенклатура].CurrentMember,[Код номенклатуры]),{[Measures].[Количество]},{[Движение].[Вид движения].&[ 1 ]}, 1 ).count

Конечный остаток позиций:
Код: plaintext
NonEmptyCrossJoin(Descendants([Номенклатура].Currentmember,[Код номенклатуры]),{[Measures].[Qty]}, 1 ).count

При попытке развернуть до уровня поставщиков (хотя бы по одной группе поставщиков) с фильтром по декаде вешается намертво. На уровне групп поставщиков Эксель выполняет запрос примерно минут за 15.
Поставщиков - 750, номенклатур 140 000, в таблице фактов по движениям - 15 млн. записей, в таблице остатков - 18 млн. записей.

MS AS 2000. Видимо, я чего-то не догоняю, поскольку полученные результаты явно не соотеветствуют рассчет идет в доли секунд.
...
Рейтинг: 0 / 0
Число позиций на остатках
    #33647293
Yprit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, неужели никто не наступал на такие грабли? Похожие сообщения на форуме вроде видел, но решения так и не нашел.... Не дайте погибнуть под ассортиментным анализом! Перепробовал варианты и с Filter, и с NEJC - все равно мрет.....
...
Рейтинг: 0 / 0
Число позиций на остатках
    #33647329
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 автор:

Народ, неужели никто не наступал на такие грабли? Похожие сообщения на форуме вроде видел, но решения так и не нашел.... Не дайте погибнуть под ассортиментным анализом! Перепробовал варианты и с Filter, и с NEJC - все равно мрет.....

Может кому-то покажется мое мнение спорным, но моя практика показывает, что на таких объемах данных обычно переходят на более мощные OLAP-сервера...
...
Рейтинг: 0 / 0
Число позиций на остатках
    #33647339
Yprit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Более мощные - это, на Ваш взгляд, какие?
По поводу объемов данных - я, конечно, в OLAP совсем новичок, но мне казалось, что 20 млн. строк в таблице - это для AS вообще не объем. И измерения не слишком большие...
...
Рейтинг: 0 / 0
Число позиций на остатках
    #33647470
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Yprit:

Более мощные - это, на Ваш взгляд, какие?

Я считаю что в мире есть только 2 мощных OLAP-сервера - MS AS и PowerPlay. Но в случае когда есть большое и ветвистое измерение (товары, клиенты и т.п.), PowerPlay по каким-то причинам начинает серьезно превосходить MS AS. Уж не знаю в чем эти причины - то ли в более оптимизированном OLAP-движке, то ли в способе хранения агрегатов в случае наличия иерархии, то ли визуальные средства создания MDX у Cognos работают более эффективно, чем рукописый MDX, то ли дело в том что Ваш CM вычисляется на клиенте, а не на сервере...

По поводу объемов данных - я, конечно, в OLAP совсем новичок, но мне казалось, что 20 млн. строк в таблице - это для AS вообще не объем. И измерения не слишком большие...

20 миллионов записей в таблице фактов - это относительно немного, но вот измерение у Вас все таки большое для MS AS...
...
Рейтинг: 0 / 0
Число позиций на остатках
    #33647655
Фотография Гликоген
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант 2. Сделать дополнительный куб остатков по принципу periodic snapshot - Way2Go.

Я имею опыт в MSAS по крайней мере, с 2000 года. Поверьте, MDX не стоит затраченного на него времени :)
...
Рейтинг: 0 / 0
Число позиций на остатках
    #33649004
Yprit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы - а то я уж совсем приуныл...
PowerPlay попробую достать и попробовать - хотя, конечно, хотелось бы остаться на MS AS, с ним я хоть что-то понимать начал уже....

ГликогенВариант 2. Сделать дополнительный куб остатков по принципу periodic snapshot - Way2Go.

Я имею опыт в MSAS по крайней мере, с 2000 года. Поверьте, MDX не стоит затраченного на него времени :)

Так есть же куб остатков, есть! Таблица фактов: Дата - Товар - Склад - Поставщик - Остаток. Хранятся все ненулевые остатки на конец каждой декады.
И в этом кубе я делаю 2 СМ:
Начальный остаток:
Код: plaintext
NonEmptyCrossJoin(Descendants([Номенклатура].Currentmember,[Код номенклатуры]),{[Measures].[Qty]},{ClosingPeriod([Day],[Период].CurrentMember.PrevMember)}, 1 ).count

Конечный остаток:
Код: plaintext
NonEmptyCrossJoin(Descendants([Номенклатура].Currentmember,[Код номенклатуры]),{[Measures].[Qty]},{ClosingPeriod([Day],[Период].Currentmember)}, 1 ).count
...
Рейтинг: 0 / 0
Число позиций на остатках
    #33651702
Фотография Гликоген
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Физическая мера Count Distinct и выбор в клиенте одного конкретного дня.
:)
...
Рейтинг: 0 / 0
Число позиций на остатках
    #33653135
Yprit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так и сделал ;). Хотя все равно разворачивает тяжело - минуты по 3-4. Но ведь задача на этом не заканчивается - надо подсчитать еще и ассортимент с учетом складов, не говоря про приход/расход.
Т.е.

Код: plaintext
NonEmptyCrossJoin(Descendants([Номенклатура].Currentmember,[Код номенклатуры]),Descendants([Склад].CurrentMember,[Код склада]),{[Measures].[КолПозиций]},{ClosingPeriod([Day],[Период].CurrentMember.PrevMember)}, 2 ).count

И на этом уже точно мрет....
...
Рейтинг: 0 / 0
Число позиций на остатках
    #33658967
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на одной из достаточно крупных тестовых баз (27 млн в таблице понедельных остатков и 137 тыс товаров.

среднее время запросов по поставщикам и группам товаров с выводом мер

номенклатура проданная
номенклатура на складе

при выводе аналитики по группам товара или по поставщикам

в районе 15 секнд, а топ 100 (сортировка) в районе 2 минут. (всего на 1Ghz PIII)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Число позиций на остатках
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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