Czym jest self w Pythonie: przykłady z życia wzięte
Czym jest self w Pythonie: przykłady z życia wzięte
W tym samouczku omówimy różnicę w działaniu indeksowania danych w relacyjnej bazie danych w porównaniu z Vertipaq.
Relacyjne bazy danych przechowują dane wiersz po wierszu. Z drugiej strony Vertipaq robi to kolumna po kolumnie.
Zobaczmy, jak te dwa sposoby przechowywania i indeksowania danych mogą wpłynąć na proces opracowywania raportów, zwłaszcza podczas uruchamiania zapytań.
Spis treści
Indeksowanie danych według wiersza
Przechowywanie danych wiersz po wierszu to tradycyjny sposób przechowywania danych. Proces ten zajmuje jednak więcej czasu, co wpłynie na wydajność zapytania.
Załóżmy, że mamy tabelę zawierającą Marka, Kolor, Płeć, Ilość i Cenę netto.
Jeśli zapiszemy wszystko w tej tabeli w bazie danych, dane będą przechowywane wiersz po wierszu. Dlatego tradycyjna struktura przechowywania danych jest również nazywana magazynem wierszy.
Po pierwsze, w tej samej linii zostaną zapisane nagłówki kolumn znalezione w pierwszym wierszu — Marka, Kolor, Płeć, Ilość i Cena netto. Następnie przechodzi do następnego wiersza, aby zapisać pierwsze elementy w każdej kolumnie — A. Datum, Azure, puste miejsce, 1 i 103,2. To trwa rząd po rzędzie.
Jak więc obliczymy SUMĘ przy użyciu tej metody indeksowania danych?
Najpierw zaczyna się od pierwszego wiersza, który zawiera nagłówki kolumn. Następnie przeskakuje do następnego wiersza i przeskakuje przez inne fragmenty danych, aż dojdzie do pierwszej wielkości, którą widzi, czyli 1. Następnie przeskakuje z wiersza do wiersza, przeglądając wszystkie dane zawarte w każdym wierszu i zbiera wszystkie ilości są znaleziskami.
Po odłożeniu wszystkich ilości z każdego wiersza jest to jedyny moment, w którym obliczenia są zakończone.
Prawdopodobnie możesz sobie wyobrazić, jak żmudny jest ten proces, jeśli przygotowujesz raport usługi LuckyTemplates korzystający z połączenia DirectQuery ze źródłem danych SQL. W tym przypadku usługi analityczne przekonwertują kod DAX na język SQL, a następnie zaczną przeglądać strukturę danych wiersz po wierszu.
Indeksowanie danych według kolumny
Aby uniknąć długiego procesu, masz możliwość przechowywania danych kolumna po kolumnie za pośrednictwem Vertipaq, gdy wybierzesz tryb importu.
Gdy używasz magazynu kolumnowego zamiast magazynu wierszy, Marka, Kolor, Płeć, Ilość i Cena netto będą przechowywane w różnych strukturach danych.
Powiedzmy, że chcemy uzyskać SUMA wartości w kolumnie Ilość. Nie będzie potrzeby przechodzenia przez Marka, Kolor i inne dane poza kolumną Ilość. Podczas jednego skanowania odczytuje całą kolumnę Ilość od góry do dołu i sumuje wszystkie wartości.
Z tego powodu zapytania będą wykonywane szybciej niż robienie tego od lewej do prawej.
Porównanie czasu wykonania w prostych zapytaniach
Aby naprawdę zobaczyć ogromną różnicę między magazynem wierszy a magazynem kolumn, wykonajmy kilka zapytań testowych zarówno w SQL, jak i Vertipaq. Czas wykonania powinien nam powiedzieć, jak szybko jeden proces jest porównywany z drugim.
Zacznijmy od prostego zapytania w SQL. Zamierzamy obliczyć wartość SUMA kolumny Ilość w tabeli Sprzedaż.
Jak widać, całkowity czas wykonania wynosi 2,2 sekundy.
Przejdźmy teraz do DAX Studio i użyjmy funkcji EVALUATE , aby wykonać to samo zapytanie. Musimy włączyć synchronizację serwera i poczekać na zakończenie śledzenia.
Musimy również upewnić się, że podczas uruchamiania zapytania wybrana jest opcja „Wyczyść pamięć podręczną, a następnie uruchom”.
Po wykonaniu zapytania zobaczysz, że wykonanie tego samego zapytania, które wykonaliśmy wcześniej w SQL, zajmuje tylko 3 milisekundy.
Zestaw wyników powinien być również zgodny zarówno dla SQL, jak i DAX Studio. Jeśli umieścimy je obok siebie, zobaczysz, że zwracamy tę samą wartość.
Możesz spróbować uruchomić zapytanie jeszcze kilka razy, aby zobaczyć, jak spójny jest czas wykonania.
Porównanie czasu wykonania w bardziej skomplikowanych zapytaniach
Tym razem porównajmy czas wykonania w przypadku bardziej skomplikowanych zapytań.
Załóżmy, że chcemy określić SUMĘ ilości sprzedaży dla każdej marki. Aby to zrobić, możemy użyć ponad każdej marki produktu. W niskim kontekście utworzymy również nową tabelę o nazwie Całkowita ilość, w której będziemy dla SUMY Ilości sprzedaży.
Jeśli uruchomimy ten kod, zobaczysz, że całkowity czas wykonania wynosi 7 milisekund.
W tle ten kod faktycznie uruchamia dwa zapytania. Pierwsza pobiera kolumnę Marka z tabeli Produkty, a następnie wykonuje OUTER JOIN na kolumnach Product Key zarówno z kolumny Sales, jak i z kolumny Products.
Drugie zapytanie po prostu pobiera kolumnę Marka z tabeli Produkty.
Jeśli przejdę do ekranu wyników, zobaczysz, że miara Total Quantity została podzielona na podstawie każdej marki.
Przejdźmy teraz do serwera SQL i napiszmy to samo zapytanie.
Przesuniemy tabelę DaxStudio Sales do następnego wiersza, odwołując się do tabeli Sales AS S. Następnie wykonamy również LEFT JOIN w tabeli DaxStudio Products oznaczonej AS P, z kluczem S.Product równym P.Klucz produktu. Zamierzamy również użyć P.Brand z SUM of the Quantity i Total Quantity w instrukcji SELECT . Na koniec użyjemy dla P.brand.
Po uruchomieniu tego kodu otrzymamy tabelę zawierającą łączną ilość segregowaną według każdej marki, czyli to samo, co poprzednio otrzymaliśmy w Vertipaq.
Jeśli chodzi o całkowity czas wykonania, pozostaje on znacznie wolniejszy i wynosi 2,5 sekundy.
DAX dla usługi LuckyTemplates: Optymalizacja przy użyciu silników formuł w DAX Studio
Techniki i lekcje optymalizacji zapytań w języku DAX
Wydajność zapytań i konfiguracja w DAX Studio
Wniosek
Jest oczywiste, jak szybki jest magazyn kolumnowy za pośrednictwem Vertipaq w porównaniu z magazynem wierszy w bazie danych SQL. Pokazuje to, jak ważne jest poznanie sposobu, w jaki indeksowanie danych działa na różnych platformach.
Na początku może się to wydawać niewielkim poświęceniem, jeśli nadal zdecydujesz się na 2,5 sekundy, w której magazyn wierszy uruchamia twoje zapytanie w porównaniu do 7 milisekund. Ale wszyscy uruchamiamy kilka zapytań podczas tworzenia naszych raportów, a wszystkie te czasy wykonania sumują się, wpływając na produktywność i wrażenia użytkowników w dłuższej perspektywie.
Czym jest self w Pythonie: przykłady z życia wzięte
Dowiesz się, jak zapisywać i ładować obiekty z pliku .rds w R. Ten blog będzie również omawiał sposób importowania obiektów z R do LuckyTemplates.
Z tego samouczka języka kodowania DAX dowiesz się, jak używać funkcji GENERUJ i jak dynamicznie zmieniać tytuł miary.
W tym samouczku omówiono sposób korzystania z techniki wielowątkowych wizualizacji dynamicznych w celu tworzenia szczegółowych informacji na podstawie dynamicznych wizualizacji danych w raportach.
W tym artykule omówię kontekst filtra. Kontekst filtrowania to jeden z głównych tematów, z którym każdy użytkownik usługi LuckyTemplates powinien zapoznać się na początku.
Chcę pokazać, jak usługa online LuckyTemplates Apps może pomóc w zarządzaniu różnymi raportami i spostrzeżeniami generowanymi z różnych źródeł.
Dowiedz się, jak obliczyć zmiany marży zysku przy użyciu technik, takich jak rozgałęzianie miar i łączenie formuł języka DAX w usłudze LuckyTemplates.
W tym samouczku omówiono idee materializacji pamięci podręcznych danych oraz ich wpływ na wydajność języka DAX w dostarczaniu wyników.
Jeśli do tej pory nadal korzystasz z programu Excel, jest to najlepszy moment, aby zacząć korzystać z usługi LuckyTemplates na potrzeby raportowania biznesowego.
Co to jest brama LuckyTemplates? Wszystko co musisz wiedzieć