Введение в DAXIntroduction to DAX

Learn how to create and work with DAX, from an established expert.

Вы узнаете, как...

Введение в DAXIntroduction to DAX

Добро пожаловать в раздел интерактивного обучения Power BI, посвященный знакомству с выражениями DAX.Welcome to the Power BI Guided Learning section designed to introduce you to DAX.

DAX означает Data Analysis Expressions (выражения анализа данных) и представляет собой язык формул, который используется в Power BI (в том числе в алгоритмах, с которыми пользователи Power BI не сталкиваются).DAX stands for Data Analysis Expressions, and it is the formula language used throughout Power BI (it is also used by Power BI behind the scenes). Язык DAX также используется в других продуктах Майкрософт, таких как PowerPivot и табличные модели SSAS, однако в этом наборе разделов интерактивного обучения рассматриваются возможности использования DAX в Power BI.DAX is also found in other offerings from Microsoft, such as Power Pivot and SSAS Tabular, but this collection of Guided Learning topics focuses on how DAX is used - and can be used by you - in Power BI.

DAX и серия видеоматериалов интерактивного обученияDAX and this Guided Learning video series

Этот раздел интерактивного обучения посвящен основам и принципам работы с DAX: здесь рассматриваются концепции этого языка, принципы его работы, а также полезные функции в изложении (основанном на богатом опыте) известного специалиста по DAX — Альберто Феррари (Alberto Ferrari).The goal of this Guided Learning section is to teach you DAX basics and fundamentals - how to think about DAX, how it works, and the most useful features as explained (and learned with lots of experience) by a renowned DAX expert, Alberto Ferrari.

Портрет Альберто Феррари (Alberto Ferrari)

В видеороликах этого раздела интерактивного обучения DAX объясняются основы DAX с точки зрения принципов работы этого языка формул.The videos in this Guided Learning section on DAX teaches you DAX basics from the perspective of how the DAX formula language works. Эти материалы пригодятся вам для создания формул DAX с нуля, однако они также помогают понять, как система Power BI создает соответствующие формулы DAX, когда вы составляете запросы в редакторе запросов.This is useful when creating DAX formulas from scratch, but it's also very useful for understanding how Power BI creates those DAX formulas as you create queries in the Query Editor.

В этом видео: введение в DAXIn this video - introduction to DAX

Концепции DAX являются простыми и понятными, но при этом язык DAX очень функционален.DAX concepts are simple and straightforward, but DAX is powerful. В DAX используются некоторые уникальные концепции и шаблоны программирования, которые непросто полностью осознать и применить.DAX uses some unique programming concepts and patterns which can make it difficult to fully use and understand. Традиционные способы изучения языков программирования могут оказаться не лучшим подходом к DAX, поэтому цель этой главы — рассмотреть концепции и теории, которые помогут вам в дальнейшей работе с Power BI.Traditional ways of learning languages may not be the best approach to DAX, so the goal of this video is to teach you concepts and theory that will help later on in your Power BI work.

DAX — это функциональный язык, а это значит, что весь выполняемый код содержится внутри функции.DAX is a functional language, which means the full executed code is contained inside a function.

В DAX функции могут содержать в себе другие (вложенные) функции, условные операторы и ссылки на значения.In DAX, functions can contain other, nested functions, conditional statements, and value references. Выполнение кода в DAX начинается с корневой функции или параметра и далее работает наружу.Execution in DAX starts from the innermost function or parameter, and works outward. В Power BI формулы DAX записываются в одну строку, поэтому правильное форматирование функций важно для удобочитаемости.In Power BI, DAX formulas are written in a single line, so formatting your functions correctly is important for readability.

DAX предназначен для работы с таблицами, поэтому он содержит только два основных типа данных: Числовой и Прочее.DAX is designed to work with tables, so it has just two primary data types: Numeric and Other. Числовой тип может включать целые и десятичные числа, а также денежные единицы.Numeric can include integers, decimals, and currency. Тип Прочее может включать строки и двоичные объекты.Other can include strings and binary objects. Это означает, что если функция DAX создается для работы с одним типом чисел, то можно быть уверенным, что она будет работать с любыми другими числовыми данными.This means that if you build your DAX function to work on one type of number, you can be assured that it will work on any other Numeric data.

В DAX используется перегрузка операторов, а это означает, что в вычислениях можно смешивать типы данных, и результаты будут меняться в зависимости от типа данных, используемых в качестве входных данных.DAX uses operator overloading, which means that you can mix data types in your calculations and the results will change based on the type of data used in the inputs. Преобразование происходит автоматически.Conversion happens automatically. Это означает, что вам не требуется знать типы данных столбцов, с которыми вы работаете в Power BI. Это также значит, что иногда преобразование может произойти непредвиденных образом.This means you don't have to know the data types of the columns you're working with in Power BI, but it also means that sometimes conversion can happen in unexpected ways. Рекомендуется заранее выяснить, какие данные используются, чтобы быть уверенным, что операторы будут вести себя так, как ожидалось.It's good practice to understand the data you are using to ensure that your operators are behaving as anticipated.

В частности, есть один тип данных, с которым, скорее всего, вы будете часто работать в Power BI: это DateTime.There is one data type in particular that you'll likely be working with a lot in Power BI: DateTime. DateTime сохраняется как значение с плавающей запятой, состоящее из целой и десятичной частей.DateTime is stored as a floating point value with both integer and decimal parts. Тип данных DateTime можно использовать для точных вычислений любых периодов времени после 1 марта 1900 года.DateTime can be used accurately for calculations of any time period after March 1, 1900.

Видео от Альберто Феррари (Alberto Ferrari), SQLBIVideo content courtesy of Alberto Ferrari, SQLBI

Типы вычислений DAXDAX calculation types

DAX используется для создания вычисляемых объектов двух основных типов:There are two primary calculations you can create using DAX:

  • вычисляемые столбцы;calculated columns
  • вычисляемые меры.calculated measures

Прежде чем подробно рассматривать каждый из них, следует изучить синтаксис DAX для работы с таблицами и столбцами, который применяется и при создании вычисляемых столбцов и мер.Before digging into creating either of those, it's good to have a firm grasp on DAX syntax for tables and columns, which you will use when creating either calculated columns or calculated measures.

Синтаксис DAX для имен таблиц и столбцовDAX table and column name syntax

При создании столбца или меры необходимо знать общие принципы работы с именами таблиц в DAX.Whether you're creating a new column or measure, it's important to know the general format of table names in DAX:

'Table Name'[ColumnName]

Если имя таблицы содержит пробелы (как показано выше), оно должно быть заключено в одинарные кавычки.If there are spaces in the table name (as shown above), the single quotes around the table name are mandatory. Если имя таблицы не содержит пробелов, одинарные кавычки можно опустить, и в этом случае синтаксическая конструкция выглядит примерно так:If the table name has no spaces, the single quotes can be omitted, so the syntax looks like the following:

TableName[ColumnName]

На изображении ниже показана формула DAX в Power BI:The following image shows a DAX formula being created in Power BI:

Имя таблицы можно опустить и использовать только имя столбца, но делать так не рекомендуется, если вы хотите, чтобы ваши функции (и, соответственно, код DAX) были понятными.You can also omit the table name completely and just use the column name, but this is poor practice for writing clear functions (and thus, for clear DAX code). Имена столбцов должны всегда содержать квадратные скобки.Column names must always include the square brackets.

Рекомендуется всегда следовать перечисленным ниже правилам.It's best practice to always do the following:

  • Не использовать пробелов в именах таблиц.No spaces in table names
  • Всегда указывать имена таблиц в формулах (не опускайте их, даже если это разрешено синтаксисом DAX).Always include the table name in formulas (don't omit it, even though DAX lets you)

Создание вычисляемых столбцовCreating calculated columns

Вычисляемый столбец можно использовать, когда требуется сделать срез или отфильтровать данные по значению либо нужно выполнить вычисление для каждой строки в таблице.Calculated columns are useful when you want to slice or filter on the value, or if you want a calculation for every row in your table.

Для создания вычисляемых столбцов в Power BI Desktop используется команда Создать столбец на вкладке Моделирование tab. Это удобнее делать в представлении данных (а не в представлении отчета или связей), так как в нем вы увидите новый столбец, а в строку формул будет подставлено соответствующее имя.You can create calculated columns in Power BI Desktop by selecting New Column from the Modeling tab. It's best to be in Data view (rather than Report or Relationships view), since you can see the new column created and the Formula Bar is populated and ready for your DAX formula.

После нажатия кнопки Создать столбец в строку формул подставляются его базовое имя (которое можно изменить в соответствии с формулой) и оператор =, а новый столбец появляется в таблице данных, как показано на изображении ниже.Once you select the New Column button, the Formula Bar is populated with a basic column name (which you change to suit your formula, of course) and the = operator, and the new column appears in the data grid, as shown in the following image.

Обязательные элементы вычисляемого столбца:The required elements for a calculated column are the following:

  • имя нового столбца;a new column name
  • как минимум одна функция или выражение.at least one function or expression

Если в своей формуле вычисляемого столбца вы ссылаетесь на таблицу или столбец, указывать строку в таблице не нужно: Power BI выполняет расчет столбца для текущей строки в каждом вычислении.If you reference a table or column in your calculated column formula, you do not need to specify a row in the table - Power BI calculates the column for the current row for each calculation.

Создание вычисляемых мерCreating calculated measures

Вычисляемую меру следует использовать при расчете процентных долей или соотношений, а также если требуется выполнить сложные статистические вычисления.Use a calculated measure when you are calculating percentages or ratios, or you need complex aggregations. Чтобы создать меру с помощью формулы DAX, на вкладке Моделирование нажмите кнопку Создать меру. В этом случае также рекомендуется использовать представление данных Power BI Desktop, так как в нем отображается строка формул и можно легко составить формулу DAX.To create a measure using a DAX formula, select the New Measure button from the Modeling tab. Again, it's best to be in the Data view of Power BI Desktop since it shows the Formula Bar and makes it easy to write your DAX formula.

При создании меры в области полей рядом с ее именем появляется специальный значок.With measures, you see a new measure icon appear in the Fields pane with the name of the measure. В строку формул также подставляется имя формулы DAX (в данном случае — с мерой).The Formula Bar is again populated with the name of your DAX formula (this time, with your measure).

Обязательные элементы вычисляемой меры аналогичны обязательным элементам вычисляемого столбца:The required elements for a calculated measure are the same as they are for a calculated column:

  • имя новой меры;a new measure name
  • как минимум одна функция или выражение.at least one function or expression

Видео от Альберто Феррари (Alberto Ferrari), SQLBIVideo content courtesy of Alberto Ferrari, SQLBI

Функции DAXDAX functions

В DAX есть множество функций для форматирования и анализа данных.With DAX, there are many functions available to shape, form, or otherwise analyze your data. Их можно сгруппировать в несколько категорий.These functions can be grouped into a handful of categories:

  • Статистические функцииAggregation functions
  • Функции подсчетаCounting functions
  • Логические функцииLogical functions
  • Информационные функцииInformation functions
  • Текстовые функцииText functions
  • Функции для работы с датамиDate functions

Как и в Excel, когда вы начинаете ввод в строке формул Power BI Desktop, появляется список доступных функций, из которого вы можете выбрать подходящий вариант.Similar to Excel, when you start typing your formula into the Power BI Desktop Formula Bar, a list of available functions appears to help you determine which available function you want to select. С помощью клавиш со стрелками вверх и вниз на клавиатуре можно выделить любую функцию, и для нее появится короткое описание.And by using the up and down arrow keys on your keyboard, you can highlight any of the available functions, and a brief description is displayed.

Power BI выдает список функций, названия которых соответствуют введенным вами буквам. Например, если ввести S, в списке будут только функции, начинающиеся с буквы S.Power BI displays the functions that match the letters you've typed so far, so if you type S only functions that begin with S appear in the list. Если ввести Su, в списке отобразятся только функции, содержащие последовательность букв Su в своих названиях (при этом они не обязаны начинаться с букв Su).If you type Su, only functions that contain the letter sequence Su in their name appear in the list (they don't have to start with Su, they just have to contain that letter sequence).

Вы можете сами поэкспериментировать с функциями DAX и познакомиться с доступными в Power BI вариантами.It's easy to experiment with DAX in this way, and to find each of the various DAX functions that are available in Power BI. Достаточно просто начать ввод, и Power BI вам поможет.All you have to do is start typing, and Power BI helps you along.

Теперь, когда мы знаем, как приступить к созданию формулы DAX, рассмотрим каждую категорию.Now that we know how to get that DAX formula started, let's take a look at each of these function categories in turn.

Статистические функцииAggregation functions

В DAX есть некоторое количество статистических функций, в том числе перечисленные ниже распространенные функции.DAX has a number of aggregation functions, including the following commonly used functions:

  • SUMSUM
  • AVERAGEAVERAGE
  • MINMIN
  • MAXMAX
  • SUMX (и другие X-функции)SUMX (and other X functions)

Эти функции работают только c числовыми столбцами и, как правило, могут за раз обработать только один столбец.These functions work only on numeric columns, and generally can aggregate only one column at a time.

Однако специальные статистические функции, имена которых заканчивается на X, например SUMX, могут работать с несколькими столбцами одновременно.However, special aggregation functions that end in X, such as SUMX, can work on multiple columns. Они выполняют итерацию по таблице и вычисляют выражение для каждой строки.These functions iterate through the table, and evaluate the expression for each row.

Функции подсчетаCounting functions

В DAX есть перечисленные ниже часто используемые функции подсчета.Often-used counting functions in DAX include the following:

  • COUNTCOUNT
  • COUNTACOUNTA
  • COUNTBLANKCOUNTBLANK
  • COUNTROWSCOUNTROWS
  • DISTINCTCOUNTDISTINCTCOUNT

Они подсчитывают различные элементы, такие как уникальные значения, непустые значения и строки таблицы.These functions count different elements, such as distinct values, non-empty values, and table rows.

Логические функцииLogical functions

В число логических функций в DAX входят перечисленные ниже.The collection of logical functions in DAX include:

  • ANDAND
  • OROR
  • NOTNOT
  • IFIF
  • IFERRORIFERROR

Эти специальные функции также можно заменять операторами.These special functions can also be expressed with operators. Например, вместо AND в формуле DAX можно ввести &&.For example, AND can be typed as (replaced with) && in your DAX formula.

Операторы (такие как &&) можно использовать, когда в формуле нужно задать больше двух условий, однако в остальных случаях рекомендуется использовать полное имя функции (например, AND), чтобы код DAX был понятнее.You can use operators (such as &&) when you need more than two conditions in your formula, but otherwise, it's best practice use the function name itself (such as AND) for readability of your DAX code.

Информационные функцииInformation functions

В число информационных функций в DAX входят перечисленные ниже.Information functions in DAX include:

  • ISBLANKISBLANK
  • ISNUMBERISNUMBER
  • ISTEXTISTEXT
  • ISNONTEXTISNONTEXT
  • ISERRORISERROR

Они могут быть полезными в определенных ситуациях, однако рекомендуется знать, данные какого типа содержатся в столбцах, а не использовать эти функции для его определения.While these functions can be situationally useful, there is value in knowing the data type of your columns ahead of time, rather than depending on these functions to provide the data type.

DAX использует функции MAX и MIN как для статистической обработки значений, так и для их сравнения.DAX uses the MAX and MIN functions to both aggregate values, and to compare values.

Текстовые функцииText functions

К числу текстовых функций в DAX относятся перечисленные ниже.The text functions in DAX include the following:

  • CONCATENTATECONCATENTATE
  • REPLACEREPLACE
  • SEARCHSEARCH
  • UPPERUPPER
  • FIXEDFIXED

Эти текстовые функции работают почти так же, как и функции Excel под теми же названиями, поэтому если вы с ними уже знакомы, вам будет намного легче.These text work very similarly to the Excel functions that have the same name, so if you're familiar with how Excel handles text functions, you're already a step ahead. В противном случае вы можете поэкспериментировать с ними в Power BI, чтобы понять, для чего они нужны.If not, you can always experiment with these functions in Power BI, and learn more about how they behave.

