powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / И сново оптимизация в MDX
20 сообщений из 20, страница 1 из 1
И сново оптимизация в MDX
    #33418209
LJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток, господа!

Подскажите, коль есть мысли, плз. Задача оптимизации для расчета среднепроданного за визит по торговым представителям:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Iif([Measures].[Продано штук]= 0 ,  0 ,
    Count(NonEmptyCrossjoin(Descendants([Products].CurrentMember,                                                                      [Products].[Description]),
             Descendants([Time].[YMD].CurrentMember,[Time].[YMD].[Day])))/
    Count(NonEmptyCrossjoin(Descendants([Sellers].CurrentMember,
             [Sellers].[Seller Name]),
    Descendants([Time].[YMD].CurrentMember,[Time].[YMD].[Day]))))

где [Products] - измерение продуктов,
     [Sellers] - торговые представители,
     [Time].[YMD] - иерархия времени, соответственно...

Работает, но скорость оставляет желать лучшего.

Спасибо за внимание
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418274
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сомневаюсь, что это работает. со скобками что-то напутано, или с параметрами ф-ции Descendants... да и count делить на count - это что-то новенькое...

общий подход для быстрого расчёта среднего - расчёт суммы как физ. меры, делить на кол-во (опять же физ.мера)
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418286
LJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таки формула выглядит именно так... и прошу вас не сомневатся что она работает, а count/count делить приходится, так как я работаю не с физической мерой, а с ее производной, так как вычесление подобного в виде measures не представляется возможным по причине особенности реализации... а вопрос мой, господин Biryukov, состоит в оптимизации, как было изложено выше... так как не думаю, что "общий подход" в данной задаче уместен... тем не менее благодарю вас за оказаное внимание...
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418295
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Biryukovсомневаюсь, что это работает. со скобками что-то напутано, или с параметрами ф-ции Descendants... да и count делить на count - это что-то новенькое...

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

Дмитрий, прокрути до упора вправо, тогда и все скобки найдутся.
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418300
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 LJack

1. Подход Дмитрия очень даже здравый.
2. Что такое "cреднепроданное за визит торговым предствителем"? Количество наменований товара, количество товарных позиций????

Из вашей формулы следует, что это

количество уникальных "товародней" / количество уникальных "представителе дней"

??????
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418306
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LJack - а Вы пробовали применить функцию DistinctCount ? Возможно я не до конца понял что Вы пытаетесь сделать, но мне кажется, что она тут поможет.
Т.е. обьявить два вспомогательных calculated measures с формулами

Код: plaintext
DistinctCount(Descendants([Products].CurrentMember, [Products].[Description]) * Descendants([Time].[YMD].CurrentMember,[Time].[YMD].[Day]))

Код: plaintext
DistinctCount(Descendants([Sellers].CurrentMember, [Sellers].[Seller Name])* Descendants([Time].[YMD].CurrentMember,[Time].[YMD].[Day]))

И потом один на другой делить.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418319
LJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to backfire:

Среднепроданная за визит по торговым – сумма(кол-во уникальных номенклатур, проданных за визит)/кол-во эффективных визитов – для каждого торгового

to Mosha: простите, голова сейчас не очень варит... тяжелый день...
обязательно попробую... сейчас еще очень занят


to all: всем спасибо
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418338
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
backfireДмитрий, прокрути до упора вправо, тогда и все скобки найдутся. упс!
(да тут ещё и скрытый тест был на разрешение монитора :-)
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418343
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LJackСреднепроданная за визит по торговым – сумма(кол-во уникальных номенклатур, проданных за визит)/кол-во эффективных визитов – для каждого торгового т.е. среднее кол-во товарных позиций, проданных за один визит?

тогда точно надо делать два куба: один с DitinctCount по позициям за визит, второй - кол-во визитов; объединить их в виртуальный и поделить одно на другое.
(но тогда не будет работать мультиселект)
можно, считать по формулам, но тогда будет медленнее.
можно скомбинировать подходы и получить преимущества обоих решений
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418348
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LJackto backfire:

Среднепроданная за визит по торговым – сумма(кол-во уникальных номенклатур, проданных за визит)/кол-во эффективных визитов – для каждого торгового

to Mosha: простите, голова сейчас не очень варит... тяжелый день...
обязательно попробую... сейчас еще очень занят


to all: всем спасибо

1. В один день только один визит?
2. Даже если 1 верно все равное ваша MDX формула считает не то .

Допустим мы выберем 1 день и всех M представителей.

ситуация 1-я.

каждый представитель впаривает один и тот же товар - числитель равен 1.
каждый предствитель делает по посещению - знаменатель равен M.

ваша формула возвращает 1/M для всех представителей и 1 для каждого представителя.

ситуация 2-я.

каждый представитель впаривает разный товар - числитель равен M.
каждый предствитель делает по посещению - знаменатель равен M.

ваша формула возвращает 1 для всех представителей. и 1 для каждого представителя.

А из вашей словестной формулы по моему не следует 1/M для случая 1.
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418350
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mosha
Код: plaintext
DistinctCount(Descendants([Products].CurrentMember, [Products].[Description]) * Descendants([Time].[YMD].CurrentMember,[Time].[YMD].[Day]))

