powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MDX для выяснения просроченного долга
8 сообщений из 8, страница 1 из 1
MDX для выяснения просроченного долга
    #32620295
Вал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таблице фактов есть поля
1. ДатаОперации (день когда прошла операция)
2. ОплатитьДо (день после котрого оплата считается просроченной)
3. Сумма (сумма денег)
4. ЭтоОплата (1 если оплата, 0 если закуп)
В итоге надо получить
1. сумму просроченного/непросроченного долга на дату
2. Количество дней просрочки на дату

Использую MS AS
В качестве клиента - Excel

Вопрос - как построить вычисляемый мембер, для 1 и 2
На самом деле даже немного проще - как сравнить даты?
Когда пишу datediff("d",[ДатаОперации].currentMember,[Оплатитьдо].currentMember) для выснения сколько дней в прошло просрочке - выдает #ERR
Почему?
...
Рейтинг: 0 / 0
MDX для выяснения просроченного долга
    #32620894
Вал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел на форуме что необходимо измерение дата/время делать на отдельной таблице. Сгенерировал такую таблицу (дата, номер дня , тип дня, признак банковского дня). Увязал с таблицей фактов, только вот не знаю, правильно ли сязывать две таблицы по дате, или надо было выделять отдельную колонку с идами. Легче не стало. Все равно не могу посчитать просроченный/не просроченный долг и дни просрочки. Даже просто бинарный признак - долг просрочен (1-да, 0 - нет) не могу придумать как сделать
...
Рейтинг: 0 / 0
MDX для выяснения просроченного долга
    #32621575
Вал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем сделал так -
К измерению ДатаОперации добавил уровень - документ у которого есть 2 свойства "ДатаОперации" и "оплатитьДо".
Просроченный долг вычисляется так -
sum(filter([ДатаОперации].CurrentMember.Children, datediff("d", [ДатаОперации].CurrentMember.Properties("ОплатитьДо"), [ДатаОперации].CurrentMember.Properties("ДатаОперации")) > 0), [Measures].[НарПлюсДолг]-[Measures].[МинусДолг])
(об этом было написано в отдной из веток на том форуме)
понимаю что это не правильно. Должен быть вариант проще. Как сделать проще не знаю. Может поскажите, мэтры?
И еще - в условиях такого определния просроченного долга, не определяется долг для уровней выше чем НомерДокумента. Пишет #ERR
Как побороть?
...
Рейтинг: 0 / 0
MDX для выяснения просроченного долга
    #32625785
Вал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Продолжение борьбы
ДатаОперации и ДатаОплаты - измерения ГМД, построенные по отдельной таличке дат.
Делаю запрос

with set DatesOper as
'{descendants( [ДатаОперации].members, ДатаОперации].[day])}'
set DatesOplata as
'{descendants( [ДатаОплаты].members, [ДатаОплаты].[day])}'

member [Measures].[Sumer] as '
sum ( nonemptycrossJoin ({DatesOper.currentMember},{DatesOplata}), ([Debkred].[All Debkred].[0],[Measures].[Долг]) ) -
sum ( nonemptycrossJoin ({DatesOper.currentMember},{DatesOplata}), ([Debkred].[All Debkred].[1],[Measures].[Долг]))'
SELECT
({[Measures].[Sumer] ,[Measures].[Долг]}) ON COLUMNS ,
{DatesOper}
ON ROWS
FROM [Деньга] WHERE ([Клиент].&[ 1V0])

([Debkred].[All Debkred].[0],[Measures].[Долг]) ) - выбирает увеличение долга
([Debkred].[All Debkred].[1],[Measures].[Долг]) ) - выбирает уменьшение долга

[Measures].[Sumer] - не считается. Выдает #Err
Если правильно понимаю, nonemptycrossJoin ({DatesOper.currentMember},{DatesOplata}) должно вернуть множество дат из таблицы фактов где ДатаОперации=DatesOper.currentMember и всех ДатОплаты.

Почему же не работает?
...
Рейтинг: 0 / 0
MDX для выяснения просроченного долга
    #32625997
Gvynt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно поинтересоваться, что возвращает Ваш NonEmptyCrossJoin?
...
Рейтинг: 0 / 0
MDX для выяснения просроченного долга
    #32626025
Gvynt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо, #ERR из-за того, что обе оси зависят од одного измерения:
DatesOper используется для вычисления [Measures].[Sumer]
...
Рейтинг: 0 / 0
MDX для выяснения просроченного долга
    #32626176
Вал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GvyntВидимо, #ERR из-за того, что обе оси зависят од одного измерения:
DatesOper используется для вычисления [Measures].[Sumer]

В кубе это два разных измерения (если я правлино понимаю это dimensions) ДатаОперации и ДатаОплаты (правда строятся по одной и той же таблице)
...
Рейтинг: 0 / 0
MDX для выяснения просроченного долга
    #32626177
Вал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GvyntМожно поинтересоваться, что возвращает Ваш NonEmptyCrossJoin?

Может и ламерский вопрос, но я не знаю как смотреть результат NonEmptyCrossJoin.
Если написать такой запрос
SELECT
({[Measures].[Долг]}) ON COLUMNS ,
{nonemptycrossjoin({DatesoPer} ,{DatesOplata})}
ON ROWS
то возвращает

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
		Долг
24	31	4 894,63
28	31	73,92
11	31	4 820,71
20	27	11 745,57
27	4	5 357,26
2	27	11 745,57
4	11	1 156,40
8	4	5 357,26
	11	32,04
11	18	4 617,43
15	11	1 124,36
16	23	4 288,06
19	26	255,70
22	18	4 617,43
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MDX для выяснения просроченного долга
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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