Omówienie języka DAX

Data Analysis Expressions (DAX) to język wyrażeń formuł używany w usługach Analysis Services, Power BI i Power Pivot w programie Excel. Formuły języka DAX obejmują funkcje, operatory i wartości do wykonywania zaawansowanych obliczeń i zapytań dotyczących danych w powiązanych tabelach i kolumnach w tabelarycznych modelach danych.

Ten artykuł zawiera tylko podstawowe wprowadzenie do najważniejszych pojęć w języku DAX. Opisuje on język DAX, ponieważ ma zastosowanie do wszystkich produktów, które go używają. Niektóre funkcje mogą nie mieć zastosowania do niektórych produktów lub przypadków użycia. Zapoznaj się z dokumentacją produktu opisującą jego konkretną implementację języka DAX.

Obliczenia

Formuły języka DAX są używane w miarach, kolumnach obliczeniowych, tabelach obliczeniowych i zabezpieczeniach na poziomie wiersza.

Miary

Miary to formuły obliczeń dynamicznych, w których wyniki zmieniają się w zależności od kontekstu. Miary są używane w raportowaniu, które obsługują łączenie i filtrowanie danych modelu przy użyciu wielu atrybutów, takich jak raport usługi Power BI lub tabela przestawna programu Excel lub wykres przestawny. Miary są tworzone przy użyciu paska formuły języka DAX w projektancie modelu.

Formuła w mierze może używać standardowych funkcji agregacji utworzonych automatycznie przy użyciu funkcji autosumowania, takiej jak COUNT lub SUM, lub można zdefiniować własną formułę przy użyciu paska formuły języka DAX. Nazwane miary można przekazać jako argument do innych miar.

Podczas definiowania formuły miary na pasku formuły funkcja etykietki narzędzia wyświetla podgląd wyników dla sumy w bieżącym kontekście, ale w przeciwnym razie wyniki nie są natychmiast wyjściowe w dowolnym miejscu. Przyczyną natychmiastowego wyświetlenia (filtrowanych) wyników obliczenia jest to, że nie można określić wyniku miary bez kontekstu. Aby ocenić miarę, wymagana jest aplikacja kliencka raportowania, która może dostarczyć kontekst potrzebny do pobrania danych odpowiednich dla każdej komórki, a następnie ocenić wyrażenie dla każdej komórki. Ten klient może być tabelą przestawną programu Excel lub wykres przestawny, raportem usługi Power BI lub wyrażeniem tabeli w zapytaniu języka DAX w programie SQL Server Management Studio (SSMS).

Niezależnie od klienta, dla każdej komórki w wynikach jest uruchamiane oddzielne zapytanie. Oznacza to, że każda kombinacja nagłówków wierszy i kolumn w tabeli przestawnej lub każdy wybór fragmentatorów i filtrów w raporcie usługi Power BI generuje inny podzbiór danych, nad którymi jest obliczana miara. Na przykład przy użyciu tej bardzo prostej formuły miary:

Total Sales = SUM([Sales Amount])

Gdy użytkownik umieszcza miarę TotalSales w raporcie, a następnie umieszcza kolumnę Product Category (Kategoria produktu) z tabeli Product (Produkt) do pozycji Filters (Filtry), suma wartości Sales Amount (Kwota sprzedaży) jest obliczana i wyświetlana dla każdej kategorii produktów.

W przeciwieństwie do kolumn obliczeniowych składnia miary zawiera nazwę miary poprzedzającą formułę. W podanym przykładzie nazwa Total Sales jest wyświetlana przed formułą. Po utworzeniu miary nazwa i jej definicja są wyświetlane na liście Pola aplikacji klienckiej raportowania, a w zależności od perspektyw i ról są dostępne dla wszystkich użytkowników modelu.

Aby dowiedzieć się więcej, zobacz:
Miary w programie Power BI Desktop
Miary w usługach Analysis Services
Miary w dodatku Power Pivot

Kolumny obliczeniowe

Kolumna obliczeniowa to kolumna dodana do istniejącej tabeli (w projektancie modelu), a następnie utworzenie formuły języka DAX definiującej wartości kolumny. Gdy kolumna obliczeniowa zawiera prawidłową formułę języka DAX, wartości są obliczane dla każdego wiersza natychmiast po wprowadzeniu formuły. Wartości są następnie przechowywane w modelu danych w pamięci. Na przykład w tabeli Date (Data) po wprowadzeniu formuły na pasku formuły:

= [Calendar Year] & " Q" & [Calendar Quarter]

Wartość dla każdego wiersza w tabeli jest obliczana przez pobranie wartości z kolumny Rok kalendarzowy (w tej samej tabeli Date), dodanie spacji i wielkiej litery Q, a następnie dodanie wartości z kolumny Calendar Quarter (w tej samej tabeli Date). Wynik dla każdego wiersza w kolumnie obliczeniowej jest obliczany natychmiast i pojawia się na przykład jako 2017 Q1. Wartości kolumn są ponownie obliczane tylko wtedy, gdy tabela lub jakakolwiek powiązana tabela jest przetwarzana (odświeżanie) lub model jest zwalniany z pamięci, a następnie ponownie ładowany, na przykład podczas zamykania i ponownego otwierania pliku programu Power BI Desktop.

Aby dowiedzieć się więcej, zobacz:
Kolumny obliczeniowe w programie Power BI Desktop
Kolumny obliczeniowe w usługach Analysis Services
Kolumny obliczeniowe w dodatku Power Pivot.

Tabele obliczeniowe

Tabela obliczeniowa jest obiektem obliczeniowym opartym na wyrażeniu formuły pochodzącym ze wszystkich lub części innych tabel w tym samym modelu. Zamiast wykonywać zapytania i ładować wartości do kolumn nowej tabeli ze źródła danych, formuła języka DAX definiuje wartości tabeli.

Tabele obliczeniowe mogą być przydatne w wymiarze odgrywającym rolę. Przykładem jest tabela Date (Data zamówienia), ShipDate (Data zamówienia), ShipDate (Data wysyłki) lub DueDate (Data ukończenia) w zależności od relacji klucza obcego. Tworząc jawnie tabelę obliczeniową ShipDate, uzyskasz autonomiczną tabelę dostępną dla zapytań, która jest w pełni sprawna, jak każda inna tabela. Tabele obliczeniowe są również przydatne podczas konfigurowania filtrowanego zestawu wierszy, podzestawu lub nadzbioru kolumn z innych istniejących tabel. Dzięki temu można zachować oryginalną tabelę bez zmian podczas tworzenia odmian tej tabeli w celu obsługi określonych scenariuszy.

Tabele obliczeniowe obsługują relacje z innymi tabelami. Kolumny w tabeli obliczeniowej mają typy danych, formatowanie i mogą należeć do kategorii danych. Tabele obliczeniowe mogą być nazwane i widoczne lub ukryte tak samo jak każda inna tabela. Tabele obliczeniowe są obliczane ponownie, jeśli którakolwiek z tabel, z których pobiera dane, są odświeżane lub aktualizowane.

Aby dowiedzieć się więcej, zobacz:
Tabele obliczeniowe w programie Power BI Desktop
Tabele obliczeniowe w usługach Analysis Services.

Zabezpieczenia na poziomie wiersza

W przypadku zabezpieczeń na poziomie wiersza formuła języka DAX musi mieć wartość logiczną TRUE/FALSE, definiując, które wiersze mogą być zwracane przez wyniki zapytania przez członków określonej roli. Na przykład dla członków roli Sales (Klienci) tabela Customers (Klienci) z następującą formułą języka DAX:

= Customers[Country] = "USA"

Członkowie roli Sprzedaż będą mogli wyświetlać dane tylko dla klientów w USA, a agregacje, takie jak SUM, są zwracane tylko dla klientów w USA. Zabezpieczenia na poziomie wiersza nie są dostępne w dodatku Power Pivot w programie Excel.

Podczas definiowania secuirty na poziomie wiersza przy użyciu formuły języka DAX tworzysz dozwolony zestaw wierszy. Nie blokuje to dostępu do innych wierszy; raczej nie są one po prostu zwracane w ramach dozwolonego zestawu wierszy. Inne role mogą zezwalać na dostęp do wierszy wykluczonych przez formułę języka DAX. Jeśli użytkownik jest członkiem innej roli, a zabezpieczenia na poziomie wiersza tej roli umożliwiają dostęp do tego określonego zestawu wierszy, użytkownik może wyświetlać dane dla tego wiersza.

Formuły zabezpieczeń na poziomie wiersza dotyczą określonych wierszy, a także powiązanych wierszy. Gdy tabela ma wiele relacji, filtry stosują zabezpieczenia dla relacji, która jest aktywna. Formuły zabezpieczeń na poziomie wiersza będą przecinane z innymi formułami zdefiniowanymi dla powiązanych tabel.

Aby dowiedzieć się więcej, zobacz:
Zabezpieczenia na poziomie wiersza w usłudze Power BI
Role w usługach Analysis Services

Zapytania

Zapytania języka DAX można tworzyć i uruchamiać w programie SQL Server Management Studio (SSMS) i narzędziach typu open source, takich jak DAX Studio (daxstudio.org). W przeciwieństwie do formuł obliczeń języka DAX, które można tworzyć tylko w modelach danych tabelarycznych, zapytania języka DAX mogą być również uruchamiane względem modeli wielowymiarowych usług Analysis Services. Zapytania języka DAX są często łatwiejsze do zapisu i bardziej wydajne niż zapytania wielowymiarowe wyrażeń danych (MDX).

Zapytanie języka DAX jest instrukcją podobną do instrukcji SELECT w języku T-SQL. Najbardziej podstawowym typem zapytania języka DAX jest instrukcja evaluate . Przykład:

EVALUATE
 ( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC

Zwraca w tabeli Wyniki tylko te produkty z Sejf tyStockLevel mniejsze niż 200, w kolejności rosnącej według EnglishProductName.

Miary można tworzyć w ramach zapytania. Miary istnieją tylko przez czas trwania zapytania. Aby dowiedzieć się więcej, zobacz Zapytania języka DAX.

Formuły

Formuły języka DAX są niezbędne do tworzenia obliczeń w kolumnach obliczeniowych i miarach oraz zabezpieczania danych przy użyciu zabezpieczeń na poziomie wiersza. Aby utworzyć formuły dla kolumn obliczeniowych i miar, użyj paska formuły u góry okna projektanta modelu lub edytora języka DAX. Aby utworzyć formuły na potrzeby zabezpieczeń na poziomie wiersza, użyj okna dialogowego Menedżer ról lub Zarządzanie rolami. Informacje w tej sekcji mają na celu rozpoczęcie pracy z podstawami formuł języka DAX.

Podstawy formuł

Formuły języka DAX mogą być bardzo proste lub dość złożone. W poniższej tabeli przedstawiono kilka przykładów prostych formuł, które mogą być używane w kolumnie obliczeniowej.

Wzór Definicja
= TODAY() Wstawia bieżącą datę w każdym wierszu kolumny obliczeniowej.
= 3 Wstawia wartość 3 w każdym wierszu kolumny obliczeniowej.
= [Column1] + [Column2] Dodaje wartości w tym samym wierszu [Column1] i [Column2] i umieszcza wyniki w kolumnie obliczeniowej tego samego wiersza.

Niezależnie od tego, czy tworzona formuła jest prosta, czy złożona, możesz użyć następujących kroków podczas tworzenia formuły:

  1. Każda formuła musi zaczynać się od znaku równości (=).

  2. Możesz wpisać lub wybrać nazwę funkcji albo wpisać wyrażenie.

  3. Zacznij wpisywać pierwsze kilka liter funkcji lub nazwy, a autouzupełnianie wyświetla listę dostępnych funkcji, tabel i kolumn. Naciśnij klawisz TAB, aby dodać element z listy Autouzupełnianie do formuły.

    Możesz również kliknąć przycisk Fx, aby wyświetlić listę dostępnych funkcji. Aby wybrać funkcję z listy rozwijanej, użyj klawiszy strzałek, aby wyróżnić element, a następnie kliknij przycisk OK , aby dodać funkcję do formuły.

  4. Podaj argumenty funkcji, wybierając je z listy rozwijanej możliwych tabel i kolumn lub wpisując wartości.

  5. Sprawdź błędy składni: upewnij się, że wszystkie nawiasy są zamknięte, a tabele i wartości są poprawnie przywoływanych.

  6. Naciśnij klawisz ENTER, aby zaakceptować formułę.

Uwaga

W kolumnie obliczeniowej, gdy tylko wprowadzisz formułę i zostanie zweryfikowana formuła, kolumna zostanie wypełniona wartościami. W miarie naciśnięcie klawisza ENTER powoduje zapisanie definicji miary z tabelą. Jeśli formuła jest nieprawidłowa, zostanie wyświetlony błąd.

W tym przykładzie przyjrzyjmy się formule w mierze o nazwie Days in Current Quarter (Dni w bieżącym kwartale):

Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))

Ta miara służy do tworzenia współczynnika porównania między niepełnym okresem a poprzednim okresem. Formuła musi uwzględniać proporcję okresu, który upłynął, i porównać ją z taką samą proporcją w poprzednim okresie. W tym przypadku [Dni bieżącego kwartału do daty]/[Dni w bieżącym kwartale] daje proporcję upłynięcia w bieżącym okresie.

Ta formuła zawiera następujące elementy:

Element formuły opis
Days in Current Quarter Nazwa miary.
= Znak równości (=) rozpoczyna formułę.
COUNTROWS COUNTROWS zlicza wiersze w tabeli Date
() Nawias otwarty i zamykający określa argumenty.
DATESBETWEEN Funkcja DATESBETWEEN zwraca daty między ostatnią datą dla każdej wartości w kolumnie Date w tabeli Date.
'Date' Określa tabelę Date (Data). Tabele są w pojedynczych cudzysłowach.
[Date] Określa kolumnę Date (Data) w tabeli Date (Data). Kolumny znajdują się w nawiasach kwadratowych.
,
STARTOFQUARTER Funkcja STARTOFQUARTER zwraca datę rozpoczęcia kwartału.
LASTDATE Funkcja LASTDATE zwraca ostatnią datę kwartału.
'Date' Określa tabelę Date (Data).
[Date] Określa kolumnę Date (Data) w tabeli Date (Data).
,
ENDOFQUARTER Funkcja ENDOFQUARTER
'Date' Określa tabelę Date (Data).
[Date] Określa kolumnę Date (Data) w tabeli Date (Data).

Używanie autouzupełniania formuły

Autouzupełnianie pomaga wprowadzić prawidłową składnię formuły, udostępniając opcje dla każdego elementu w formule.

  • Możesz użyć autouzupełniania formuły w środku istniejącej formuły z zagnieżdżonych funkcji. Tekst bezpośrednio przed punktem wstawiania jest używany do wyświetlania wartości na liście rozwijanej, a cały tekst po punkcie wstawiania pozostaje niezmieniony.

  • Autouzupełnianie nie dodaje nawiasu zamykającego funkcji ani automatycznie pasuje do nawiasów. Upewnij się, że każda funkcja jest poprawna składniowo lub nie można zapisać ani użyć formuły.

Używanie wielu funkcji w formule

Funkcje można zagnieżdżać, co oznacza, że wyniki z jednej funkcji są używane jako argument innej funkcji. W kolumnach obliczeniowych można zagnieżdżać maksymalnie 64 poziomy funkcji. Jednak zagnieżdżanie może utrudnić tworzenie formuł lub rozwiązywanie problemów. Wiele funkcji zaprojektowano tak, aby były używane wyłącznie jako funkcje zagnieżdżone. Te funkcje zwracają tabelę, której nie można zapisać bezpośrednio w wyniku; musi być podana jako dane wejściowe funkcji tabeli. Na przykład funkcje SUMX, AVERAGEX i MINX wymagają tabeli jako pierwszego argumentu.

Funkcje

Funkcja jest nazwaną formułą w wyrażeniu. Większość funkcji ma wymagane i opcjonalne argumenty, znane również jako parametry jako dane wejściowe. Po wykonaniu funkcji zwracana jest wartość. Język DAX zawiera funkcje, których można używać do wykonywania obliczeń przy użyciu dat i godzin, tworzenia wartości warunkowych, pracy z ciągami, wykonywania odnośników na podstawie relacji oraz możliwości iteracji w tabeli w celu wykonywania obliczeń cyklicznych. Jeśli znasz formuły programu Excel, wiele z tych funkcji będzie wyglądać bardzo podobnie; jednak formuły języka DAX różnią się w następujący ważny sposób:

  • Funkcja języka DAX zawsze odwołuje się do pełnej kolumny lub tabeli. Jeśli chcesz użyć tylko określonych wartości z tabeli lub kolumny, możesz dodać filtry do formuły.

  • Jeśli musisz dostosować obliczenia dla poszczególnych wierszy, język DAX udostępnia funkcje, które umożliwiają używanie bieżącej wartości wiersza lub powiązanej wartości jako rodzaju parametru do wykonywania obliczeń, które różnią się w zależności od kontekstu. Aby zrozumieć, jak działają te funkcje, zobacz Kontekst w tym artykule.

  • Język DAX zawiera wiele funkcji, które zwracają tabelę, a nie wartość. Tabela nie jest wyświetlana w kliencie raportowania, ale służy do udostępniania danych wejściowych innym funkcjom. Możesz na przykład pobrać tabelę, a następnie zliczyć w niej różne wartości lub obliczyć sumy dynamiczne między przefiltrowanych tabel lub kolumn.

  • Funkcje języka DAX obejmują różne funkcje analizy czasowej. Te funkcje umożliwiają definiowanie lub wybieranie zakresów dat oraz wykonywanie dynamicznych obliczeń na podstawie tych dat lub zakresów. Na przykład można porównać sumy w okresach równoległych.

Funkcje agregacji

Funkcje agregacji obliczają (skalarną) wartość, taką jak liczba, suma, średnia, minimum lub maksimum dla wszystkich wierszy w kolumnie lub tabeli zgodnie z definicją wyrażenia. Aby dowiedzieć się więcej, zobacz Funkcje agregacji.

Funkcje daty i godziny

Funkcje daty i godziny w języku DAX są podobne do funkcji daty i godziny w programie Microsoft Excel. Jednak funkcje języka DAX są oparte na typie danych data/godzina od 1 marca 1900 r. Aby dowiedzieć się więcej, zobacz Funkcje daty i godziny.

Funkcje filtrowania

Funkcje filtru w języku DAX zwracają określone typy danych, wyszukują wartości w powiązanych opowieściach i filtruj według powiązanych wartości. Funkcje wyszukiwania działają przy użyciu tabel i relacji, takich jak baza danych. Funkcje filtrowania umożliwiają manipulowanie kontekstem danych w celu tworzenia dynamicznych obliczeń. Aby dowiedzieć się więcej, zobacz Funkcje filtru.

Funkcje finansowe

Funkcje finansowe w języku DAX są używane w formułach, które wykonują obliczenia finansowe, takie jak wartość bieżąca netto i stopa zwrotu. Te funkcje są podobne do funkcji finansowych używanych w programie Microsoft Excel. Aby dowiedzieć się więcej, zobacz Funkcje finansowe.

Funkcje informacyjne

Funkcja informacyjna analizuje komórkę lub wiersz podany jako argument i informuje, czy wartość jest zgodna z oczekiwanym typem. Na przykład funkcja ISERROR zwraca wartość TRUE, jeśli wartość, do której odwołujesz się, zawiera błąd. Aby dowiedzieć się więcej, zobacz Funkcje informacyjne.

Funkcje logiczne

Funkcje logiczne działają na wyrażeniu, aby zwracać informacje o wartościach w wyrażeniu. Na przykład funkcja TRUE informuje, czy wyrażenie, które oceniasz, zwraca wartość TRUE. Aby dowiedzieć się więcej, zobacz Funkcje logiczne.

Funkcje matematyczne i trygonometryczne

Funkcje matematyczne w języku DAX są bardzo podobne do funkcji matematycznych i trygonometrycznych programu Excel. Niektóre drobne różnice istnieją w typach danych liczbowych używanych przez funkcje języka DAX. Aby dowiedzieć się więcej, zobacz Funkcje matematyczne i trygone.

Inne funkcje

Te funkcje wykonują unikatowe akcje, których nie można zdefiniować w żadnej z kategorii, do których należą większość innych funkcji. Aby dowiedzieć się więcej, zobacz Inne funkcje.

Funkcje relacji

Funkcje relacji w języku DAX umożliwiają zwracanie wartości z innej powiązanej tabeli, określanie określonej relacji do użycia w wyrażeniu i określanie kierunku filtrowania krzyżowego. Aby dowiedzieć się więcej, zobacz Funkcje relacji.

Funkcje statystyczne

Funkcje statystyczne obliczają wartości związane z rozkładami statystycznymi i prawdopodobieństwem, takimi jak odchylenie standardowe i liczba permutacji. Aby dowiedzieć się więcej, zobacz Funkcje statystyczne.

Funkcje tekstowe

Funkcje tekstowe w języku DAX są bardzo podobne do ich odpowiedników w programie Excel. Możesz zwrócić część ciągu, wyszukać tekst w ciągu lub połączyć wartości ciągu. Język DAX udostępnia również funkcje do kontrolowania formatów dat, godzin i liczb. Aby dowiedzieć się więcej, zobacz Funkcje tekstowe.

Funkcje analizy czasowej

Funkcje analizy czasowej udostępniane w języku DAX umożliwiają tworzenie obliczeń, które korzystają z wbudowanej wiedzy na temat kalendarzy i dat. Używając zakresów godzin i dat w połączeniu z agregacjami lub obliczeniami, można tworzyć znaczące porównania w porównywalnych okresach czasu sprzedaży, spisu itd. Aby dowiedzieć się więcej, zobacz Funkcje analizy czasowej (DAX).

Funkcje manipulowania tabelami

Te funkcje zwracają tabelę lub manipulują istniejącymi tabelami. Na przykład przy użyciu funkcji ADDCOLUMNS można dodać kolumny obliczeniowe do określonej tabeli lub zwrócić tabelę podsumowania dla zestawu grup z funkcją SUMMARIZECOLUMNS. Aby dowiedzieć się więcej, zobacz Funkcje manipulowania tabelami.

Zmienne

Zmienne w wyrażeniu można tworzyć przy użyciu funkcji VAR. Funkcja VAR nie jest funkcją, jest słowem kluczowym do przechowywania wyniku wyrażenia jako nazwanej zmiennej. Ta zmienna może następnie zostać przekazana jako argument do innych wyrażeń miary. Przykład:

VAR
    TotalQty = SUM ( Sales[Quantity] )

Return

    IF (
        TotalQty > 1000,
        TotalQty * 0.95,
        TotalQty * 1.25
        )

W tym przykładzie wartość TotalQty może być przekazywana jako nazwana zmienna do innych wyrażeń. Zmienne mogą być dowolnymi typami danych skalarnych, w tym tabelami. Używanie zmiennych w formułach języka DAX może być niezwykle zaawansowane.

Typy danych

Dane można zaimportować do modelu z wielu różnych źródeł danych, które mogą obsługiwać różne typy danych. Podczas importowania danych do modelu dane są konwertowane na jeden z typów danych modelu tabelarycznego. Gdy dane modelu są używane w obliczeniach, dane są następnie konwertowane na typ danych języka DAX na czas trwania i dane wyjściowe obliczeń. Podczas tworzenia formuły języka DAX terminy używane w formule automatycznie określają zwracany typ danych wartości.

Język DAX obsługuje następujące typy danych:

Typ danych w modelu Typ danych w języku DAX opis
Liczba całkowita 64-bitowa (osiem bajtów) liczba całkowita 1, 2 Liczby, które nie mają miejsc dziesiętnych. Liczby całkowite mogą być liczbami dodatnimi lub ujemnymi, ale muszą być liczbami całkowitymi z zakresu od -9 223 372 036 854 775 808 (-2^63) do 9 223 372 036 854 775 807 (2^63-1).
Liczba dziesiętna 64-bitowa liczba rzeczywista (osiem bajtów) 1, 2 Liczby rzeczywiste to liczby, które mogą mieć miejsca dziesiętne. Liczby rzeczywiste obejmują szeroki zakres wartości:

Wartości ujemne z -1,79E +308 do -2,23E -308

Zero

Wartości dodatnie od 2,23E -308 do 1,79E + 308

Jednak liczba cyfr znaczących jest ograniczona do 17 cyfr dziesiętnych.
Boolean Boolean Wartość Prawda lub Fałsz.
Tekst Ciąg Ciąg danych znaków Unicode. Może to być ciągi, liczby lub daty reprezentowane w formacie tekstowym.
Date Data/godzina Daty i godziny w zaakceptowanej reprezentacji daty i godziny.

Prawidłowe daty to wszystkie daty po 1 marca 1900 r.
Waluta Waluta Typ danych waluty umożliwia wartości z zakresu od -922 337 203 685 477,5808 do 922 337 203 685 477,5807 z czterema cyframi dziesiętnymi o stałej dokładności.
Nie dotyczy Blank Wartość pusta to typ danych w języku DAX reprezentujący i zastępujący wartości null SQL. Pustą wartość można utworzyć przy użyciu funkcji BLANK i przetestować pod kątem pustych wartości przy użyciu funkcji logicznej ISBLANK.

Modele danych tabelarycznych obejmują również typ danych tabeli jako dane wejściowe lub wyjściowe dla wielu funkcji języka DAX. Na przykład funkcja FILTER przyjmuje tabelę jako dane wejściowe i generuje inną tabelę zawierającą tylko wiersze spełniające warunki filtrowania. Łącząc funkcje tabeli z funkcjami agregacji, można wykonywać złożone obliczenia w dynamicznie zdefiniowanych zestawach danych.

Podczas gdy typy danych są zwykle ustawiane automatycznie, ważne jest, aby zrozumieć typy danych i sposób ich stosowania, w szczególności, do formuł języka DAX. Błędy w formułach lub nieoczekiwane wyniki są często spowodowane użyciem określonego operatora, który nie może być używany z typem danych określonym w argumencie. Na przykład formuła = 1 & 2zwraca wynik ciągu 12. Formuła zwraca = "1" + "2"jednak wynik liczby całkowitej 3.

Kontekst

Kontekst to ważna koncepcja do zrozumienia podczas tworzenia formuł języka DAX. Kontekst umożliwia przeprowadzanie analizy dynamicznej, ponieważ wyniki zmiany formuły odzwierciedlają bieżące zaznaczenie wiersza lub komórki, a także wszelkie powiązane dane. Zrozumienie kontekstu i efektywne używanie kontekstu ma kluczowe znaczenie dla tworzenia wysokiej wydajności, analiz dynamicznych i rozwiązywania problemów w formułach.

Formuły w modelach tabelarycznych można oceniać w innym kontekście, w zależności od innych elementów projektu:

  • Filtry zastosowane w tabeli przestawnej lub raporcie
  • Filtry zdefiniowane w formule
  • Relacje określone przy użyciu specjalnych funkcji w formule

Istnieją różne typy kontekstu: kontekst wiersza, kontekst zapytania i kontekst filtru.

Kontekst wiersza

Kontekst wiersza można traktować jako "bieżący wiersz". Jeśli tworzysz formułę w kolumnie obliczeniowej, kontekst wiersza dla tej formuły zawiera wartości ze wszystkich kolumn w bieżącym wierszu. Jeśli tabela jest powiązana z inną tabelą, zawartość zawiera również wszystkie wartości z innej tabeli, które są powiązane z bieżącym wierszem.

Załóżmy na przykład, że tworzysz kolumnę obliczeniową , = [Freight] + [Tax]która dodaje wartości z dwóch kolumn: Freight (Fracht) i Tax (Podatek) z tej samej tabeli. Ta formuła automatycznie pobiera tylko wartości z bieżącego wiersza w określonych kolumnach.

Kontekst wiersza jest również zgodny z relacjami zdefiniowanymi między tabelami, w tym relacjami zdefiniowanymi w kolumnie obliczeniowej przy użyciu formuł języka DAX, aby określić, które wiersze w powiązanych tabelach są skojarzone z bieżącym wierszem.

Na przykład poniższa formuła używa funkcji RELATED, aby pobrać wartość podatkową z powiązanej tabeli na podstawie regionu, do którego wysłano zamówienie. Wartość podatku jest określana przy użyciu wartości dla regionu w bieżącej tabeli, wyszukania regionu w powiązanej tabeli, a następnie pobrania stawki podatkowej dla tego regionu z powiązanej tabeli.

= [Freight] + RELATED('Region'[TaxRate])  

Ta formuła pobiera stawkę podatku dla bieżącego regionu z tabeli Region i dodaje ją do wartości kolumny Freight. W formułach języka DAX nie trzeba wiedzieć ani określać określonej relacji łączącej tabele.

Kontekst wielu wierszy

Język DAX zawiera funkcje iterujące obliczenia w tabeli. Te funkcje mogą mieć wiele bieżących wierszy, z których każdy ma własny kontekst wiersza. W istocie te funkcje umożliwiają tworzenie formuł, które wykonują operacje rekursywnie w wewnętrznej i zewnętrznej pętli.

Załóżmy na przykład, że model zawiera tabelę Products i tabelę Sales . Użytkownicy mogą chcieć przejść przez całą tabelę sprzedaży, która jest pełna transakcji obejmujących wiele produktów, i znaleźć największą ilość zamówioną dla każdego produktu w jednej transakcji.