Функции для работы с датамиDate functions

В DAX используются перечисленные ниже функции для работы с датами.DAX includes the following Date functions:

  • DATEDATE
  • HOURHOUR
  • NOWNOW
  • EOMONTHEOMONTH
  • WEEKDAYWEEKDAY

Несмотря на то что эти функции полезны для вычисления и извлечения информации из значений дат, они не используются в алгоритмах операций со временем, которые работают на основе таблицы дат.While these functions are useful to calculate and extract information from date values, they do not apply to time intelligence, which uses a date table.

Видео от Альберто Феррари (Alberto Ferrari), SQLBIVideo content courtesy of Alberto Ferrari, SQLBI

Использование переменных в выражениях DAXUsing variables in DAX expressions

Использование переменных — исключительно полезная возможность, связанная с выражениями DAX.Using variables are an extremely powerful part of a DAX expression.

Вы можете определить переменную в любом месте выражения DAX, используя следующий синтаксис:You can define a variable anywhere in a DAX expression, using the following syntax:

VARNAME = RETURNEDVALUE

Переменные могут быть любого типа данных, включая таблицы.Variables can be any data type, including entire tables.

Помните, что каждый раз, когда вы ссылаетесь на переменную в выражении DAX, Power BI приходится повторно вычислять ее значение в соответствии с определением.Keep in mind that each time you reference a variable in your DAX expression, Power BI must recalculate its value according to your definition. По этой причине рекомендуется не повторять переменные в функции.For this reason, it's good practice to avoid repeating variables in your function.

Видео от Альберто Феррари (Alberto Ferrari), SQLBIVideo content courtesy of Alberto Ferrari, SQLBI

Связи между таблицами и DAXTable relationships and DAX

В Power BI можно создавать связи между различными таблицами, в том числе из совершенно разных источников данных.Power BI lets you create relationships among multiple tables, including tables that come from completely different data sources. Посмотреть связи для любой модели данных можно в представлении Связи в приложении Power BI Desktop.You can see those relationships for any data model in the Relationships view of Power BI Desktop.

Реляционные функции DAXDAX relational functions

Язык DAX поддерживает реляционные функции, которые позволяют взаимодействовать с таблицами, имеющими установленные связи.DAX has relational functions that enable you to interact with tables that have established relationships.

С помощью этих функций можно получить значение столбца или все строки из определенной связи.You can return the value of a column, or you can return all rows in a relationship using DAX functions.

Например, функция TABLE анализирует связи и возвращает значение столбца, а функция RELATEDTABLE — всю таблицу, отфильтрованную по связанным строкам.For example, the TABLE function follows relationships and returns the value of a column, while RELATEDTABLE follows relationships, and returns an entire table that is filtered to include only related rows.

Функция RELATED работает для связей многие к одному, а RELATEDTABLE — для связей один ко многим.The RELATED function works on many-to-one relationships, while RELATEDTABLE is for one-to-many relationships.

Реляционные функции можно использовать для создания выражений, содержащих значения из нескольких таблиц.You can use relational functions to build expressions that include values across multiple tables. DAX возвращает результат работы этих функций независимо от длины цепочки связей.DAX will return a result with these functions, regardless of the length of the chain of the relationship.

Видео от Альберто Феррари (Alberto Ferrari), SQLBIVideo content courtesy of Alberto Ferrari, SQLBI

Таблицы DAX и фильтрацияDAX tables and filtering

Важное отличие DAX от языка формул Excel заключается в том, в DAX можно передавать из одного выражения в другое целые таблицы, а не отдельные значения.One significant difference between DAX and the Excel formula language is that DAX allows you to pass entire tables between expressions, rather than being constrained to a single value. Благодаря этому в DAX вы можете фильтровать таблицы в выражениях и продолжать работу с отфильтрованными наборами значений.One powerful effect is that DAX allows you to filter tables in its expressions, then work with the filtered set of values.

