powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Объясните логику MDX
14 сообщений из 14, страница 1 из 1
Объясните логику MDX
    #39363254
AlexTank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Есть следующий запрос:
Код: 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.
WITH
Member [Measures].[TotalRub] AS
([Measures].[Оборот руб],[Торговые точки].[Округ].[Все])

SELECT
{
[Measures].[Оборот руб],
[Measures].[TotalRub]
}
ON columns,

(
[Дата].[Г-М].[Месяц].allmembers*
[Торговые точки].[Округ].allmembers*
[Номенклатура].[Наименование короткое].&[Картон]
)
ON rows



FROM (SELECT ( STRTOSET("[Сети].[Наименование].&[4307]", CONSTRAINED) ) ON COLUMNS 
FROM ( SELECT (STRTOMEMBER("[Дата].[Г-М].[Месяц].&[201610]", CONSTRAINED) ) ON COLUMNS 
FROM ( SELECT ( STRTOSET("[Торговые точки].[Регион].&[39]", CONSTRAINED) ) ON COLUMNS
FROM [Retail Analytics])
))


Он выдает следующий результат

2016/ОктябрьВсеКартон49995519422016/ОктябрьСеверо-Западный федеральный округКартон4999551942

Хотя в моем представлении все 4 цифры должны быть одинаковые, ведь на уровне ВСЕ стоит корректная цифра.

Вопрос: почему [Торговые точки].[Округ].[Все] в member собирает цифру без учета фильтра, указанного во FROM?
Там же есть и другие фильтры, по дате и по сети, подсчет идет с учетом этих фильтров.
В логике TSQL сначала строится ограниченное множество, потом из него выбираются данные, тут же почему то в MEMBER фильтр непонятным образом частично перестает работать.
Как построить запрос, чтобы цифры были одинаковые?
...
Рейтинг: 0 / 0
Объясните логику MDX
    #39363359
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexTank,

Логика mdx работает по принципу локальных приоритетов, для member все условия что заданы в нем являются более приоритетными чем внешние условия, если бы в выражении member измерения [Торговые точки].[Округ] бы не было, сработало бы внешнее ограничение, иначе внешнее не учитывается.
...
Рейтинг: 0 / 0
Объясните логику MDX
    #39363365
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexTank,

ну и чтобы цифры были одинаковые уберите ,[Торговые точки].[Округ].[Все]
Ваш КЕП:)
...
Рейтинг: 0 / 0
Объясните логику MDX
    #39363447
AlexTank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WarAntAlexTank,

ну и чтобы цифры были одинаковые уберите ,[Торговые точки].[Округ].[Все]
Ваш КЕП:)
Мне в строке по конкретному округу нужна сумма по всем округам с учетом фильтров.
Как ее посчитать?
...
Рейтинг: 0 / 0
Объясните логику MDX
    #39363798
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexTankWarAntAlexTank,

ну и чтобы цифры были одинаковые уберите ,[Торговые точки].[Округ].[Все]
Ваш КЕП:)
Мне в строке по конкретному округу нужна сумма по всем округам с учетом фильтров.
Как ее посчитать?

Используйте

[Торговые точки].[Округ].[All].Children

или

[Торговые точки].[Округ].[Все].Children
...
Рейтинг: 0 / 0
Объясните логику MDX
    #39364642
AlexTank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a_voroninAlexTankпропущено...

Мне в строке по конкретному округу нужна сумма по всем округам с учетом фильтров.
Как ее посчитать?

Используйте

[Торговые точки].[Округ].[All].Children

или

[Торговые точки].[Округ].[Все].Children
Я пробовал и [Все].Children и Parent.Children - результат тот же самый, сумма без учета фильтра
...
Рейтинг: 0 / 0
Объясните логику MDX
    #39365582
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexTank,

Да уж много раз объясняли. Подзапросы (subcube) не устанавливают контекст для вычисления они ограничивают пространство после того как CM были оценены (evaluated). Таким образом само вычисление происходит вне рамок ограниченных подзапросом.
MS всех запутал с этими подкубами и сам тоже запутался..

Excel работает криво. Специально для него MS придумал параметр в строке соединения Subqueries который в зависимости от параметра меняет логику взаимодействия подзапросов и where.
Management studio лепит фильтры в обе части запроса чтоб хоть как-то нивелировать проблемы.
И все это как MS везде пишет: "в зависимости...", что удручает более всего.
Отсюда практически невозможно предсказать поведение вычисляемых членов в разных программах и ситуациях.

Кроме этого на результат влияют роли и параметр Enable Visual Totals.
...
Рейтинг: 0 / 0
Объясните логику MDX
    #39366030
AlexTank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за разъяснения,
а где почитать что MS пишет? Хотя бы в какую сторону копнуть?

Пошел почитал по поводу строки соединения на MSDN
авторIf you're using Management Studio to test the queries, click the Options button on Connection Manager to access the additional connection string properties pane, where you can enter subqueries=1 or 2 to allow calculated members in the subspace.

Попробовал поменять в студии, эффекта 0 :(
...
Рейтинг: 0 / 0
Объясните логику MDX
    #39366971
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexTank,

начиная отсюда Key Concepts in MDX (Analysis Services)
в частности Subselects in Queries
...
Рейтинг: 0 / 0
Объясните логику MDX
    #39367004
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexTankWarAntAlexTank,

ну и чтобы цифры были одинаковые уберите ,[Торговые точки].[Округ].[Все]
Ваш КЕП:)
Мне в строке по конкретному округу нужна сумма по всем округам с учетом фильтров.
Как ее посчитать?

Вы уже наконец выполните требования форму по оформлению топиков и нарисуйте итоговый вариант данных, как вы их хотите видеть, а то каша какая то пока получается.
...
Рейтинг: 0 / 0
Объясните логику MDX
    #39368377
AlexTank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WarAntAlexTankпропущено...

Мне в строке по конкретному округу нужна сумма по всем округам с учетом фильтров.
Как ее посчитать?

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

С Учетом фильтров:
Месяц ФОкруг Товар Оборот Оборот по всем ФО2016/ОктябрьВсеКартон220022002016/ОктябрьСеверо-Западный федеральный округКартон120022002016/ОктябрьЮжный федеральный округКартон10002200

Весь набор при этом такой:
Месяц ФОкруг Товар Оборот Оборот по всем ФО2016/ОктябрьВсеКартон350035002016/ОктябрьСеверо-Западный федеральный округКартон120035002016/ОктябрьЮжный федеральный округКартон100035002016/ОктябрьДальневосточный федеральный округКартон13003500

Сейчас же это выглядит так с фильтром
Месяц ФОкруг Товар Оборот Оборот по всем ФО2016/ОктябрьВсеКартон220035002016/ОктябрьСеверо-Западный федеральный округКартон12003500

Без фильтра соответственно совпадает. Мне нужно, чтобы в строке каждого ФО в столбце "Оборот по всем ФО" стояла цифра по всем ФО, которая стоит в строке Все столбца Оборот.
...
Рейтинг: 0 / 0
Объясните логику MDX
    #39368385
AlexTank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Куда то строку отьело в третей таблице, ее надо читать так:

Месяц ФОкруг Товар Оборот Оборот по всем ФО2016/ОктябрьВсеКартон220035002016/ОктябрьСеверо-Западный федеральный округКартон120035002016/ОктябрьЮжный федеральный округКартон10003500
...
Рейтинг: 0 / 0
Объясните логику MDX
    #39368443
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexTank,

ну как то так
Код: 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.
WITH
set [shops] as STRTOSET("[Торговые точки].[Регион].&[39]", CONSTRAINED)
Member [Measures].[TotalRub] AS
aggregate([shops], [Measures].[Оборот руб])

SELECT
{
[Measures].[Оборот руб],
[Measures].[TotalRub]
}
ON columns,

(
[Дата].[Г-М].[Месяц].allmembers*
[Торговые точки].[Округ].allmembers*
[Номенклатура].[Наименование короткое].&[Картон]
)
ON rows


FROM (SELECT ( STRTOSET("[Сети].[Наименование].&[4307]", CONSTRAINED) ) ON COLUMNS 
FROM ( SELECT (STRTOMEMBER("[Дата].[Г-М].[Месяц].&[201610]", CONSTRAINED) ) ON COLUMNS 
FROM ( SELECT ( [shops] ) ON COLUMNS
FROM [Retail Analytics])
))
...
Рейтинг: 0 / 0
Объясните логику MDX
    #39368549
AlexTank
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WarAnt,

В лоб напролом. Я думал, может есть какие то другие, более изящные решения. Этот вариант с фильтром в member я и реализовал.
:)

У меня в фильтре 8 полей, у меня не один такой показатель, их штук 6, в итоге код пухнет как на дрожжах.

И у меня большой диссонанс с from из tsq, там кроме того, что ограничено запросом никак не может появиться на других уровнях запроса.

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


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