Za pomocą języka DAX można utworzyć pojedynczą formułę, która zwraca poprawną wartość, a wyniki są automatycznie aktualizowane za każdym razem, gdy użytkownik doda dane do tabel.

= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])  

Aby zapoznać się ze szczegółowym przykładem tej formuły, zobacz EARLIER.

Podsumowując, funkcja EARLIER przechowuje kontekst wiersza z operacji, która poprzedza bieżącą operację. Przez cały czas funkcja przechowuje w pamięci dwa zestawy kontekstu: jeden zestaw kontekstu reprezentuje bieżący wiersz dla wewnętrznej pętli formuły, a drugi zestaw kontekstu reprezentuje bieżący wiersz dla zewnętrznej pętli formuły. Język DAX automatycznie karmi wartości między dwiema pętlami, dzięki czemu można tworzyć złożone agregacje.

Kontekst zapytania

Kontekst zapytania odwołuje się do podzbioru danych, który jest niejawnie pobierany dla formuły. Na przykład gdy użytkownik umieszcza miarę lub pole w raporcie, aparat sprawdza nagłówki wierszy i kolumn, fragmentatory i filtry raportu w celu określenia kontekstu. Następnie wymagane zapytania są uruchamiane względem danych modelu, aby uzyskać poprawny podzbiór danych, dokonać obliczeń zdefiniowanych przez formułę, a następnie wypełnić wartości w raporcie.

Ponieważ kontekst zmienia się w zależności od miejsca umieszczenia formuły, wyniki formuły mogą również ulec zmianie. Załóżmy na przykład, że tworzysz formułę, która sumuje wartości w kolumnie Profit tabeli Sales: = SUM('Sales'[Profit]). Jeśli używasz tej formuły w kolumnie obliczeniowej w tabeli Sales , wyniki dla formuły będą takie same dla całej tabeli, ponieważ kontekst zapytania dla formuły jest zawsze całym zestawem danych tabeli Sales . Wyniki będą miały zysk dla wszystkich regionów, wszystkich produktów, wszystkich lat itd.

Jednak użytkownicy zazwyczaj nie chcą widzieć tego samego wyniku setki razy, ale zamiast tego chcą uzyskać zysk dla określonego roku, konkretnego kraju, konkretnego produktu lub kombinacji tych, a następnie uzyskać sumę końcową.

W raporcie kontekst jest zmieniany przez filtrowanie, dodawanie lub usuwanie pól oraz używanie fragmentatorów. Dla każdej zmiany kontekst zapytania, w którym jest obliczana miara. W związku z tym ta sama formuła, używana w mierze, jest obliczana w innym kontekście zapytania dla każdej komórki.

Kontekst filtru

Kontekst filtru to zestaw wartości dozwolonych w każdej kolumnie lub wartości pobranych z powiązanej tabeli. Filtry można stosować do kolumny w projektancie lub w warstwie prezentacji (raporty i tabele przestawne). Filtry można również zdefiniować jawnie za pomocą wyrażeń filtru w formule.

Kontekst filtru jest dodawany podczas określania ograniczeń filtru dla zestawu wartości dozwolonych w kolumnie lub tabeli przy użyciu argumentów do formuły. Kontekst filtru jest stosowany na podstawie innych kontekstów, takich jak kontekst wiersza lub kontekst zapytania.

W modelach tabelarycznych istnieje wiele sposobów tworzenia kontekstu filtru. W kontekście klientów, którzy mogą korzystać z modelu, takiego jak raporty usługi Power BI, użytkownicy mogą tworzyć filtry na bieżąco, dodając fragmentatory lub filtry raportów w nagłówkach wierszy i kolumn. Możesz również określić wyrażenia filtru bezpośrednio w formule, aby określić powiązane wartości, filtrować tabele używane jako dane wejściowe lub dynamicznie pobierać kontekst wartości używanych w obliczeniach. Można również całkowicie wyczyścić lub selektywnie wyczyścić filtry dla określonych kolumn. Jest to bardzo przydatne podczas tworzenia formuł, które obliczają sumy końcowe.

Aby dowiedzieć się więcej na temat tworzenia filtrów w formułach, zobacz funkcja FILTER (DAX).
Aby zapoznać się z przykładem sposobu czyszczenia filtrów w celu utworzenia sum końcowych, zobacz ALL Function (DAX).

Aby zapoznać się z przykładami selektywnego czyszczenia i stosowania filtrów w formułach, zobacz ALLEXCEPT.

Określanie kontekstu w formułach

Podczas tworzenia formuły języka DAX formuła jest najpierw testowana pod kątem prawidłowej składni, a następnie testowana w celu upewnienia się, że nazwy kolumn i tabel zawartych w formule można znaleźć w bieżącym kontekście. Jeśli nie można odnaleźć żadnej kolumny lub tabeli określonej przez formułę, zwracany jest błąd.

Kontekst podczas walidacji (i operacje ponownego obliczania) jest określany zgodnie z opisem w poprzednich sekcjach, przy użyciu dostępnych tabel w modelu, wszelkich relacji między tabelami i wszelkich zastosowanych filtrów.

Jeśli na przykład zaimportowaliśmy dane do nowej tabeli i nie są powiązane z innymi tabelami (i nie zastosowano żadnych filtrów), bieżący kontekst jest całym zestawem kolumn w tabeli. Jeśli tabela jest połączona przez relacje z innymi tabelami, bieżący kontekst zawiera powiązane tabele. Jeśli dodasz kolumnę z tabeli do raportu zawierającego fragmentatory, a może niektóre filtry raportu, kontekst formuły jest podzbiorem danych w każdej komórce raportu.

Kontekst to zaawansowana koncepcja, która może również utrudnić rozwiązywanie problemów z formułami. Zalecamy rozpoczęcie od prostych formuł i relacji, aby zobaczyć, jak działa kontekst. W poniższej sekcji przedstawiono kilka przykładów użycia formuł w różnych typach kontekstu do dynamicznego zwracania wyników.

