Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Табличная модель условие в мере / 10 сообщений из 10, страница 1 из 1
26.04.2019, 17:02
    #39806921
Lania
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная модель условие в мере
Добрый день!
Есть Табличная модель, которая состоит из двух таблиц фактов и 4 справочников. В таблице фактов 1 создана вычисляемая мера Остатки sum(), В таблице фактов 2 создана вычисляемая мера Средний заказ, немного сложнее (подсчет среднего за последние 30 дней). Попыталась создать такую меру: %:=if([остатки]/[средний заказ]>1;1;[остатки]/[средний заказ]), но при подключении к кубу из excel эту меру достать не получается, так как ругается на то, что закончилась память. Можно ли как то этой обойти?
...
Рейтинг: 0 / 0
29.04.2019, 08:40
    #39807415
IDVT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная модель условие в мере
Можно, переписать (оптимизировать) меру "...Средний заказ, немного сложнее..." если сильно жрет память, ХЗ что у Вас там, в противном случае увеличивать память у клиента и (или) сервера, возможно Excel 32 бита, смотря где недостаток.
...
Рейтинг: 0 / 0
29.04.2019, 09:18
    #39807424
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная модель условие в мере
Lania,

"так как ругается на то, что закончилась память. Можно ли как то этой обойти?"

Можно помочь подсказать, если знать что у вас за конструкция в какой инфраструктуре и какие параметры подробнее
...
Рейтинг: 0 / 0
29.04.2019, 15:34
    #39807679
Lania
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная модель условие в мере
Владимир Штепа, на данный момент я использую небольшой период( 2 месяца) для настройки модели. Таблица заказов содержит 7,5 млн строк, Таблица остатков 2,5 млн строк. Параметры сервера не скажу, так как доступа нет (я пробовала на локальной машине в POwerPivot воссоздать модель данных, нужная мера вылетает, но думает дольше, при этом постепенно сжирает всю оперативку, поэтому делаю вывод, что на сервере оперативы меньше 16 гб). Во вложенном файле структура и связи между таблицами. Необходимо получить расчет меры, которая будет результатом деления остатков на средний заказ. Для этого сначала создаю меру
Код: sql
1.
Остатки:= sum('Остатки дистрибьютора'[Quantity])

. Мера
Код: sql
1.
Средний заказ за 30 дней:=CALCULATE(sum('Заказ'[QuantityDal])/DISTINCTCOUNT('Заказ'[CRMOrderNumber]);DATESINPERIOD('Дата'[Дата];min('Дата'[Дата]);-30;DAY))

. Результат деления этих мер должен отображаться в процентах, а так как результат в основном больше 1, то необходимо задать условие
Код: sql
1.
:= if('Остатки дистрибьютора'[запас\срЗаказ]>1;1;'Остатки дистрибьютора'[запас\срЗаказ])

. При построении отчета в сводной таблице Excel(64bit), когда добавляется мера, то некоторое время думает, после чего вылетает ошибка
...
Рейтинг: 0 / 0
29.04.2019, 17:18
    #39807772
IDVT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная модель условие в мере
Почему Вас в расчетах интересует именно 30 дней а не весь месяц? Что должна вернуть ваша мера на оси года?
...
Рейтинг: 0 / 0
29.04.2019, 17:38
    #39807786
IDVT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная модель условие в мере
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
X:=
     Var Balance = Sum( 'Остатки дистрибьютора'[Quantity])
     Var AvgOrder30Day = Calculate( Sum('Заказ'[QuantityDal])
                                                     / DistinctCount( 'Заказ'[CRMOrderNumber])
                                                   , Filter( All( 'Дата')
                                                             , DateSinPeriod( 'Дата'[Дата]
                                                                                   ,  'Дата'[Дата]
                                                                                   , - 30
                                                                                   , Day
                                                                                   )
                                                            )
                                                   )

      Return if( AvgOrder30Day <> 0
                    ; Balance
                      / AvgOrder30Day
                    )



что это за условие ":= if('Остатки дистрибьютора'[запас\срЗаказ]>1;1;'Остатки дистрибьютора'[запас\срЗаказ])" вообще не понял, не нашел на вашей модели атрибута [запас\срЗаказ]....
...
Рейтинг: 0 / 0
29.04.2019, 17:39
    #39807787
IDVT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная модель условие в мере
Ошибся не много, в функцию DateSinPeriod добавьте Min()
...
Рейтинг: 0 / 0
29.04.2019, 21:06
    #39807948
Lania
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная модель условие в мере
IDVT,
Мера [запас\срЗаказ] это просто деление остатков на средний заказ. Используется 30 дней, так как такая формула была прописана пользователем, который отчёт заказал. Отчёт строится по дням, то есть в столбцы добавляется дата и нужно на каждую дату видеть средний заказ за 30 дней (период:текущая дата в столбце -30 дней). Я пока не представляю как, то что вы предложили в dax формулах записать (и получится ли вообще), завтра попробую.
...
Рейтинг: 0 / 0
30.04.2019, 08:34
    #39808117
IDVT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная модель условие в мере
Добрый день. это и есть листинг Dax.

Дело в том, что в случае такого листинга меры:

Код: sql
1.
X:= if( Sum(x) <> 0, 1/Sum(x))



по факту агрегат Sum(x) будет просчитан дважды при выполнении условия, поэтому выгоднее использовать переменные с целью исключения повторного расчета. более детально тут https://www.sqlbi.com/articles/variables-in-dax/

по поводу этой формулы:

Код: sql
1.
DATESINPERIOD('Дата'[Дата];min('Дата'[Дата]);-30;DAY))



Добавьте в календаре для каждой даты, значение даты - 30 дней, т.е. материализуйте часть расчета Вашей меры, в таком случае мера будет выглядеть так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
  Calculate( Sum('Заказ'[QuantityDal])
                 / DistinctCount( 'Заказ'[CRMOrderNumber])
               , Filter( All( 'Дата')
                        , And( 'Дата'[Дата] >= Min( 'Дата'[ДатаLast30Day])
                                , 'Дата'[Дата] <= Min( 'Дата'[Дата])
                                )
                        )
                )
...
Рейтинг: 0 / 0
30.04.2019, 10:55
    #39808207
Lania
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная модель условие в мере
IDVT,
огромное спасибо) с переменными все заработало)
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Табличная модель условие в мере / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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