Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Замедление работы макросов в фоновом режиме на ноутбучном железе
 
Всех  приветствую! Если тема уже обсуждалась, то прошу сильно не пинать.
Суть проблемы:
Есть рабочий стационарный компьютер (12400, 32 Гб оперативы, ssd 512 m2)  и есть домашний ноутбук (ultra 255h, 16 Гб оперативы, ssd 512 m2), программная часть на обеих машинах одинаковая Win 10 pro, Эксель 365. На рабочем компьютере макрос в любом режиме (т.е. находишься в самом Экселе или выполняешь другую работу (браузер, проводник, pdf и т.д)) отрабатывает стабильно за условные  180 сек. При этом на ноутбуке ситуация немного другая. Если находишься в самом экселе, то макрос отрабатывает за 157 сек (режим питания сбалансированный), но когда условно начинаю делать тоже, что на стационарном компьютере (браузер, проводник, pdf и т.д), то ситуация меняется в худшую сторону: на режиме сбалансированный  около 400 сек, на режиме высокая производительность 230 сек. На зарубежных форумах читал про установку приоритета в диспетчере задач, но все равно результата в 157  сек так и не достиг даже близко.
Сисадмин на работе говорит, что связано с энергоэффективностью новых ноутбучных процессоров и что это сейчас норма. Но, по-моему, так не должно быть.
Может кто сталкивался с таким поведением и как это победить?
DAX использование переменных замедляет работу обновления отчетов в сводной PP
 
Всех приветствую. Может кто сталкивался с проблемой по поводу того, то при использование переменных в DAX происходит замедление обновления отчетов в сводной PP.
Предыстория.
Написал я меру для расчета накопительной суммы приходов товара( в модели есть еще одна мера с похожим расчетом), запустил обновление отчета, и устал ждать обновления (до этого все работало быстро).
Код
Остаток на кон_шт: = var maxDate = MAX('ТаблКалендарь'[Дата])
var DateInPeriod = DATESBETWEEN('ТаблКалендарь'[Дата];DATE(2023;1;1);maxDate)
var Result = CALCULATE([Приход_шт]-[Продано_шт];DateInPeriod)
return Result

Изначальная мера:
Код
Остаток на кон_шт:= CALCULATE([Приход_шт]-[Продано_шт];DATESYTD('ТаблКалендарь'[Дата]))
Далее убрал из новой меры все, кроме Result, но результат обновления отчета быстрее не стал.
Код
Остаток на кон_шт: 
var Result = CALCULATE([Приход_шт]-[Продано_шт];DATESYTD('ТаблКалендарь'[Дата]))
return Result
Вернул обратно меру, и все стало обновляться также быстро.
Код
Остаток на кон_шт:= CALCULATE([Приход_шт]-[Продано_шт];DATESYTD('ТаблКалендарь'[Дата]))
Может кто сталкивался с подобным или может причина в другом? (Модель прилагаю)

upd. я конечно переписал меру (отрабатывает также быстро):
Код
Остаток на кон_шт:= CALCULATE([Приход_шт]-[Продано_шт];DATESBETWEEN('ТаблКалендарь'[Дата];DATE(2023;1;1);MAX('ТаблКалендарь'[Дата])))
Изменено: Alex - 11.01.2024 10:55:26
VBA, ошибка наполнения динамического массива без указания свойства Value
 
Доброго времени суток. Подскажите, пожалуйста, нюанс по  поводу наполнения динамического массива без указания свойства Value. В примере во вложении есть процедура с двумя массивами arr1 и arr2. Вопрос заключается в том, почему массиву arr1 присвоились значения из диапазона, а массиву arr2 нет.
Изменено: Alex - 28.09.2023 20:25:10
VBA, группировка массива с суммированием и конкатенацией строк по ключу с помощью словаря
 
Добрый день, уважаемые специалисты по VBA.
Только начал изучать VBA, поэтому многих нюансов не знаю.
Подскажите, пожалуйста, почему неправильно отрабатывает нижеприведенный код. Во вложении то как отрабатывает и то как надо.
Заранее спасибо за ответ.
Код
Sub Group()
    Dim dict As Object
    Dim arr As Variant, arr2 As Variant
    Dim i As Long, t1 As Double
    Dim key As Variant
    Dim j As Long
    

    ' Инициализация словаря
    Set dict = CreateObject("Scripting.Dictionary")
    t1 = Timer
    ' Загрузка данных из диапазона в массив
    arr = Range("A2:C31").Value

    ' Обработка каждой строки массива
    For i = LBound(arr, 1) To UBound(arr, 1)
        key = arr(i, 1) ' Первый столбец используется в качестве ключа

        ' Если ключ уже существует в словаре, суммируем или объединяем значения
        If dict.Exists(key) Then
            dict(key)(0) = CDbl(dict(key)(0)) + CDbl(arr(i, 2)) ' Суммируем значения во втором столбце
            dict(key)(1) = dict(key)(1) & ", " & arr(i, 3) ' Объединяем значения в третьем столбце
        Else
            ' Если ключ не существует в словаре, добавляем новую запись
            dict.Add key, Array(CDbl(arr(i, 2)), arr(i, 3))
        End If
    Next i

        
    j = 1
    ReDim arr2(1 To dict.Count, 1 To 3)
    For Each key In dict.keys
        arr2(j, 1) = key
        arr2(j, 2) = dict(key)(0)
        arr2(j, 3) = dict(key)(1)
        j = j + 1
    Next key
    Sheets.Add After:=Sheets(Sheets.Count)
    Range("A2").Resize(dict.Count, 3).Value = arr2
    MsgBox Round(Timer - t1, 0)
End Sub
 
VBA, пользовательская функция для подсчета длительности между определенными промежутками времени в таблице
 
Доброго времени суток. Подскажите, пожалуйста, возможно ли реализовать такую пользовательскую функцию на VBA, чтоб выбрать весь определенный диапазон ячеек и получить суммарную продолжительность всех заданных промежутков времени в данном диапазоне. Пример того, как могут задаваться промежутки и что хотелось бы получить во вложении.
Изменено: Alex - 21.06.2023 22:48:48
DAX - Power Pivot мера для промежуточных итогов по иерархии
 
Добрый день!
Помогите, пожалуйста, с написанием  меры для расчета суммы остатка товара, который не продается определенный промежуток времени ("Мертвый товар"). Исходные данные: торговое предприятие, на котором весь товар группируется по следующей иерархии отдел-департамент-группа-подгруппа-товар. Есть модель данных по продажам и остаткам по дням. Для нижнего уровня иерархии "Товар" написана мера для расчета суммы остатка "мертвого товара" (в примере во вложении). Но данная мера не работает для следующих уровней иерархии.  Как можно на верхних уровнях иерархии получить сумму остатка "Мертвого товара" самого нижнего уровня?
Пример того, как должно быть во вложении.
Заранее спасибо!  
Изменено: Alex - 13.04.2023 17:08:41
Страницы: 1
Наверх