Dodawaj, usuwaj i zmieniaj nazwy kolumn w R za pomocą Dplyr
W tym samouczku omówimy pakiet dplyr, który umożliwia sortowanie, filtrowanie, dodawanie i zmianę nazw kolumn w języku R.
W tym samouczku przyjrzymy się fragmentowi kodu języka DAX. Być może korzystałeś już z czegoś takiego. Możesz też natknąć się na to i być zdezorientowanym, jak działa ten kod i jak wydaje się, że zarówno kontekst wiersza, jak i kontekst filtru wchodzą ze sobą w interakcję w jednym kodzie języka DAX. Tak czy inaczej, ten samouczek szczegółowo omówi wszystkie powyższe. Możesz obejrzeć pełny film z tego samouczka na dole tego bloga.
Najpierw przyjrzymy się samemu kodowi. Następnie przejdziemy do części teoretycznej, aby lepiej to zrozumieć. Na koniec przyjrzymy się wszystkiemu za kulisami, korzystając z DAX Studio .
Model danych, którego będziemy używać, jest w zasadzie prostym modelem danych sprzedaży, który zawiera daty, sprzedaż i tabelę Produkty. Tabela Sales zawiera transakcje dla każdego podanego dnia. Tabela Produkty zawiera informacje o sprzedaży produktów w danym dniu. Na potrzeby tego samouczka tabela Dates zawiera tylko kilka kolumn.
Interesuje nas tylko tabela Daty, ale użyjemy tabeli Sprzedaż i Tabela Produkty, aby wyjaśnić, w jaki sposób kontekst filtru i kontekst wiersza rozprzestrzeniają się za pomocą relacji.
Spis treści
Kontekst wiersza i kontekst filtra w bieżącym pomiarze sumarycznym
Teraz utwórzmy bieżącą miarę całkowitą, ponieważ zawiera ona zarówno kontekst wiersza, jak i filtru. Jest to podstawowa bieżąca miara sumy, w której używam LICZ. zamiast FILTRA i funkcji WSZYSTKO, aby zwrócić wszystkie lata, które mam w tabeli dat. Kiedy wprowadzę tę miarę do poniższej tabeli, widać, że otrzymujemy oczekiwany wynik.
Teraz spróbujmy przeanalizować, jak działa ten kod DAX.
W pomiarze widać, że najpierw mamy COUNTROWS, ale to nie jest pierwsza funkcja, która jest oceniana lub wykonywana. Następnie mamy funkcję FILTRUJ, a następnie WSZYSTKO. Pierwszą rzeczą w kolejności oceny jest WSZYSTKO. Funkcja ALL zwraca wszystkie unikatowe wartości numeru roku kalendarzowego dat, ignorując wszelkie konteksty filtrów, które istnieją poza funkcją ALL.
Tak więc w metrykach mamy kolumnę Numer roku kalendarzowego, która aktywnie filtruje tę kolumnę. Ale ponieważ WSZYSTKO zignoruje istniejący kontekst filtra, otrzymamy wszystkie unikalne wartości tej kolumny.
W drugim argumencie, w kontekście wiersza, napisaliśmy, że numer roku kalendarzowego dat powinien być mniejszy niż numer roku kalendarzowego MAX dat. Teraz, jeśli jesteś początkującym i wciąż próbujesz zrozumieć i nauczyć się języka DAX, możesz pomyśleć, że zarówno odwołania po lewej stronie, jak i wewnątrz funkcji MAX należą do tej samej kolumny i są tą samą tabelą, którą mamy w WSZYSTKIE funkcje.
Ale to nieprawda. Jedyną częścią kontekstu wiersza, która należy do funkcji ALL, jest ta, którą mamy po lewej stronie. Ten, który mamy na MAX, jest oceniany w kontekście filtra, a nie w kontekście wiersza.
Tak więc FILTER próbuje utworzyć kontekst wiersza w tabeli podanej w pierwszym argumencie, a ta część kodu jest faktycznie pobierana z tego konkretnego kontekstu wiersza. Tak więc w każdym wierszu FILTER iteruje tę tabelę, którą mamy w ALL, a następnie jesteśmy w stanie uzyskać dostęp do wszystkich wartości, które aktualnie iterujemy.
Tak więc w pierwszej iteracji mamy tylko jedną wartość. W drugiej iteracji mamy drugą wartość. Ale kiedy piszemy MAX, jest to niezależne od kontekstu wiersza, który tworzymy za pomocą funkcji FILTR. Tak więc MAX jest oceniany w kontekście filtra, który jest tworzony przez numer bieżącego roku, którego użyliśmy w tej macierzy.
Kiedy jesteśmy w 2006, MAX zwróci 2006, podczas gdy bieżący wiersz może być 2006, 2007 lub 2008. FILTER zwróci tabelę, która spełnia kryteria określone w drugim argumencie. Kiedy przejdziemy do 2007 roku, MAX zwróci 2007. W 2008 roku zwróci 2008. I w zależności od wszystkich wartości, które są mniejsze niż wartość zwracana przez funkcję MAX, FILTR zwróci tabela.
Aby udowodnić, że MAX nie jest zależny od kontekstu wiersza, możemy podzielić ten fragment kodu DAX na kilka zmiennych. Wtedy będziemy w stanie zrozumieć, że odniesienia do kolumn po lewej i prawej stronie nie są takie same.
Stwórzmy więc zmienną.
Jak widać na poniższym pomiarze, stworzyłem trzy zmienne ( ). Następnie dodałem kod FILTER na końcu ze zmienną Result, która używa COUNTROWS . Kiedy użyję tej miary w poniższej tabeli, zobaczysz, że nic się nie zmienia. Wyniki są wciąż takie same. Nadal otrzymujemy taką samą sumę bieżącą, jak wcześniej.
Jeśli wrócimy do kodu i spróbujemy pobrać wartość pierwszej zmiennej i potwierdzić to, zobaczysz, że dla każdego wiersza otrzymamy ten sam rok.
Mam nadzieję, że udało mi się wyjaśnić, że funkcja MAX w tym konkretnym kodzie tak naprawdę nie zależy od rzeczywistego kontekstu dla swoich wartości. A jeśli chcesz uprościć zrozumienie kontekstu oceny, zawsze możesz podzielić kod na kilka zmiennych, aby zrozumieć kolejność oceny i sposób wykonywania kodu.
Teraz chcę pokazać scenariusz, w którym funkcja MAX będzie zależała od kontekstu wiersza utworzonego przez funkcję FILTR.
Wróćmy więc do tego środka. Zduplikujmy to i zamiast ostatniego widocznego roku, będę miał MAKSYMALNĄ liczbę dat Numer roku kalendarzowego. Kiedy wprowadzam to do matrycy, widać, że otrzymujemy puste miejsce.
Dlaczego?
Chodzi o to, że iterujemy przez wszystkie lata, a to, co robi CALCULATE, polega na tym, że konwertuje aktualnie iterowany wiersz na równoważny kontekst filtra.
Jeśli napiszę tutaj znak równości, zobaczysz, że otrzymamy siedem, siedem i siedem.
Dlaczego?
Pozwól, że utworzę nową tabelę obliczeniową, abyś mógł łatwo zrozumieć, co się dzieje.
Pójdę utworzyć nowy stół. Następnie napiszę nad numerem roku kalendarzowego WSZYSTKICH dat. Następnie napiszę Maksymalny rok, a następnie użyję funkcji CALCULATE na MAX liczby dat w roku kalendarzowym. Teraz możesz zobaczyć, że dla każdego rzędu powtarzamy tę samą wartość.
Ponieważ liczby te nie są ściśle mniejsze od siebie, otrzymujemy puste miejsce. Ale kiedy używamy równania (=), mówimy, że wszystkie wartości mniejsze niż 2011 otrzymują siódemkę.
Co więcej, nawet jeśli używasz odniesienia do miary, takiego jak Max Year, ten kod nie zadziała.
Jeśli kliknę potwierdź, zobaczysz, że nadal nic nie otrzymujemy. Dzieje się tak, ponieważ kiedy piszemy Maksymalny rok, po prostu piszemy OBLICZ MAX dat Numer roku kalendarzowego.
Poza odwołaniem do miary zawsze znajduje się CALCULATE. Tak więc ta miara inicjuje przejście kontekstu, które przekształca aktualnie iterowany wiersz w kontekst filtru.
Ale jeśli jesteś związany i musisz użyć odniesienia do miary, możesz zapisać tę miarę w zmiennej. Jak być może wiesz, zmienne są stałe i nie mogą powodować zmiany kontekstu. Nie może więc przekonwertować kontekstu wiersza na kontekst filtru.
Jest to więc szybka demonstracja interakcji kontekstu wiersza i kontekstu filtru w kodzie języka DAX.
Przejdźmy teraz do DAX Studio, aby zrozumieć, co dzieje się za kulisami.
Używanie DAX Studio do zrozumienia kontekstu wiersza i kontekstu filtru
Przejdźmy do narzędzi zewnętrznych i uruchommy DAX Studio. Musimy połączyć się z plikiem LuckyTemplates za pomocą Planu zapytań i Czasów serwera .
Następnie utworzę miarę zapytania. Napiszę OKREŚL MIARĘ w tabeli Daty, Suma bieżąca dat. A potem użyję oryginalnego kodu, który mieliśmy.
Ponieważ mamy zwrócić tabelę, możemy napisać EVALUATE. Na koniec utworzymy tabelę przy użyciu SUMMARIZECOLUMNS. Zamierzamy więc napisać Daty Numer roku kalendarzowego i wirtualną kolumnę, która będzie Sumą bieżącą. A potem mogę napisać coś takiego jak DT jako słowo kluczowe DAX Studio.
Jeśli wykonam ten kod, zobaczysz, że kod jest kompletny i nadal otrzymujemy ten sam wynik, który widzieliśmy w LuckyTemplates.
Przejdźmy teraz do planu zapytań, aby zrozumieć, co dzieje się za kulisami. Zobaczmy, czy funkcja MAX jest faktycznie zależna od kontekstu wiersza, czy nie. Przejdźmy do logicznego planu zapytań, ponieważ fizyczny plan zapytań jest ogólnie bardziej złożony i trochę trudny do odczytania.
Jak widać, pierwszym operatorem w pierwszym wierszu jest GroupSemiJoin , który jest używany przez SUMMARIZECOLUMNS do tworzenia wewnętrznego połączenia między dwiema kolumnami.
Następnie do łączenia tych kolumn służy Scan_Vertipaq , który jest silnikiem pamięci masowej, który mamy w usługach analitycznych. Widzimy, że mówi, że potrzebujemy kolumny, która jest Daty Numer roku kalendarzowego. W LuckyTemplates możesz zobaczyć, że na matrycy mamy tę kolumnę Numer roku kalendarzowego, która działa jako dostęp do naszego raportu.
Następnie mamy funkcję COUNTROWS w naszej mierze jako operatora najwyższego poziomu, a następnie COUNTROWS wywołuje funkcję FILTR dla filtra. Znowu jest Scan_Vertipaq , który mówi, że RequiredCols to Dates Calendar Year Number.
Linie 2 i 5 są takie same, ale pierwszy Scan_Vertipaq jest oznaczony zerem, a drugi z jedynką. Oznacza to, że kolumna, do której uzyskujemy dostęp za pomocą funkcji ALL, jest wyodrębniana oddzielnie od kolumny, którą mamy w funkcji SUMMARIZECOLUMNS.
Następnie istnieje operator LessThan . W następnym wierszu widzimy porównanie między kontekstem wiersza a funkcją MAX .
Następnie następuje Max_Vertipaq . Tak więc faktycznie pobieramy wartość Max z silnika pamięci masowej. Po prawej stronie widać, że jest napisane: DependOnCols Dates Calendar Year Number. To najważniejsza rzecz, o której musimy pamiętać. Wcześniej powiedziałem, że nie ma zależności funkcji MAX od kontekstu wiersza i to właśnie to potwierdza.
A więc tutaj jest napisane zero.
Gdzie znaleźliśmy zero?
Na górze (druga linia), która jest wyodrębniana dla SUMMARIZECOLUMNS. Oznacza to, że funkcja MAX nie zależy od kontekstu wiersza, ale w rzeczywistości zależy od kolumny (numeru roku kalendarzowego), którą mamy w tej tabeli. Tak więc ta tabela faktycznie tworzy kontekst filtra.
Krótko mówiąc, funkcja MAX jest zależna od kontekstu filtru, a nie od kontekstu wiersza.
Następnie możesz zobaczyć, że do obliczenia Max_Vertipaq mamy Scan_Vertipaq , który mówi, że DependOnCols zero (0) Date Calendar Year Number. A potem jest kilka innych kolumn, które wymagają kolumn.
Teraz spójrzmy na zmienną wersję kodu. Zamiast zwracać LastVisibleYear, zwrócę wersję COUNTROWS lub zmienną Result, a zobaczysz, że nadal otrzymujemy ten sam wynik.
Jeśli spojrzymy na Plan zapytań, widać, że jest nieco dłuższy, ale za to dużo łatwiejszy do odczytania.
Wreszcie, tutaj jest również obliczona wersja kodu
A tak wygląda jego logiczny plan zapytań.
DAX LuckyTemplates: Co to jest kontekst wiersza
Wprowadzenie do filtrowania kontekstu w usłudze LuckyTemplates
Co to jest przejście kontekstu i dlaczego ma to znaczenie?
Wniosek
W tym samouczku wyjaśniłem, w jaki sposób dana funkcja może wchodzić w interakcje i nie może wchodzić w interakcje z kontekstem wiersza. Pokazałem również, jak w tym przypadku MAX został oceniony w kontekście filtru, a nie w kontekście wiersza.
Należy zawsze pamiętać, że kontekst filtru filtruje cały model, a kontekst wiersza tylko iteruje daną tabelę i nigdy nie filtruje modelu. Kontekst filtru nie iteruje tabeli.
Mam nadzieję, że ten samouczek był dla Ciebie pomocny. Bądź na bieżąco z naszym kodem DAX Studio , który wkrótce udostępnimy. Zajrzymy znacznie głębiej w podobne scenariusze. Nauczymy Cię również, jak zoptymalizować swój kod DAX.
W tym samouczku omówimy pakiet dplyr, który umożliwia sortowanie, filtrowanie, dodawanie i zmianę nazw kolumn w języku R.
Odkryj różnorodne funkcje zbierania, które można wykorzystać w Power Automate. Zdobądź praktyczne informacje o funkcjach tablicowych i ich zastosowaniu.
Z tego samouczka dowiesz się, jak ocenić wydajność kodów DAX przy użyciu opcji Uruchom test porównawczy w DAX Studio.
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.