DAX позволяет создавать абсолютно новые вычисляемые таблицы и работать с ними так же, как с обычными, в том числе задавать связи между вычисляемыми и другими таблицами в модели данных.With DAX, you can create entirely new calculated tables and then treat them like any other table - including creating relationships between them and other tables in your data model.

Табличные функции DAXDAX table functions

В DAX есть широкий набор табличных функций, включая перечисленные ниже.DAX has a rich set of table functions, including the following:

  • FILTERFILTER
  • ALLALL
  • VALUESVALUES
  • DISTINCTDISTINCT
  • RELATEDTABLERELATEDTABLE

Эти функции возвращают целую таблицу, а не значение.These functions return a full table rather, rather than a value. Результаты табличной функции обычно используются для последующего анализа в составе большего выражения, а не в качестве окончательного значения.Typically you'll use the results of a table function in further analysis as part of a greater expression, rather than using that returned table a final value. Важно помнить, что при использовании табличной функции результаты наследуют связи столбцов таблицы.It's important to note that When you use a table function, the results inherit the relationships of their columns.

В выражении можно комбинировать табличные функции, так как каждая из них использует таблицу и возвращает таблицу.You can mix table functions in your expression, as long as each function uses a table and returns a table. Например, рассмотрим следующее выражение DAX:For example, consider the following DAX expression:

FILTER (ALL (Table), Condition)

Оно применяет фильтр ко всей таблице Table, игнорируя содержимое текущего фильтра.That expression would put a filter over the entirety of Table, ignoring any current filter content.

Функция DISTINCT возвращает уникальные значения столбца, которые также видны в текущем контексте.The DISTINCT function returns the distinct values of a column that are also visible in the current context. Поэтому в приведенном выше примере выражения DAX функция ALL предписывает игнорировать фильтры, а если заменить ALL функцией DISTINCT, то фильтры соблюдаются.So touse the above DAX expression example, using ALL in that expression ignores filters, while replacing ALL with DISTINCT would observe them.

Подсчет значений средствами DAXCounting values with DAX

Создателям отчетов Power BI часто приходится отвечать на стандартный вопрос:One common question that Power BI report builders want to answer is the following:

  • "Сколько значений в этом столбце?"How many values do I have for this column?

На него легко ответить, если таблица находится прямо перед глазами, но DAX использует иной подход, особенно если между таблицами существует связь.That may be a simple question to answer with a table displayed in front of you, but DAX approaches in a different way in a different way, particularly when there's a relationship between tables.

Например, Power BI и DAX учитывают значения, для которых нет оптимального перекрестного индекса.For example, Power BI and DAX includes values that are not properly cross-indexed. Если входящая связь нарушена, DAX добавляет в связанную таблицу новую строку, которая содержит пробелы в каждом поле, и связывает ее с неиндексированной строкой, чтобы обеспечить целостность данных.If the incoming relationship is broken, DAX adds a new row to the related table that has blanks in every field, and links that new row to the unindexed row to guarantee referential integrity. Если функция охватывает пустые строки (например, так часто бывает при использовании функции ALL), все они будут учтены при подсчете количества значений в этом столбце.If your function includes blank rows, such as is often the case when using ALL, those blank rows will then be included in the number of values returned for that column.

С помощью функций DAX можно также создать полностью вычисляемые таблицы.You can also create entire calculated tables using DAX functions. Для вычисляемых таблиц, созданных с помощью DAX, необходимы ИМЯ и ТАБЛИЧНАЯ функция.Calculated tables created using DAX require a NAME and a TABLE function. Вычисляемые таблицы можно использовать как и любую другую таблицу, включая создание связей.Calculated tables can be used like any other table, including establishing relationships.

Видео от Альберто Феррари (Alberto Ferrari), SQLBIVideo content courtesy of Alberto Ferrari, SQLBI

Поздравляем!

You've completed the Introduction to DAX section of Power BI Guided Learning. What a journey! If you've done these tutorials in sequence, then you've finished all the sections of Guided Learning. Way to go! Now go use Power BI to create compelling reports and dashboards that tell your story.

Вы узнали, как...

Соавторы

  • Davidiseminger
  • olprod
  • Alisha-Acharya