Dlaczego moje zapytanie jest uruchamiane wiele razy?
Podczas odświeżania w dodatku Power Query za kulisami jest wiele zadań, aby spróbować zapewnić bezproblemowe środowisko użytkownika oraz wydajne i bezpieczne wykonywanie zapytań. Jednak w niektórych przypadkach można zauważyć, że wiele żądań źródła danych jest wyzwalanych przez dodatek Power Query podczas odświeżania danych. Czasami te żądania są normalne, ale innym razem można im zapobiec.
W poniższych sekcjach opisano kilka wystąpień, gdy dodatek Power Query może wysyłać wiele żądań do źródła danych.
Łączniki mogą wykonywać wiele wywołań do źródła danych z różnych powodów, w tym metadanych, buforowania wyników, stronicowania itd. To zachowanie jest normalne i jest przeznaczone do pracy w ten sposób.
W przypadku ściągnięcia z tego źródła danych wiele żądań do tego samego źródła danych może wystąpić. Te żądania mogą wystąpić nawet w przypadku, gdy tylko jedno zapytanie odwołuje się do źródła danych. Jeśli co najmniej jedno inne zapytanie odwołuje się do tego zapytania, każde zapytanie — wraz ze wszystkimi, od których zależy — jest oceniane niezależnie.
W środowisku pulpitu jest uruchamiane pojedyncze odświeżanie wszystkich tabel w modelu danych przy użyciu jednej udostępnionej pamięci podręcznej. Buforowanie może zmniejszyć prawdopodobieństwo wielu żądań do tego samego źródła danych, ponieważ jedno zapytanie może korzystać z tego samego żądania, które zostało już uruchomione i buforowane dla innego zapytania. Mimo to można uzyskać wiele żądań, ponieważ:
- Źródło danych nie jest buforowane (na przykład lokalne pliki CSV).
- Żądanie do źródła danych różni się od żądania, które zostało już buforowane z powodu operacji podrzędnych (które mogą zmieniać składanie).
- Pamięć podręczna jest za mała (co jest stosunkowo mało prawdopodobne).
- Zapytania są uruchamiane w mniej więcej tym samym czasie.
W środowisku chmury każde zapytanie jest odświeżane przy użyciu własnej oddzielnej pamięci podręcznej. Dlatego zapytanie nie może korzystać z tego samego żądania, które zostało już zapisane w pamięci podręcznej dla innego zapytania.
Czasami warstwa składania dodatku Power Query może generować wiele żądań do źródła danych na podstawie wykonywanych operacji podrzędnych. W takich przypadkach można uniknąć wielu żądań przy użyciu polecenia Table.Buffer
. Więcej informacji: Buforuj tabelę
W programie Power BI Desktop usługi Analysis Services (AS) odświeża dane przy użyciu dwóch ocen: jeden do pobrania schematu — co robi AS, prosząc o zero wierszy — i jeden do pobrania danych. Jeśli przetwarzanie schematu wiersza zerowego wymaga pobrania danych, mogą wystąpić zduplikowane żądania źródła danych.
Prywatność danych wykonuje własne oceny poszczególnych zapytań, aby określić, czy zapytania są bezpieczne do uruchomienia razem. Ta ocena może czasami powodować wiele żądań do źródła danych. Znak telltale, że dane żądanie pochodzi z analizy prywatności danych jest to, że ma warunek "TOP 1000" (chociaż nie wszystkie źródła danych obsługują taki warunek). Ogólnie rzecz biorąc, wyłączenie prywatności danych — przy założeniu, że jest to akceptowalne — wyeliminowałoby "TOP 1000" lub inne żądania związane z prywatnością danych podczas odświeżania. Więcej informacji: Wyłączanie zapory prywatności danych
Podobnie jak w przypadku ocen wykonywanych pod kątem prywatności danych, edytor Power Query domyślnie pobiera podgląd pierwszych 1000 wierszy każdego kroku zapytania. Pobieranie tych wierszy pomaga upewnić się, że podgląd danych jest gotowy do wyświetlenia natychmiast po wybraniu kroku, ale może również powodować zduplikowane żądania źródła danych. Więcej informacji: Wyłączanie analizy w tle
Różne zadania edytora Power Query w tle mogą również wyzwalać dodatkowe żądania źródła danych (na przykład analiza składania zapytań, profilowanie kolumn, automatyczne odświeżanie podglądu 1000 wierszy wyzwalane przez dodatek Power Query po załadowaniu wyników do programu Excel itd.).
Możesz odizolować wystąpienia wielu zapytań, wyłączając określone części procesu zapytania, aby odizolować miejsca, z których pochodzą zduplikowane żądania. Jeśli na przykład uruchomisz:
- W edytorze Power Query
- Po wyłączeniu zapory
- Z wyłączoną analizą w tle
- W przypadku profilowania kolumn i innych zadań w tle wyłączonych
- [Opcjonalnie] Wykonywanie
Table.Buffer
W tym przykładzie masz tylko jedną ocenę języka M, która odbywa się po odświeżeniu podglądu edytora Power Query. Jeśli w tym momencie wystąpią zduplikowane żądania, są one w jakiś sposób związane ze sposobem tworzenia zapytania. Jeśli nie, a jeśli włączysz wcześniej opisane ustawienia jeden po jednym, możesz obserwować, w jakim momencie zaczynają występować zduplikowane żądania.
W poniższych sekcjach opisano te kroki bardziej szczegółowo.
Nie musisz ponownie łączyć się ani ponownie utworzyć zapytania, po prostu otwórz zapytanie, które chcesz przetestować w edytorze Power Query. Możesz zduplikować zapytanie w edytorze, jeśli nie chcesz bałaganu z istniejącym zapytaniem.
Następnym krokiem jest wyłączenie zapory prywatności danych. W tym kroku założono, że nie obawiasz się wycieku danych między źródłami, dlatego wyłączenie zapory prywatności danych można wykonać przy użyciu zawsze ignorowanych ustawień poziomu prywatności opisanych w temacie Ustaw szybkie łączenie w programie Excel lub użycie opcji Ignoruj poziomy prywatności i potencjalnie poprawić ustawienie wydajności opisane w temacie Poziomy prywatności programu Power BI Desktop w programie Power BI Desktop.
Pamiętaj, aby cofnąć ten krok przed wznowieniem normalnego testowania.
Następnym krokiem jest wyłączenie analizy w tle. Analiza w tle jest kontrolowana przez ustawienie Zezwalaj na pobieranie danych w wersji zapoznawczej w tle opisanym w artykule Wyłączanie odświeżania w tle dodatku Power Query dla usługi Power BI. Możesz również wyłączyć tę opcję w programie Excel.
Opcjonalnie możesz również użyć Table.Buffer
polecenia , aby wymusić odczytywanie wszystkich danych, co imituje to, co dzieje się podczas ładowania. Aby użyć Table.Buffer
w edytorze Power Query:
Na pasku formuły edytora Power Query wybierz przycisk fx , aby dodać nowy krok.
Na pasku formuły umieść nazwę poprzedniego kroku za pomocą metody Table.Buffer (<poprzednia nazwa kroku znajduje się tutaj>). Jeśli na przykład poprzedni krok został nazwany
Source
, na pasku formuły zostanie wyświetlony= Source
ciąg . Edytuj krok na pasku formuły, aby powiedzieć= Table.Buffer(Source)
.
Więcej informacji: Table.Buffer
Aby uruchomić test, wykonaj odświeżanie w edytorze Power Query.