Udostępnij za pośrednictwem


DAX syntax

This article describes syntax and requirements for the DAX formula expression language.

Wymagania dotyczące składni

A DAX formula always starts with an equal sign (=). 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 skalar. Należą do nich następujące elementy:

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

  • References to columns or tables. The DAX language always uses tables and columns as inputs to functions, never an array or arbitrary set of values.

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

  • The result of a function and its required arguments. Some DAX functions return a table instead of a scalar, and must be wrapped in a function that evaluates the table and returns a scalar; unless the table is a single column, single row table, then it is treated as a scalar value.

    Most DAX functions require one or more arguments, which can include tables, columns, expressions, and values. However, some functions, such as PI, do not require any arguments, but always require parentheses to indicate the null argument. For example, you must always type PI(), not PI. You can also nest functions within other functions.

  • Expressions. 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.

Formuła Wynik
= 3 3
= "Sales" Sprzedaż
= 'Sales'[Amount] Jeśli używasz tej formuły w tabeli Sprzedaż, uzyskasz wartość kolumny Kwota w tabeli Sprzedaż dla bieżącego wiersza.
= (0.03 *[Amount])

=0.03 * [Amount]
Three percent of the value in the Amount column of the current table.

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ę na bazę danych przechowywaną w silniku analitycznym 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. All object names are case-insensitive; for example, the names SALES and Sales would represent the same table.

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.

When you use a table or column as an input to a function, you must generally qualify the column name. The fully qualified name of a column is the table name, followed by the column name in square brackets: for examples, 'U.S. Sales'[Products]. W pełni kwalifikowana nazwa jest zawsze wymagana, gdy odwołujesz się do kolumny w następujących kontekstach:

  • As an argument to the function, VALUES

  • As an argument to the functions, ALL or ALLEXCEPT

  • W parametrze filtra dla funkcji CALCULATE lub CALCULATETABLE

  • As an argument to the function, RELATEDTABLE

  • As an argument to any time intelligence function

An unqualified column name is just the name of the column, enclosed in brackets: for example, [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.

Notatka

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.

Środki

  • Nazwy miar muszą być zawsze w nawiasach.

  • 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).

Notatka

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 DAX może nie być w stanie rozpoznać symboli jako cudzysłowów, co sprawia, że odwołanie jest nieprawidłowe.

Special characters

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

  • Leading or trailing spaces; unless the spaces are enclosed by name delimiters, brackets, or single apostrophes.

  • 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 Sprzedaż Jeśli nazwa tabeli nie zawiera spacji ani innych znaków specjalnych, nazwa nie musi być ujęta w znaki cudzysłowu.
Nazwa tabeli "Sprzedaż w Kanadzie" If the name contains spaces, tabs or other special characters, enclose the name in single quotation marks.
W pełni kwalifikowana nazwa kolumny Sprzedaż[Kwota] The table name precedes the column name, and the column name is enclosed in brackets.
Fully qualified measure name Sprzedaż[Zysk] The table name precedes the measure name, and the measure name is enclosed in brackets. W niektórych kontekstach zawsze wymagana jest w pełni kwalifikowana nazwa.
Niekwalifikowana nazwa kolumny [Amount] The unqualified name is just the column name, in brackets. 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 tę samą tabelę.
Fully qualified column in table with spaces "Sprzedaż w Kanadzie" [Ilość] 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ń:

  • DAX formulas and expressions cannot modify or insert individual values in tables.

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

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

  • 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.

DAX operators and constants

W poniższej tabeli wymieniono operatory obsługiwane przez DAX. For more information about the syntax of individual operators, see DAX operators.

Typ operatora Symbol i użycie
Operator nawiasów () kolejności pierwszeństwa i grupowania argumentów
Operatory arytmetyczne + (addition)

- (subtraction)

* (mnożenie)

/ (division)

^ (exponentiation)
Operatory porównania = (equal to)

> (greater than)

< (less than)

>= (większe lub równe)

<= (mniejsze lub równe)

<> (nie równa się)
Operator łączenia tekstu & (concatenation)
Operatory logiczne && (and)

|| (or)

typy danych

You do not need to cast, convert, or otherwise specify the data type of a column or value that you use in a DAX formula. When you use data in a DAX formula, DAX automatically identifies the data types in referenced columns and of the values that you type in, and performs implicit conversions where necessary to complete the specified operation.

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ć. If a value or a column has a data type that is incompatible with the current operation, DAX returns an error. Also, DAX does not provide functions that let you explicitly change, convert, or cast the data type of existing data that you have imported into a data model.

Ważny

DAX does not support use of the variant data type. 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 DAX funkcje.

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

DAX stores date and time values using the datetime data type used by 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. DAX date and time functions implicitly convert arguments to datetime data type.

Notatka

The exact maximum DateTime value supported by DAX is December 31, 9999 00:00:00.

Date and time literal

Beginning with the August 2021 version of Power BI Desktop, DAX date and datetime values can be specified as a literal in the format dt"YYYY-MM-DD", dt"YYYY-MM-DDThh:mm:ss", or dt"YYYY-MM-DD hh:mm:ss". When specified as a literal, use of DATE, TIME, DATEVALUE, TIMEVALUE functions in the expression are not necessary.

For example, the following expression uses DATE and TIME functions to filter on OrderDate:

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

The same filter expression can be specified as a literal:

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

Notatka

The DAX date and datetime-typed literal format is not supported in all versions of Power BI Desktop, Analysis Services, and Power Pivot in Excel. New and updated DAX functionality are typically first introduced in Power BI Desktop and then later included in Analysis Services and Power Pivot in Excel.