Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
19.04.2024, 18:42:30

Войти
Название темы должно отражать её содержание.
Темы типа "ПОМОГИТЕ!!!", "Срочно!", "Не получается сделать", "Нужна помощь" и т.п. будут удаляться без объяснения причин
33 242 Сообщений в 5 457 Тем от 6 758 Пользователей
Последний пользователь: Сергей2662
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  PowerQuery, PowerPivot, PowerBI и запросы
| | |-+  DAX PowerBI Ошибка "Недостаточно памяти для завершения ...и" при вставке формулы
Страниц: [1]   Вниз
Печать
Автор Тема: DAX PowerBI Ошибка "Недостаточно памяти для завершения ...и" при вставке формулы  (Прочитано 8310 раз)
0 Пользователей и 1 Гость смотрят эту тему.
rick1177
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 6


Просмотр профиля
« : 27.06.2021, 09:10:54 »

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

Если вы повозите, то со своими "глупыми" вопросами я переду сюда)

Вопрос теоретический, поскольку не могу сообразить, как приложить сюда пример с очень большими данными. Ноя очень постараюсь пояснить на созданном маленьком примере.
В  приложенном примере в таблице сводка есть формула расчёта для столбца сумма:
spoiler for Hiden:
Код: (vb)
Сумма = MINX(
    FILTER(
        ALL('Данные'),
        'Данные'[Год] ==  'сводка'[Год] &&
        'Данные'[Параметр] == 'сводка'[Параметр]),
    'Данные'[Сумма_по_показателю])

Дк вот, на больших данных, где есть гигантская таблица Данные при таком исчислении возникает отвратительная ошибка "Недостаточно памяти для завершения операции. Освободите место и повторите попытку."

Пожалуйста, помогите побороть проблему.

Спасибо.
Записан
vikttur
Глобальный модератор
Ветеран
*****

Репутация: +124/-0
Офлайн Офлайн

Сообщений: 1 816



Просмотр профиля
« Ответ #1 : 27.06.2021, 16:44:22 »

Ну, как бы... Не безосновательно. И не выкинул, а на время закрыл тему до устранения замечания (не нужно забывать писать ответы помощникам в в своих темах). Тема уже открыта
« Последнее редактирование: 27.06.2021, 16:46:34 от vikttur » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #2 : 28.06.2021, 10:35:19 »

поскольку модератор того форума вероломно и безосновательно выкинул меня
Жаловаться на модераторов другого форума здесь не имеет смысла - это же другой форум  Улыбка
По сути: Выражение с использованием AND (тем более в краткой форме - &&) может значительно тормозить и грузить запрос. Лучше в таких случаях применять вложенные друг в друга фильтры. Что-то вроде:
Код: (dax)
Сумма = MINX(  
    FILTER( 
        FILTER( 
            ALL('Данные'), 'Данные'[Год] =  'сводка'[Год]
         ), 
         'Данные'[Параметр] = 'сводка'[Параметр]), 
    'Данные'[Сумма_по_показателю])
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
rick1177
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 6


Просмотр профиля
« Ответ #3 : 29.06.2021, 12:39:22 »

К Великому сожалению, даже исправленная формула привела к ошибке: "Недостаточно памяти для завершения операции. Освободите место и повторите попытку.".
В оригинале она выглядит так:
spoiler for Hiden:
Код: (vb)
Value = MINX(
FILTER(
   FILTER(
      FILTER(
         FILTER( 'Fact',
                    'Fact'[Year] = 'сводка'[Year]),
          'Fact'[REG] = 'сводка'[ID]),
      'Fact'[okved] = 'сводка'[okved]),
'Fact'[Attribute] = 'сводка'[Attribute]),
'Fact'[Sum_Year_Atr])

Что-то растерялся даже что делать.
Поражает ещё и то, что расчёт идёт на сервере, где объём выделяемой оперативки очень большой... и не хватает.
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #4 : 29.06.2021, 13:09:01 »

Попробуйте самым глубоко вложенным сделать тот фильтр, который в итоге даст самое минимальное кол-во строк. Например, сейчас самый глубоко вложенный фильтр по году. Возможно, ОКВЭД или атрибут дают меньшую выборку.
Плюс теперь совершенно непонятно, причем здесь таблица Данные, размер которой дает ошибку. Fact - это Данные?
И опишите задачу - возможно, сможем найти другую функцию, менее ресурсоемкую.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
rick1177
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 6


Просмотр профиля
« Ответ #5 : 29.06.2021, 15:24:52 »

А можно, пожалуйста, идею понятней раскрутить, чтобы я однозначно сделал то, что Вы сказали?
Т.е. у меня есть 4 критерия фильтрации.
В каждом критерии может приниматься разное количество вариантов, например:
1. Год - 7 вариантов;
2. Регион - 80 вариантов;
3. ОК - 500 вариантов;
4. Атрибут - 200 вариантов;

Как тогда организовать и попробовать вложенность фильтров?
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #6 : 29.06.2021, 17:17:38 »

идею понятней раскрутить
не знаю, куда понятнее...
Вот например, сколько у Вас строк в таблице Fact с каким-либо годом? А а сколько строк с регионом? А Атрибутом? А с ОК? Исходя чисто из логики - т.к. для ОК вариантов больше всего, то и выборка по ним изначально будет разбита на меньшие блоки для каждого варианта. Вот его и имеет смысл сделать более вложенным. И так далее: потом Атрибут, потом Регион и уже потом - Год. Что-то вроде:
Код: (dax)
Value = MINX(  
FILTER( 
   FILTER( 
      FILTER( 
         FILTER( 'Fact',   
                    'Fact'[okved] = 'сводка'[okved]), 
          'Fact'[Attribute] = 'сводка'[Attribute]), 
      'Fact'[REG] = 'сводка'[ID]), 
'Fact'[Year] = 'сводка'[Year]), 
'Fact'[Sum_Year_Atr])
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
rick1177
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 6


Просмотр профиля
« Ответ #7 : 29.06.2021, 19:21:13 »

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

ОК - 500 вариантов;
       Атрибут - 200 вариантов;
              Регион - 80 вариантов;
                     Год - 7 вариантов;
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #8 : 29.06.2021, 21:01:32 »

В общем да: самый вложенный Filter возвращает таблицу, с которой будут работать другие Filter. Вот она и должна быть изначально самой по возможности маленькой. И так по нарастающей. Я же даже пример привел непосредственно Вашей формулы.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
rick1177
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 6


Просмотр профиля
« Ответ #9 : 29.06.2021, 21:47:58 »

Попробовал, провёл расчёт... результат, к несчастью, тот же... не катит.
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #10 : 30.06.2021, 09:48:31 »

не катит
опишите задачу - возможно, сможем найти другую функцию, менее ресурсоемкую
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru