Страницы: Пред. 1 2
RSS
PQ. Есть ли возможность размещать часто используемые таблицы в оперативку чтобы PQ не читал постоянно данные с жесткого диска?, Power Query
 
PooHkrd, спаситель! Мастер! :)
Спасибо, очень сильно выручили. Знал про это меню, но настойчиво менял и комбинировал только пункты "сохранить сведения о сортировке..", и "автоформат данных".
 
Здравствуйте!
Подскажите, пожалуйста, актуален ли на текущий момент описанный принцип использования Table.Buffer (#15) для PQ на Excel?
Не получается применить
Нужно забрать и обработать данные из файла, который лежит на сетевом диске - очень медленное подключение
Я пытался разбить запрос на 2 части
1 запрос - загрузка сырых данных из источника, при этом последний шаг запроса я завернул в Table.Buffer
2 запрос - обработка, где в качестве источника я ссылаюсь на 1 запрос. При этом я вижу, что опять идет обращение к сетевому диску. Хотя я ждал, что эта таблица подтянется из буфера

Также пытался использовать Table/Buffer в рамках одного запроса. После загрузки сырых данных копирую таблицу в Table.Buffer, но при создании последующих шагов опять идет загрузка с диска

Я что то неправильно делаю? или это не применимо для Excel?
 
Цитата
Student64 написал:
я вижу, что опять идет обращение к сетевому диску. Хотя я ждал, что эта таблица подтянется из буфера
Возможно, таблица слишком большая :) и не поместилась в Буфер. Или же в буфер возьмите ее непосредственно в вашем втором запросе, а не в конце первого
F1 творит чудеса
 
