Składnia języka DAX

W tym artykule opisano składnię i wymagania języka wyrażeń formuł języka DAX.

Wymagania dotyczące składni

Formuła języka DAX zawsze zaczyna się od znaku równości (=). Po znaku równości można podać dowolne wyrażenie, które daje w wyniku wartość skalarną, lub wyrażenie, które można przekonwertować na skalarny. Należą do nich następujące funkcje:

  • Stała skalarna lub wyrażenie używające operatora skalarnego (+,-,*,/,>=,...,&...

  • Odwołania do kolumn lub tabel. Język DAX zawsze używa tabel i kolumn jako danych wejściowych do funkcji, nigdy nie tablicy ani dowolnego zestawu wartości.

  • Operatory, stałe i wartości podane jako część wyrażenia.

  • Wynik funkcji i jej wymaganych argumentów. Niektóre funkcje języka DAX zwracają tabelę zamiast skalarną i muszą być opakowane w funkcję, która oblicza tabelę i zwraca skalarną; chyba że tabela jest jedną kolumną, pojedynczą tabelą wierszy, a następnie jest traktowana jako wartość skalarna.

    Większość funkcji języka DAX wymaga co najmniej jednego argumentu, który może zawierać tabele, kolumny, wyrażenia i wartości. Jednak niektóre funkcje, takie jak pi, nie wymagają żadnych argumentów, ale zawsze wymagają nawiasów, aby wskazać argument null. Na przykład zawsze musisz wpisać pi(), a nie pi. Funkcje można również zagnieżdżać w innych funkcjach.

  • Wyrażenia. Wyrażenie może zawierać dowolne lub wszystkie następujące elementy: operatory, stałe lub odwołania do kolumn.

Na przykład wszystkie prawidłowe formuły są następujące.

Wzór Result
= 3 3
= "Sales" Sales
= 'Sales'[Amount] Jeśli używasz tej formuły w tabeli Sales, uzyskasz wartość kolumny Amount (Kwota) w tabeli Sales (Sprzedaż) dla bieżącego wiersza.
= (0,03 *[Ilość])

=0,03 * [Ilość]
Trzy procent wartości w kolumnie Amount bieżącej tabeli.

Chociaż ta formuła może służyć do obliczania wartości procentowej, wynik nie jest wyświetlany jako wartość procentowa, chyba że zastosujesz formatowanie w tabeli.
= PI() Wartość stałej pi.

Formuły mogą zachowywać się inaczej w zależności od sposobu ich użycia. Zawsze musisz pamiętać o kontekście i sposobie, w jaki dane używane w formule są powiązane z innymi danymi, które mogą być używane w obliczeniach.

Wymagania dotyczące nazewnictwa

Model danych często zawiera wiele tabel. Razem tabele i ich kolumny składają się z bazy danych przechowywanej w a engine analizy w pamięci (VertiPaq). W tej bazie danych wszystkie tabele muszą mieć unikatowe nazwy. Nazwy kolumn muszą być również unikatowe w każdej tabeli. Wszystkie nazwy obiektów są niewrażliwe na wielkość liter. Na przykład nazwy SALES i Sales będą reprezentować tę samą tabelę.

Każda kolumna i miara dodana do istniejącego modelu danych musi należeć do określonej tabeli. Należy określić tabelę zawierającą kolumnę niejawnie, podczas tworzenia kolumny obliczeniowej w tabeli lub jawnie podczas tworzenia miary i określania nazwy tabeli, w której ma być przechowywana definicja miary.

W przypadku używania tabeli lub kolumny jako danych wejściowych funkcji należy ogólnie zakwalifikować nazwę kolumny. W pełni kwalifikowana nazwa kolumny to nazwa tabeli, po której następuje nazwa kolumny w nawiasach kwadratowych: na przykład "Us Sales"[Products]. W pełni kwalifikowana nazwa jest zawsze wymagana, gdy odwołujesz się do kolumny w następujących kontekstach:

  • Jako argument funkcji, VALUES

  • Jako argument funkcji ALL lub ALLEXCEPT

  • W argumencie filtru dla funkcji CALCULATE lub CALCULATETABLE

  • Jako argument funkcji RELATEDTABLE

  • Jako argument funkcji analizy czasowej

Niekwalifikowana nazwa kolumny to tylko nazwa kolumny, ujęta w nawiasy: na przykład [Sales Amount]. Jeśli na przykład odwołujesz się do wartości skalarnej z tego samego wiersza bieżącej tabeli, możesz użyć niekwalifikowanej nazwy kolumny.

Jeśli nazwa tabeli zawiera spacje, zastrzeżone słowa kluczowe lub niedozwolone znaki, musisz ująć nazwę tabeli w pojedynczy cudzysłów. Nazwy tabel należy również ująć w cudzysłów, jeśli nazwa zawiera jakiekolwiek znaki poza zakresem znaków alfanumerycznych ANSI, niezależnie od tego, czy ustawienia regionalne obsługują zestaw znaków, czy nie. Jeśli na przykład otworzysz skoroszyt zawierający nazwy tabel zapisane w znakach cyrylica, takich jak "Таблица", nazwa tabeli musi być ujęta w znaki cudzysłowu, mimo że nie zawiera spacji.

Uwaga

Aby ułatwić wprowadzanie w pełni kwalifikowanych nazw kolumn, użyj funkcji Autouzupełnianie w edytorze formuł.

Tabele

  • Nazwy tabel są wymagane, gdy kolumna pochodzi z innej tabeli niż bieżąca tabela. Nazwy tabel muszą być unikatowe w bazie danych.

  • Nazwy tabel muszą być ujęte w znaki pojedynczego cudzysłowu, jeśli zawierają spacje, inne znaki specjalne lub znaki alfanumeryczne inne niż angielskie.

Miary

  • Nazwy miar muszą być zawsze w nawiasach kwadratowych.

  • Nazwy miar mogą zawierać spacje.

  • Każda nazwa miary musi być unikatowa w modelu. W związku z tym nazwa tabeli jest opcjonalna przed nazwą miary podczas odwoływania się do istniejącej miary. Jednak podczas tworzenia miary należy zawsze określić tabelę, w której będzie przechowywana definicja miary.

Kolumny

Nazwy kolumn muszą być unikatowe w kontekście tabeli; jednak wiele tabel może zawierać kolumny o tych samych nazwach (uściślanie pochodzi z nazwy tabeli).

Ogólnie rzecz biorąc, można odwoływać się do kolumn bez odwoływania się do tabeli podstawowej, do której należą, z wyjątkiem sytuacji, gdy może wystąpić konflikt nazw w celu rozwiązania lub niektórych funkcji, które wymagają, aby nazwy kolumn były w pełni kwalifikowane.

Zastrzeżone słowa kluczowe

Jeśli nazwa używana dla tabeli jest taka sama jak zastrzeżone słowo kluczowe usług Analysis Services, zostanie zgłoszony błąd i musisz zmienić nazwę tabeli. Można jednak użyć słów kluczowych w nazwach obiektów, jeśli nazwa obiektu jest ujęta w nawiasy (dla kolumn) lub cudzysłowów (dla tabel).

Uwaga

Znaki cudzysłowu mogą być reprezentowane przez kilka różnych znaków, w zależności od aplikacji. Jeśli wklejasz formuły z zewnętrznego dokumentu lub strony sieci Web, sprawdź kod ASCII znaku, który jest używany do otwierania i zamykania cudzysłowów, aby upewnić się, że są one takie same. W przeciwnym razie język DAX może nie rozpoznać symboli jako znaków cudzysłowu, co powoduje nieprawidłowe odwołanie.

Znaki specjalne

Następujące znaki i typy znaków nie są prawidłowe w nazwach tabel, kolumn lub miar:

  • Spacje wiodące lub końcowe; chyba że spacje są ujęte w ograniczniki nazw, nawiasy kwadratowe lub pojedyncze apostrofy.

  • Znaki sterujące

  • Następujące znaki, które nie są prawidłowe w nazwach obiektów:

    .,;':/\*|? &%$!+=()[]{}<>

Przykłady nazw obiektów

W poniższej tabeli przedstawiono przykłady niektórych nazw obiektów:

Typy obiektów Przykłady Komentarz
Nazwa tabeli Sales Jeśli nazwa tabeli nie zawiera spacji ani innych znaków specjalnych, nazwa nie musi być ujęta w znaki cudzysłowu.
Nazwa tabeli "Canada Sales" Jeśli nazwa zawiera spacje, karty lub inne znaki specjalne, należy ująć nazwę w znaki pojedynczego cudzysłowu.
W pełni kwalifikowana nazwa kolumny Sales[Amount] Nazwa tabeli poprzedza nazwę kolumny, a nazwa kolumny jest ujęta w nawiasy kwadratowe.
W pełni kwalifikowana nazwa miary Sales[Profit] Nazwa tabeli poprzedza nazwę miary, a nazwa miary jest ujęta w nawiasy kwadratowe. W niektórych kontekstach zawsze wymagana jest w pełni kwalifikowana nazwa.
Niekwalifikowana nazwa kolumny [Amount] Niekwalifikowana nazwa to tylko nazwa kolumny w nawiasach kwadratowych. Konteksty, w których można użyć niekwalifikowanej nazwy, obejmują formuły w kolumnie obliczeniowej w tej samej tabeli lub w funkcji agregacji, która skanuje w tej samej tabeli.
W pełni kwalifikowana kolumna w tabeli z spacjami 'Canada Sales'[Qty] Nazwa tabeli zawiera spacje, więc musi być otoczona pojedynczymi cudzysłowami.

Inne ograniczenia

Składnia wymagana dla każdej funkcji i typ operacji, która może wykonać, różni się znacznie w zależności od funkcji. Ogólnie jednak następujące reguły dotyczą wszystkich formuł i wyrażeń:

  • Formuły i wyrażenia języka DAX nie mogą modyfikować ani wstawiać pojedynczych wartości w tabelach.

  • Nie można utworzyć wierszy obliczeniowych przy użyciu języka DAX. Można tworzyć tylko kolumny obliczeniowe i miary.

  • Podczas definiowania kolumn obliczeniowych można zagnieżdżać funkcje na dowolnym poziomie.

  • Język DAX ma kilka funkcji, które zwracają tabelę. Zazwyczaj wartości zwracane przez te funkcje są używane jako dane wejściowe do innych funkcji, które wymagają tabeli jako danych wejściowych.

Operatory i stałe języka DAX

W poniższej tabeli wymieniono operatory obsługiwane przez język DAX. Aby uzyskać więcej informacji na temat składni poszczególnych operatorów, zobacz Operatory języka DAX.

Typ operatora Symbol i użycie
Operator nawiasu () kolejność pierwszeństwa i grupowanie argumentów
Operatory arytmetyczne + (dodawanie)

- (odejmowanie/

znak)

* (mnożenie)

/ (podział)

^ (wykładnik)
Operatory porównania = (równe)

> (większe niż)

< (mniejsze niż)

>= (większe lub równe)

<= (mniejsze niż lub równe)

<> (nie równa się)
Operator łączenia tekstu & (łączenie)
Operatory logiki && (i)

|| (lub)

Typy danych

Nie trzeba rzutować, konwertować ani określać w inny sposób typu danych kolumny lub wartości używanej w formule języka DAX. Gdy używasz danych w formule języka DAX, język DAX automatycznie identyfikuje typy danych w kolumnach, do których się odwołujesz, oraz wartości, w których wpiszesz, i wykonuje niejawne konwersje, jeśli jest to konieczne, aby ukończyć określoną operację.

Jeśli na przykład spróbujesz dodać liczbę do wartości daty, aparat zinterpretuje operację w kontekście funkcji i przekonwertuje liczby na wspólny typ danych, a następnie przedstawi wynik w zamierzonym formacie, datę.

Istnieją jednak pewne ograniczenia dotyczące wartości, które można pomyślnie przekonwertować. Jeśli wartość lub kolumna ma typ danych niezgodny z bieżącą operacją, język DAX zwraca błąd. Ponadto język DAX nie udostępnia funkcji, które umożliwiają jawną zmianę, konwertowanie lub rzutowanie typu danych istniejących danych zaimportowanych do modelu danych.

Ważne

Język DAX nie obsługuje użycia typu danych wariantu. W związku z tym podczas ładowania lub importowania danych do modelu danych oczekuje się, że dane w każdej kolumnie są zwykle spójne.

Niektóre funkcje zwracają wartości skalarne, w tym ciągi, podczas gdy inne funkcje działają z liczbami, zarówno liczbami całkowitymi, jak i liczbami rzeczywistymi, lub datami i godzinami. Typ danych wymagany dla każdej funkcji jest opisany w sekcji Funkcje języka DAX.

Tabele zawierające wiele kolumn i wiele wierszy danych można użyć jako argumentu funkcji. Niektóre funkcje zwracają również tabele, które są przechowywane w pamięci i mogą być używane jako argumenty do innych funkcji.

Data i godzina

Język DAX przechowuje wartości daty i godziny przy użyciu typu danych data/godzina używanego przez program Microsoft SQL Server. Format datetime używa liczby zmiennoprzecinkowych, w której wartości daty odpowiadają części całkowitej reprezentującej liczbę dni od 30 grudnia 1899 roku. Wartości czasu odpowiadają części dziesiętnej wartości daty, w której godziny, minuty i sekundy są reprezentowane przez ułamki dziesiętne dnia. Funkcje daty i godziny języka DAX niejawnie konwertują argumenty na typ danych daty/godziny.

Uwaga

Dokładna maksymalna wartość daty/godziny obsługiwana przez język DAX to 31 grudnia 9999 00:00:00.

Literał daty i godziny

Począwszy od wersji programu Power BI Desktop z sierpnia 2021 r., można określić wartości daty i godziny języka DAX jako literału w formacie dt"YYYY-MM-DD", dt"YYYY-MM-DDThh:mm:ss"lub dt"YYYY-MM-DD hh:mm:ss". W przypadku określenia jako literału użycie funkcji DATE, TIME, DATEVALUE, TIMEVALUE w wyrażeniu nie jest konieczne.

Na przykład następujące wyrażenie używa funkcji DATE i TIME do filtrowania według wartości OrderDate:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)

To samo wyrażenie filtru można określić jako literał:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)

Uwaga

Format literału typu data i data/godzina języka DAX nie jest obsługiwany we wszystkich wersjach programu Power BI Desktop, usług Analysis Services i dodatku Power Pivot w programie Excel. Nowe i zaktualizowane funkcje języka DAX są zwykle najpierw wprowadzane w programie Power BI Desktop, a następnie później zawarte w usługach Analysis Services i Power Pivot w programie Excel.