Operatory

Język DAX używa czterech różnych typów operatorów obliczeń w formułach:

  • Operatory porównania do porównywania wartości i zwracają wartość logiczną TRUE\FALSE.
  • Operatory arytmetyczne do wykonywania obliczeń arytmetycznych, które zwracają wartości liczbowe.
  • Operatory łączenia tekstu w celu sprzężenia dwóch lub większej liczby ciągów tekstowych.
  • Operatory logiczne, które łączą co najmniej dwa wyrażenia, aby zwrócić jeden wynik.

Aby uzyskać szczegółowe informacje o operatorach używanych w formułach języka DAX, zobacz Operatory języka DAX.

Praca z tabelami i kolumnami

Tabele w tabelarycznych modelach danych wyglądają jak tabele programu Excel, ale różnią się sposobem pracy z danymi i formułami:

  • Formuły działają tylko z tabelami i kolumnami, a nie z poszczególnymi komórkami, odwołaniami do zakresu lub tablicami.
  • Formuły mogą używać relacji do pobierania wartości z powiązanych tabel. Pobrane wartości są zawsze powiązane z bieżącą wartością wiersza.
  • Nie można mieć nieregularnych lub "poszarpanych" danych, takich jak w arkuszu programu Excel. Każdy wiersz w tabeli musi zawierać tę samą liczbę kolumn. Jednak w niektórych kolumnach można mieć puste wartości. Tabele danych programu Excel i tabele danych modelu tabelarycznego nie są wymienne.
  • Ponieważ typ danych jest ustawiany dla każdej kolumny, każda wartość w tej kolumnie musi być tego samego typu.

Odwoływania się do tabel i kolumn w formułach

Możesz odwołać się do dowolnej tabeli i kolumny przy użyciu jej nazwy. Na przykład poniższa formuła ilustruje sposób odwoływania się do kolumn z dwóch tabel przy użyciu w pełni kwalifikowanej nazwy:


= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])  