Код: plaintext
DistinctCount(Descendants([Sellers].CurrentMember, [Sellers].[Seller Name])* Descendants([Time].[YMD].CurrentMember,[Time].[YMD].[Day]))
Моша, скажите пожалуйста, а этот crossjoin (обозначенный звёздочкой), учитывает пустые ячейки? например, дни, в которые товар не продавался, или Seller не работал
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418353
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Biryukov backfireДмитрий, прокрути до упора вправо, тогда и все скобки найдутся. упс!
(да тут ещё и скрытый тест был на разрешение монитора :-)

Я тоже через 1024*768 смотрю и не раз просил коллег по форуму форматировать аккуратнее перед публикацией.
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418355
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Biryukov Mosha
Код: plaintext
DistinctCount(Descendants([Products].CurrentMember, [Products].[Description]) * Descendants([Time].[YMD].CurrentMember,[Time].[YMD].[Day]))

Код: plaintext
DistinctCount(Descendants([Sellers].CurrentMember, [Sellers].[Seller Name])* Descendants([Time].[YMD].CurrentMember,[Time].[YMD].[Day]))
Моша, скажите пожалуйста, а этот crossjoin (обозначенный звёздочкой), учитывает пустые ячейки? например, дни, в которые товар не продавался, или Seller не работал

Я не Моша, но осмелюсь заметить, что учитывает.
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418363
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
backfire Dmitry Biryukov Mosha
Код: plaintext
DistinctCount(Descendants([Products].CurrentMember, [Products].[Description]) * Descendants([Time].[YMD].CurrentMember,[Time].[YMD].[Day]))

Код: plaintext
DistinctCount(Descendants([Sellers].CurrentMember, [Sellers].[Seller Name])* Descendants([Time].[YMD].CurrentMember,[Time].[YMD].[Day]))
Моша, скажите пожалуйста, а этот crossjoin (обозначенный звёздочкой), учитывает пустые ячейки? например, дни, в которые товар не продавался, или Seller не работал

Я не Моша, но осмелюсь заметить, что учитывает.а в чём тогда разница между * и NECJ, который вы так любите?
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418366
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Biryukov backfire Dmitry Biryukov Mosha
Код: plaintext
DistinctCount(Descendants([Products].CurrentMember, [Products].[Description]) * Descendants([Time].[YMD].CurrentMember,[Time].[YMD].[Day]))

Код: plaintext
DistinctCount(Descendants([Sellers].CurrentMember, [Sellers].[Seller Name])* Descendants([Time].[YMD].CurrentMember,[Time].[YMD].[Day]))
Моша, скажите пожалуйста, а этот crossjoin (обозначенный звёздочкой), учитывает пустые ячейки? например, дни, в которые товар не продавался, или Seller не работал

Я не Моша, но осмелюсь заметить, что учитывает.а в чём тогда разница между * и NECJ, который вы так любите?

Да потому что * это обычный CJ и NE Там не пахнет.

Наверное или я не правилтно выразился или вы меня не правильно поняли.

Сказав что "учитывает", я имел ввиду, что пустые ячейки "не отбрасываются", т.е. что пустой, что не пустой все едино.
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418371
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
backfireДа потому что * это обычный CJ и NE Там не пахнет. (RTFM)это понятно. но каким тогда образом CJ(*) учитывает пустые ячейки?
или "учитвает" вы имели в виду "включает в итоговый результат"?
я же под словом "учитвает" имел в виду "отбрасывает", т.к. в данном контексте их считать не надо
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418454
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry BiryukovМоша, скажите пожалуйста, а этот crossjoin (обозначенный звёздочкой), учитывает пустые ячейки? например, дни, в которые товар не продавался, или Seller не работал
Правильный вопрос это учитывает ли их функция DistinctCount - и ответ на него - да учитывает, точно так же как и (нелюбимая мной) функция NonEmptyCrossJoin.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33418803
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mosha Dmitry BiryukovМоша, скажите пожалуйста, а этот crossjoin (обозначенный звёздочкой), учитывает пустые ячейки? например, дни, в которые товар не продавался, или Seller не работал
Правильный вопрос это учитывает ли их функция DistinctCount - и ответ на него - да учитывает, точно так же как и (нелюбимая мной) функция NonEmptyCrossJoin. "учитывает" в смысле "отбрасывает"?
согласно BOL: DistinctCount Returns the number of distinct, non-empty tuples in a set
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33419319
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mosha... точно так же как и (нелюбимая мной) функция NonEmptyCrossJoin. ...


Как можно не любить собственных детей? :-) И это после того как столько бессонных ночей над больным дитя проведено, столько багов в ней пофиксено.
...
Рейтинг: 0 / 0
И сново оптимизация в MDX
    #33420806
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry Biryukovя же под словом "учитвает" имел в виду "отбрасывает", т.к. в данном контексте их считать не надо
Dmitry Biryukov"учитывает" в смысле "отбрасывает"?
Да - я использовал слово "учитывает" так как Вы его подразумевали, т.е. "отбрасывает".

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / И сново оптимизация в MDX
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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