Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 0
  • 1

Mam przygotowane zapytanie w PowerQuery, które pobiera dane ze wskazanych plików .csv. Na ich podstawie tworzę tabelę w Excelu zestawiającą dane statystyczne.

Lista odwołań do plików systematycznie rośnie z biegiem czasu, bowiem dodaję kolejne dane w .csv. W związku z tym, że dane historyczne co do zasady nie zmieniają się, chciałabym wyłączyć synchronizację z nimi, np. po pierwszym pobraniu danych ze wskazanego pliku źródłowego. 

W jaki sposób mogę wyłączyć synchronizację/odwołania do historycznych danych, aby zostawić te dane w tabeli podsumowującej statystyki. Jednocześnie, aby móc do tej tabeli dopisywać kolejne okresy z nowych plików .csv?

 

Agnieszka_Rzeźnikowska
  • Zapytał
  • @ Agnieszka_Rzeźnikowska | 30.05.2022
    • 2
    • 0
    • 0
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedź (1)

  • 1

Rozwiązania widzę dwa:

1) Gdy dwa-trzy lata temu interesowałem się podobnym przypadkiem, trafiłem na informację, że w Power BI można ładować dane przyrostowo, tzn. gdzieś we właściwościach połączenia można było ustawić jakieś interwały czasowe i inne skomplikowane parametry, dzięki którym połączenie samo dobierało tylko nowe dane. Wyglądało to interesująco, jednak było nieco skomplikowane i na tamtą chwilę funkcja ta była dostępna tylko w PBI, może w międzyczasie dotarła również do excelowego PQ. Po szczegóły zdawkowo odeślę do wujka google, ponieważ jest proste i skuteczne obejście - patrz punkt 2.

2) W PQ można zrobić ładowanie rekurencyjne, czyli takie, w którym tabela pobiera samą siebie, dobiera jakiś parametr do odfiltrowania posiadanych już danych (np. maksymalną datę) i importuje ze źródła tylko nowsze informacje. W tym celu najpierw tworzysz zwykłe zapytanie pobierające dane z plików do tabeli i ładujesz je do arkusza. Następnie robisz drugie, które wczytuje dane z tabeli wynikowej pierwszego, znajduje w nim parametr graniczny (np. ową datę), zaczytuje pliki, odfiltrowuje z nich rekordy powstałe po dacie, którą wcześniej znalazło i łączy jedno z drugim. Na koniec kopiujesz kod zapytania drugiego i wklejasz do pierwszej kwerendy.

Punkt drugi będzie chyba łatwiej zrozumieć na przykładzie, zatem utwórz puste zapytanie, wklej do niego poniższy kod, załaduj wynik do tabeli, upewnij się, że ma ona nazwę Tabela1 (zakładka "Projektowanie" w menu) i odśwież ją kilkukrotnie (alt+F5) :)

let
    Źródło = try Excel.CurrentWorkbook(){[Name = "Tabela1"]}[Content] otherwise #table({"lp"}, {{1}}),
    #"Obliczona wartość maksymalna" = List.Max(Źródło[lp]),
    #"Nowe dane" = #table({"lp"}, {{#"Obliczona wartość maksymalna" + 1}}),
    #"Dołączone zapytanie" = Table.Combine({Źródło, #"Nowe dane"})
in
    #"Dołączone zapytanie"

 

Mirosław_Janiak
  • Odpowiedział
  • @ Mirosław_Janiak | 02.06.2022
    • 1
    • 7
    • 1