Gdy formuła jest obliczana, projektant modelu najpierw sprawdza składnię ogólną, a następnie sprawdza nazwy kolumn i tabel, które podajesz względem możliwych kolumn i tabel w bieżącym kontekście. Jeśli nazwa jest niejednoznaczna lub nie można odnaleźć kolumny lub tabeli, w formule zostanie wyświetlony błąd (ciąg #ERROR zamiast wartości danych w komórkach, w których występuje błąd). Aby dowiedzieć się więcej na temat wymagań dotyczących nazewnictwa tabel, kolumn i innych obiektów, zobacz Wymagania dotyczące nazewnictwa w składni języka DAX.

Relacje tabeli

Tworząc relacje między tabelami, zyskujesz możliwość użycia powiązanych wartości w innych tabelach w obliczeniach. Na przykład możesz użyć kolumny obliczeniowej, aby określić wszystkie rekordy wysyłki powiązane z bieżącym odsprzedawcą, a następnie zsumować koszty wysyłki dla każdego z nich. Jednak w wielu przypadkach relacja może nie być konieczna. Funkcja LOOKUPVALUE w formule umożliwia zwrócenie wartości w result_columnName dla wiersza spełniającego kryteria określone w argumentach search_column i search_value.

Wiele funkcji języka DAX wymaga istnienia relacji między tabelami lub między wieloma tabelami w celu zlokalizowania odwołanych kolumn i zwracania wyników, które mają sens. Inne funkcje będą próbować zidentyfikować relację; jednak w celu uzyskania najlepszych wyników zawsze należy utworzyć relację tam, gdzie to możliwe. Modele danych tabelarycznych obsługują wiele relacji między tabelami. Aby uniknąć nieporozumień lub nieprawidłowych wyników, tylko jedna relacja w danym momencie jest wyznaczona jako aktywna relacja, ale możesz zmienić aktywną relację w razie potrzeby, aby przejść przez różne połączenia w danych w obliczeniach. Funkcja USERELATIONSHIP może służyć do określania co najmniej jednej relacji, która ma być używana w określonym obliczeniu.

Podczas korzystania z relacji należy przestrzegać tych reguł projektowania formuł:

  • Gdy tabele są połączone przez relację, należy upewnić się, że dwie kolumny używane jako klucze mają zgodne wartości. Integralność referencyjna nie jest wymuszana, dlatego istnieje możliwość, że wartości nie pasują do pasujących w kolumnie klucza i nadal tworzą relację. W takim przypadku należy pamiętać, że puste wartości lub wartości niezgodne mogą mieć wpływ na wyniki formuł.

  • Łącząc tabele w modelu przy użyciu relacji, powiększasz zakres lub kontekst, w którym są oceniane formuły. Zmiany w kontekście wynikające z dodawania nowych tabel, nowych relacji lub zmian w aktywnej relacji mogą spowodować zmianę wyników w sposób, który może nie być przewidywany. Aby dowiedzieć się więcej, zobacz Kontekst w tym artykule.

Przetwarzanie i odświeżanie

Przetwarzanie i ponowne obliczanie to dwie oddzielne, ale powiązane operacje. Należy dokładnie zrozumieć te pojęcia podczas projektowania modelu zawierającego złożone formuły, duże ilości danych lub dane uzyskane z zewnętrznych źródeł danych.

Proces (odświeżanie) aktualizuje dane w modelu przy użyciu nowych danych z zewnętrznego źródła danych.

Ponowne obliczanie to proces aktualizowania wyników formuł w celu odzwierciedlenia wszelkich zmian w samych formułach i odzwierciedlenia zmian w danych bazowych. Ponowne obliczanie może mieć wpływ na wydajność w następujący sposób:

  • Wartości w kolumnie obliczeniowej są obliczane i przechowywane w modelu. Aby zaktualizować wartości w kolumnie obliczeniowej, należy przetworzyć model przy użyciu jednego z trzech poleceń przetwarzania — Przetwarzanie pełne, przetwarzanie danych lub ponowne obliczanie procesu. Wynik formuły musi być zawsze ponownie obliczany dla całej kolumny przy każdej zmianie formuły.

  • Wartości obliczane przez miary są obliczane dynamicznie za każdym razem, gdy użytkownik dodaje miarę do tabeli przestawnej lub otwiera raport; gdy użytkownik modyfikuje kontekst, wartości zwracane przez zmianę miary. Wyniki miary zawsze odzwierciedlają najnowsze informacje w pamięci podręcznej w pamięci.

Przetwarzanie i ponowne obliczanie nie ma wpływu na formuły zabezpieczeń na poziomie wiersza, chyba że wynik ponownego obliczania zwraca inną wartość, co sprawia, że wiersz jest możliwy do wykonywania zapytań lub nie jest możliwy do wykonywania zapytań przez członków roli.

Aktualizacje

Język DAX jest stale ulepszany. Nowe i zaktualizowane funkcje są wydawane przy użyciu następnej dostępnej aktualizacji, która jest zwykle miesięczna. Usługi są najpierw aktualizowane, a następnie instalowane aplikacje, takie jak Power BI Desktop, Excel, SQL Server Management Studio (SSMS) i rozszerzenie projektu usług Analysis Services dla programu Visual Studio (SSDT). Usługi SQL Server Analysis Services są aktualizowane przy użyciu następnej aktualizacji zbiorczej. Nowe funkcje są po raz pierwszy ogłaszane i opisane w dokumentacji funkcji języka DAX zbiegają się z aktualizacjami programu Power BI Desktop.

Nie wszystkie funkcje są obsługiwane we wcześniejszych wersjach usług SQL Server Analysis Services i Excel.

Rozwiązywanie problemów

Jeśli podczas definiowania formuły wystąpi błąd, formuła może zawierać błąd składniowy, błąd semantyczny lub błąd obliczenia.

Błędy składniowe są najłatwiejsze do rozwiązania. Zazwyczaj obejmują brak nawiasu lub przecinek.

Inny typ błędu występuje, gdy składnia jest poprawna, ale wartość lub kolumna, do których odwołuje się odwołanie, nie ma sensu w kontekście formuły. Takie błędy semantyczne i obliczeniowe mogą być spowodowane przez dowolne z następujących problemów:

  • Formuła odwołuje się do nieistnienej kolumny, tabeli lub funkcji.
  • Formuła wydaje się być poprawna, ale gdy aparat danych pobiera dane, znajduje niezgodność typu i zgłasza błąd.
  • Formuła przekazuje do funkcji niepoprawną liczbę lub typ argumentów.
  • Formuła odwołuje się do innej kolumny, która zawiera błąd, a zatem jej wartości są nieprawidłowe.
  • Formuła odwołuje się do kolumny, która nie została przetworzona, co oznacza, że zawiera metadane, ale nie ma rzeczywistych danych do użycia na potrzeby obliczeń.

W pierwszych czterech przypadkach język DAX flaguje całą kolumnę zawierającą nieprawidłową formułę. W ostatnim przypadku język DAX wyszara kolumnę, aby wskazać, że kolumna jest w stanie nieprzetworzonych.

Aplikacje i narzędzia

Power BI Desktop

Power BI Desktop

Power BI Desktop to bezpłatna aplikacja do modelowania i raportowania danych. Projektant modelu zawiera edytor języka DAX do tworzenia formuł obliczeń języka DAX.

Dodatek Power Pivot w programie Excel

Power Pivot in Excel

Projektant modeli dodatku Power Pivot w programie Excel zawiera edytor języka DAX do tworzenia formuł obliczeń języka DAX.

Visual Studio

Visual Studio

Program Visual Studio z rozszerzeniem projektów usług Analysis Services (VSIX) służy do tworzenia projektów modeli usług Analysis Services. Projektant modeli tabelarycznych zainstalowany z rozszerzeniem projektów zawiera edytor języka DAX.

SQL Server Management Studio

SQL Server Management Studio

SQL Server Management Studio (SSMS) to podstawowe narzędzie do pracy z usługami Analysis Services. Program SSMS zawiera edytor zapytań języka DAX do wykonywania zapytań zarówno w modelach tabelarycznych, jak i wielowymiarowych.

DAX Studio

DAX Studio icon

DAX Studio to narzędzie klienckie typu open source służące do tworzenia i uruchamiania zapytań języka DAX względem usług Analysis Services, programu Power BI Desktop i dodatku Power Pivot w modelach programu Excel.

Tabular Editor

Tabular Editor icon

Tabular Editor to narzędzie typu open source, które zapewnia intuicyjny, hierarchiczny widok każdego obiektu w metadanych modelu tabelarycznego. Edytor tabelaryczny zawiera edytor języka DAX z wyróżnianie składni, który zapewnia łatwy sposób edytowania miar, kolumn obliczeniowych i wyrażeń tabeli obliczeniowej.

Zasoby szkoleniowe

Podczas uczenia się języka DAX najlepiej używać aplikacji, której będziesz używać do tworzenia modeli danych. Usługi Analysis Services, program Power BI Desktop i dodatek Power Pivot w programie Excel zawierają artykuły i samouczki obejmujące lekcje dotyczące tworzenia miar, kolumn obliczeniowych i filtrów wierszy przy użyciu języka DAX. Oto kilka dodatkowych zasobów:

Filmy wideo

Użyj języka DAX w ścieżce szkoleniowej programu Power BI Desktop .

The Definitive Guide to DAX by Alberto Ferrari and Marco Russo (Microsoft Press). Teraz w drugiej edycji ten obszerny przewodnik zawiera podstawowe informacje na temat innowacyjnych technik wysokiej wydajności dla początkujących specjalistów ds. modelowania danych i specjalistów ds. analizy biznesowej.

The Definitive Guide to DAX book image

Społeczność

Język DAX ma żywą społeczność zawsze chętną do dzielenia się swoją wiedzą. Microsoft Społeczność usługi Power BI ma specjalne forum dyskusyjne przeznaczone tylko dla języka DAX, poleceń języka DAX i Wskazówki.