Максим, таблица небольшая
Запрос1 - получил таблицу 77 строк на 4 столбца. Без буфера
Запрос2 - Источник = Table.Buffer(Запрос1)
При последующем добавлении шагов в запрос2 опять идет обновление с диска :(
Может есть какие то настройки буфера?                  
 
Удалил своё сообщение.
Изменено: Виктор Косенков - 10.04.2020 14:18:05
 
Виктор Косенков, совершенно верно, это вообще не по теме. Лучше сделайте отдельную тему. Типа, как правильно настроить свойства запроса в Power Query чтобы уменьшить время расчетов или вроде того.
Вот горшок пустой, он предмет простой...
 
Цитата
Student64 написал:
очень медленное подключение
если трабла в скорости, то может грузить сначала к себе на диск, потом уже оттуда забирать?
как-то игрался с FileSystemObject в PowerQuery
Код
let
    Source = 
        Table.FromColumns(List.Combine(List.Repeat({Table.ToColumns(Table.Combine(List.Repeat({#table({"1"},List.Zip({{1..1000}}))},500)))},10))),
    ExportToFile = (table, path) => 
        let
            path = 
                Text.Replace(path,"\","\\"),    
            ToText = (t) =>
                let 
                    ToList = Table.ToList(t,(_)=>Text.Combine(List.Transform(_,Text.From),","))
                in Text.Combine(ToList,"\n"),
            AppendToFile = (text) => 
                Web.Page("
                    <script>
                        try{
                            new ActiveXObject('Scripting.FileSystemObject')
                            .OpenTextFile('"&path&"',8)
                            .WriteLine('"&text&"');
                        }catch(e){
                            document.write(
                                '<table>'+
                                    '<caption>error</caption>'+
                                    '<tr><th>error</th></tr>'+
                                    '<tr><td>'+e.description+'</td></tr>'+
                                '</table>'
                            )
                        };
                    </script>
                "){[Caption="error"]}?[Data]?[error]?{0}?,
            Indexed = 
                Table.AddIndexColumn(table, "index", 0, 1),
            CreateFileWithHeader = 
                Web.Page("
                    <script>
                        try{
                            new ActiveXObject('Scripting.FileSystemObject')
                                .CreateTextFile('"&path&"',true)
                                .Write('"&Text.Combine(Table.ColumnNames(table),",")&"\n');
                        }catch(e){
                            document.write(
                                '<table>'+
                                    '<caption>error</caption>'+
                                    '<tr><th>error</th></tr>'+
                                    '<tr><td>'+e.description+'</td></tr>'+
                                '</table>'
                            )
                        };
                    </script>
                "),
            Export = (file) => 
                Table.Group(
                    Indexed, 
                    {"index"}, 
                    {{"_", each AppendToFile(ToText(_))}},
                    GroupKind.Local,
                    (a,b)=>Number.From(b[index]-a[index]>=1000)
                )
        in 
            Export(CreateFileWithHeader),
    test = 
        ExportToFile(Source, "D:\1\test1.txt")
in
    test


тут reg файл c необходимыми изменениями для работы запроса

зы. там файл заменил, только сейчас увидел, что не с теми значениями выложил
Изменено: Андрей Лящук - 10.04.2020 18:23:58
 
Андрей Лящук, спасибо, почитаю! Но весь файл переносить не хочется, из него нужна маленькая таблица.
При этом буфер полезен не только в случае медленного подключения, но и при импорте со своих дисков.
Не понимаю, почему не работает буфер как у других...:(
 
Может стоит в запросе, который берет данные из файла использовать
Код
Binary.Buffer(File.Contents(Ссылка_на_файл))
 
Цитата
Student64 написал:
При последующем добавлении шагов в запрос2 опять идет обновление с диска
шаги-то какие? от этого может зависеть
F1 творит чудеса
 
Максим Зеленский, разные пробовал несложные - удаление пустых строк, изменение формата. И каждый раз внизу было видно что идет обращение к источнику.
Может я неправильно понимаю суть буфера? Он должен работать в режиме пошагового построения и предварительного просмотра?
или он включается только в момент запуска запроса целиком?
 
Он работает в обоих случаях. Но в редакторе он все равно будет пересчитывать запрос каждый раз при просмотре каждого шага. Более того по умолчанию в режиме редактора запрос обычно не считывает источник целиком (зависит от применяемых шагов), а только первые тысячу строк. Когда же вы применяете буфер, то вы вынуждаете запрос считывать все источники, к которым идет обращение полностью. Именно поэтому в процессе разработки сложных запросов лучше всего работать с обрезанными данными. А уже когда разработка закончена, тогда скармливайте ему весь массив и проверяйте корректность результата.
Вот горшок пустой, он предмет простой...
 
PooHkrd, понял, спасибо!
 
Максим Зеленский,
Цитата
Максим Зеленский написал:
да, всё верно. Таким образом, кстати, можно организовать инкрементную загрузку данных, которая сейчас в PQ и в Power BI пока не реализована (и сомневаюсь, что в ближайшее время будет реализована где-то, кроме Power BI Premium).
Не судите строго, если задаю глупые вопросы и переспрашиваю одно и то же по несколько раз, не так давно начал пользоваться инструментом... У меня есть несколько вопросов:
1) Правильно ли я понял, что если выводить результат запроса в таблицу, то это аналог функции Table.Buffer? НО, в таком случае следует обновлять запросы в правильном порядке, чтоб наша таблица обновилась в первую очередь? Релевантно ли это утверждение на сегодня? (с момента прошлого обсуждения прошло более 3-х лет).
2) Под "инкрементной загрузкой" вы подразумеваете как раз такой способ поочередного обновления запросов? Реализован ли этот способ на данный момент (или запросы все еще обновляются в рандомном порядке )?? Если да, то в каких инструментах (Power BI, Excel)?
3) Хотелось бы увидеть пояснительный комментарий по поводу Table.Buffer, актуально ли использование функции на сегодня? Я пытался ее использовать в рамках одного запроса, чтоб закинуть сразу в кэш и на последующих шагах не обращаться к источнику, но на каждом шаге запроса всё равно шло обращение к источнику (будь то объединение таблиц или же просто меняю тип данных в столбце), а в некоторых запросах даже объединение происходит без обращения к источнику, я так и не могу понять, в каких случаях оно есть, а в каких нет?(ответ Ehrenа на сайте Microsoft читал, но согласно его словам, буферизация точно должна работать в рамках одного запроса)
 
Владимир Колотиев,
1. Да, но это костыль.
2. Нет инкрементная загрузка, это когда вы к имеющимся данным подгружаете кусочек, которого в них не хватает. Т.е. не обновляется вся таблица целиком, а только добавляются недостающие данные. Такое работает только в PBI на платных аккаунтах.
3. ответ на этот вопрос содержится в моем посте №42. Прочитайте внимательно.
Использую буфер регулярно. Ускоряет это работу запросов в некоторых случаях на порядки. Иногда использованием буфера позволяет объезжать глюки языка М.
Вот горшок пустой, он предмет простой...
 
PooHkrd, прочитал пост №42. Я работаю по дефолту в режиме усеченного массива данных(1к строк), но при этом обращение к источнику длится очень и очень долго (в источнике порядка полумиллиона строк). Из Ваших слов следует, что буфер мне помочь не может никак, а наоборот усугубить ситуацию? При всём при этом вычислительные мощности ПК очень серьезные.

Еще один вопрос возник в процессе работы. У меня есть таблица, выгруженная из запроса. Мне на основе этой таблицы нужно сделать новый запрос, немного его преобразовать, выгрузить на лист (для внесения пользователями данных). После чего заджойнить вторую таблицу и первую. И вот тут вопрос: в каком порядке эти запросы обновятся, если нажать "обновить всё"? Сначала первый, затем второй и уже в конце третий? Или нужно вручную обновлять их в нужной последовательности?
 
Доброе время суток.
Подозреваю, что Максим Зеленский подразумевал такой приём, как на картинке. Архив распаковать в папку c:\path
Обратите внимание, что файл в папке csvdata\2019 переименован, что не мешает обновлять данные :)
Плата
1. Ручная поддержка и эмпирический подход - как разбивать данные на обновляемую часть и части не требующие обновления.
2. Педантичный подход к обслуживанию структуры данных, особенно в части таблиц-измерений.
3. Двойной размер файла
4. Путающиеся под ногами при написании мер и вычисляемых столбцов таблицы.
Страницы: Пред. 1 2
Наверх