Примеры вычислений полей—ArcMap | Документация
- Простые вычисления
- Встроенные функции Python
- Использование блоков кода
- Примеры кода – math
- Вычисления в полях с использованием логики Python
- Вычисления в полях с использованием логики VBScript
- Примеры кода – геометрия
- Информация о единицах измерения геометрии
- Примеры кода – даты
- Примеры кода – текст
- Накопительные и последовательные вычисления
- Случайные значения
- Вычисление нулевых значений
Ввод значений с клавиатуры – не единственный способ редактирования таблиц. В некоторых случаях вам может потребоваться выполнить математические вычисления для получения значения поля отдельной записи или даже всех записей. Можно выполнять как простые, так и сложные вычисления над всеми либо только выбранными записями. Кроме того, в полях атрибутивных таблиц можно вычислить длину, периметр и прочие геометрические свойства.
Python – это рекомендованный язык скриптов для ArcGIS. Используйте Python, если вы хотите получить доступ к функциональным возможностям геообработки, включая геометрию объектов. Введение Python в качестве языка для написания скриптов в ArcGIS предоставляет немало возможностей для выполнения вычислений.
Используйте VBScript, если у вас есть опыт работы с VBA или VBScript и вам удобнее работать с языком скриптов. Сохраненные файлы .cal из предыдущих версий ArcGIS можно использовать сразу, либо после внесения минимальных изменений. Если у вас есть код VBA из предыдущих версий, использовавший ArcObjects, необходимо изменить его.
Примечание:
- Python требует структурированное расположение текста в синтаксисе. Для определения каждого логического уровня используются от двух до четырех пробелов. Приводите в соответствие начало и конец каждого блока, и будьте последовательны.
- Поля выражений вычислений Python заключаются в восклицательные знаки (!!).
- При наименовании переменных следует помнить, что Python чувствителен к регистру, поэтому имя value не равнозначно имени Value.
- VBScript не позволяет в явном виде задавать тип данных; все переменные имеют неявный тип данных Variant. Выражения наподобие Dim x as String надо удалить или упростить до Dim x.
- Введя выражение, можно щелкнуть Сохранить, если вы хотите записать его в файл. Щелкните Загрузить, чтобы найти и выбрать имеющийся файл с выражением для вычисления.
Простые вычисления
Примеры простых строчек
Строки поддерживаются несколькими строковыми функциями Python, в том числе capitalize, rstrip и replace.
Сделать заглавной первую букву текста в поле CITY_NAME.
!CITY_NAME!.capitalize()
Убрать все пробелы на концах строчек в поле CITY_NAME.
!CITY_NAME!.rstrip()
Заменить все вхождения “california” на “California” в поле STATE_NAME.
!STATE_NAME!.replace("california", "California")
Доступ к символам в текстовом поле осуществляется путем индексации и разделения в Python. Индексация возвращает символы в индексном местоположении; разделение – группу символов. В следующей таблице примите !fieldname! как строковое поле со значением “abcde”.
Пример: | Объяснение | Результат |
---|---|---|
!fieldname![0] | Первый символ. | “a” |
!fieldname![-2] | Второй символ с конца. | “d” |
!fieldname![1:4] | Второй, третий и четвертый символы. | “bcd” |
Python также поддерживает форматирование строк с использованием метода str.format().
Скомбинировать поля FieldA и FieldB через двоеточие.
"{}:{}".format(!FieldA!, !FieldB!)
Строковые функции VBScript
Строки поддерживаются несколькими строковыми функциями VBScript, в том числе Left, InStr и Chr. Ниже приведено несколько примеров VBScript для часто используемых в Калькуляторе поля строковых функций.
Функция Left: возвращает строку, содержащую указанное количество символов из левой части исходной строки.
MyStr = Left([MyField], 1)
Функция Right: возвращает строку, содержащую указанное количество символов из правой части исходной строки.
MyStr = Right([MyField], 1)
Функция Mid: возвращает строку, содержащую указанное количество символов из исходной строки.
MyString = "Mid Function Demo" 'Create text string FirstWord = Mid(MyString, 1, 3) ' Returns "Mid" LastWord = Mid(MyString, 14, 4) 'Returns "Demo" MidWords = Mid(MyString, 5) 'Returns "Function Demo"
Функция InStr: возвращает длинное целое число, указывающее местоположение первого вхождения одной строкой в пределах другой.
MyPosition = InStr([address], " ")
Функция Replace: возвращает строку, в которой указанная подстрока заменена другой подстрокой указанное количество раз.
NewString = Replace([comments], "#", "!")
Функция Chr: возвращает строку, содержащую символ, связанный с указанным кодом символа.
' Replace a carriage return character with an exclamation NewString = Replace([comments], chr(13), "!")
Оператор &: используется для конкатенации двух строк в одном выражении.
MyStr = [MyField1] & " " & [MyField2]
Простые математические примеры
Python предоставляет инструменты для обработки чисел. Python также поддерживает ряд числовых и математических функций, в том числе math, cmath, decimal, random, itertools, functools и operator.
Оператор | Объяснение | Пример: | Результат |
---|---|---|---|
x + y | x плюс y | 1,5 + 2,5 | 4.0 |
x – y | x минус y | 3,3 – 2,2 | 1. 1 |
x * y | 2,0 * 2,2 | 4.4 | |
x / y | x разделить на y | 4,0 / 1,25 | 3.2 |
x // y | x разделить на y (с округлением) | 4,0 / 1,25 | 3. 0 |
x % y | x по модулю y | 8 % 3 | 2 |
-x | отрицательное выражение от x | x = 5 -x | -5 |
+x | x остается без изменений | x = 5 +x | 5 |
x ** y | x возвести в степень y | 2 ** 3 | 8 |
Умножение
!Rank! * 2
Вычислить объем сферы по заданному полю с радиусами.
4 / 3 * math.pi * !Radius! ** 3
При вычислении поля с помощью выражения Python, действуют математические правила Python. Например, деление двух целочисленных значений всегда дает целочисленный результат (3 / 2 = 1). Создает десятичные выходные данные следующими способами:
Встроенные функции Python
Python имеет большое количество встроенных функций, включая max, min, round и sum.
Вычисление максимального значения для каждой записи в списке полей.
max([!field1!, !field2!, !field3!])
Вычисление суммы для каждой записи в списке полей.
sum([!field1!, !field2!, !field3!])
Использование блоков кода
С помощью выражений Python и параметра Код блокировки вы можете сделать следующее:
- Использовать в выражении любые функции Python.
- Получать доступ к функциям и объектам геообработки.
- Получать доступ к свойствам геометрии
- Получать доступ к новому оператору случайных значений.
- Переклассифицировать значения с использованием логики if-then-else.
Способ использования кода блокировки определяется параметром Тип выражения. Инструмент Вычислить поле поддерживает типы выражений PYTHON, PYTHON_9.3 и VB.
Тип выражения | Блок кода |
---|---|
PYTHON_9.3 | Поддерживает функциональные возможности Python. Блок кода определяется посредством функций Python (def). Свойства геометрии выражаются с помощью объектов геообработки, например объекты point, где применимо. |
PYTHON | Так же, как в PYTHON_9. 3, но возвращаются строки, а не объекты геометрии. |
VB | Вычисления выполняются с помощью VBScript. |
Функции Python определяются с помощью ключевого слова def, за которым идет имя функции и ее входные параметры. Можно написать функцию Python, которая будет принимать любое число входных аргументов (в т.ч. их полное отсутствие). Значения возвращаются из функции с помощью выражения return. Имя функции остаётся на ваш выбор (не используйте пробелы и не начинайте с цифр).
Примечание:
Если из функции с выражением return не возвращается явное значение, функция возвращает None.
Примечание:
Помните, что Python вводит в действие структурирование как часть синтаксиса. Для определения каждого логического уровня используются от двух до четырех пробелов. Приводите в соответствие начало и конец каждого блока, и будьте последовательны.
Примеры кода – math
Округлить значения поля до двух десятичных знаков.
Выражение: round(!area!, 2) Тип выражения: PYTHON_9.3
Используйте модуль math для конвертации метров в футы. Конвертация возводит в степень 2 и умножает на площадь.
Выражение: MetersToFeet((float(!shape.area!))) Тип выражения: PYTHON_9.3 Блок кода: import math def MetersToFeet(area): return math.pow(3.2808, 2) * area
Вычисления в полях с использованием логики Python
Классифицировать на основании значений поля.
Выражение: Reclass(!WELL_YIELD!) Тип выражения: PYTHON_9.3 Блок кода: def Reclass(WellYield): if (WellYield >= 0 and WellYield <= 10): return 1 elif (WellYield > 10 and WellYield <= 20): return 2 elif (WellYield > 20 and WellYield <= 30): return 3 elif (WellYield > 30): return 4
Вычисления в полях с использованием логики VBScript
Группа выражений выполняется по условиям, в зависимости от значения выражения.
Выражение: density Тип выражения: VB Блок кода: Dim density If [POP90_SQMI] < 100 Then density = "low" elseif [POP90_SQMI] < 300 Then density = "medium" else density = "high" end if
Примеры кода – геометрия
Примечание:
Более подробно см. ниже в разделе Информация о единицах измерения геометрии.
Вычислить площадь объекта.
Выражение: !shape.area! Тип выражения: PYTHON_9.3
Вычислить максимальную x-координату объекта.
Выражение: !shape.extent.XMax! Тип выражения: PYTHON_9.3
Вычислить количество вершин объекта.
Выражение: MySub(!shape!) Тип выражения: PYTHON_9.3 Блок кода: def MySub(feat): partnum = 0 # Count the number of points in the current multipart feature partcount = feat.partCount pntcount = 0 # Enter while loop for each part in the feature (if a singlepart # feature this will occur only once) # while partnum < partcount: part = feat.getPart(partnum) pnt = part. next() # Enter while loop for each vertex # while pnt: pntcount += 1 pnt = part.next() # If pnt is null, either the part is finished or there # is an interior ring # if not pnt: pnt = part.next() partnum += 1 return pntcount
Для точечного класса пространственных объектов сдвинуть x-координату каждой точки на 100.
Выражение: shiftXCoordinate(!SHAPE!) Тип выражения: PYTHON_9.3 Блок кода: def shiftXCoordinate(shape): shiftValue = 100 point = shape.getPart(0) point.X += shiftValue return point
Информация о единицах измерения геометрии
Свойства площади и длины в поле геометрии можно изменить с помощью типов единиц, обозначаемых знаком @.
- Ключевые слова площадных единиц измерения:
- ACRES | ARES | HECTARES | SQUARECENTIMETERS | SQUAREDECIMETERS | SQUAREINCHES | SQUAREFEET | SQUAREKILOMETERS | SQUAREMETERS | SQUAREMILES | SQUAREMILLIMETERS | SQUAREYARDS | SQUAREMAPUNITS | UNKNOWN
- Ключевые слова линейных единиц измерения:
- CENTIMETERS | DECIMALDEGREES | DECIMETERS | FEET | INCHES | KILOMETERS | METERS | MILES | MILLIMETERS | NAUTICALMILES | POINTS | UNKNOWN | YARDS
Примечание:
Если данные хранятся в географической системе координат и поддерживаются линейные единицы (например, футы), вычисления длин будут конвертированы по геодезическому алгоритму.
Внимание:
Преобразования единиц площади в географическую систему координат даёт сомнительные результаты, так как десятичные градусы в разных частях глобуса имеют разную длину.
Вычислить длину пространственного объекта в ярдах.
Выражение: !shape.length@yards! Тип выражения: PYTHON_9.3
Вычислить длину пространственного объекта в акрах.
Выражение: !shape.area@acres! Тип выражения: PYTHON_9.3
Геодезическая площадь и длина также может быть вычислена с помощью свойств geodesicArea и geodesicLength, после которых указывается символ @ и ключевое слово единиц измерения.
Вычисление геодезической длины пространственного объекта в ярдах.
Выражение: !shape.geodesicLength@yards! Тип выражения: PYTHON_9.3
Вычисление геодезической площади пространственного объекта в акрах.
Выражение: !shape.geodesicArea@acres! Тип выражения: PYTHON_9.3
Примеры кода – даты
Вычислить текущую дату.
Выражение: time. strftime("%d/%m/%Y") Тип выражения: PYTHON_9.3
Вычислить текущие дату и время.
Выражение: datetime.datetime.now() Тип выражения: PYTHON_9.3
Вычислить дату как 31 декабря 2000.
Выражение: datetime.datetime(2000, 12, 31) Тип выражения: PYTHON_9.3
Вычислить количество дней между текущей датой и значением в поле.
Выражение: (datetime.datetime.now() - arcpy.time.ParseDateTimeString(!field1!)).days Тип выражения: PYTHON_9.3
Вычислить дату, прибавив 100 дней к значению даты в поле.
Выражение: arcpy.time.ParseDateTimeString(!field1!) + datetime.timedelta(days=100) Тип выражения: PYTHON_9.3
Вычислить день недели (например, воскресенье) для значения даты в поле.
Выражение: arcpy.time.ParseDateTimeString(!field1!).strftime('%A') Тип выражения: PYTHON_9.3
Примеры кода – текст
Вернуть три самых правых символа.
Выражение: !SUB_REGION![-3:] Тип выражения: PYTHON_9.3
Заменить все вхождения заглавной буквы P на прописную p.
Выражение: !STATE_NAME!.replace("P","p") Тип выражения: PYTHON_9.3
Конкатенировать два поля, разделив их пробелом.
Выражение: !SUB_REGION! + " " + !STATE_ABBR! Тип выражения: PYTHON_9.3
Конвертация в нужный регистр
В этих примерах показаны различные способы конвертации слов таким образом, чтобы каждое слово начиналось с большой буквы, а остальные буквы были прописными.
Выражение: ' '.join([i.capitalize() for i in !STATE_NAME!.split(' ')]) Тип выражения: PYTHON_9.3
Выражение: !STATE_NAME!.title() Тип выражения: PYTHON_9.3
Регулярные выражения
Модуль re в Python содержит операции сопоставления регулярных выражений, которые используются для составления сложных правил и сопоставления и замещения строк.
Замена St или St. перед новым словом в конце строки словом Street.
Выражение: update_street(!ADDRESS!) Тип выражения: PYTHON_9.3 Блок кода: import re def update_street(street_name): return re.sub(r"""\b(St|St. )\Z""", 'Street', street_name)
Накопительные и последовательные вычисления
Вычислить последовательные идентификаторы ID или порядковые номера на основании интервала.
Выражение: autoIncrement() Тип выражения: PYTHON_9.3 Блок кода: rec=0 def autoIncrement(): global rec pStart = 1 #adjust start value, if req'd pInterval = 1 #adjust interval value, if req'd if (rec == 0): rec = pStart else: rec = rec + pInterval return rec
Вычислить накопительные значения числового поля.
Выражение: accumulate(!FieldA!) Тип выражения: PYTHON_9.3 Блок кода: total = 0 def accumulate(increment): global total if total: total += increment else: total = increment return total
Вычислить процентное приращение числового поля.
Выражение: percentIncrease(float(!FieldA!)) Тип выражения: PYTHON_9.3 Блок кода: lastValue = 0 def percentIncrease(newValue): global lastValue if lastValue: percentage = ((newValue - lastValue) / lastValue) * 100 else: percentage = 0 lastValue = newValue return percentage
Случайные значения
Использование numpy site-package для вычисления случайных значений с плавающей точкой от 0,0 до 1,0.
Выражение: getRandomValue() Тип выражения: PYTHON_9.3 Блок кода: import numpy def getRandomValue(): return numpy.random.random()
Вычисление нулевых значений
С помощью выражения Python можно вычислить пустые значения (null), используя значение None.
Примечание:
Следующее вычисление будет работать, только если поле может содержать нулевые значения.
Используйте Python None для вычисления нулевых значений.
Выражение: "None" Тип выражения: PYTHON_9.3
Деление со скобками, что сначала, 36:3(8-6)/6, ответ на пример, как правильно делить
НовостиНаука
- Фото
- Александр Чатикян / «Вокруг света»
Уже несколько дней пользователи соцсетей по всему миру ломают головы над простым математическим примером. По соцсетям и интернет-форумам гуляет задача 36:3(8-6)/6. В зависимости от порядка действий можно получить ответ 1 или 4.
Коллеги из редакции NGS.RU решили подключить к решению профессионала и попросили прокомментировать пример кандидата физико-математических наук, доцента Новосибирского государственного университета Илью Марьясова. Итак, как делить со скобками?
По мнению преподавателя, здесь нет подвоха. Самое главное — твердо соблюдать порядок действий.
— Умножение и деление имеют более высокий приоритет, чем сложение и вычитание, — объяснил Илья Марьясов. — Когда нужно изменить порядок вычисления, чтобы сложение и вычитание выполнялись раньше, то используются скобки.
И еще один нюанс: когда появляются дроби, а дробная черта — это деление, то в этом случае оно выполняется в последнюю очередь.
Сначала нужно решить числитель. По очереди идут деление, умножение, вычитание — при этом последняя операция идет в скобках. Начинаем решать слева направо.
Итак, 36 делим на 3, получаем 12. Потом нужно выполнить умножение, но поскольку вычитание стоит в скобках, то сначала делаем его. Из 8 вычитаем 6, получаем 2. Теперь умножение. Мы 12 умножаем на 2 и получаем 24. Теперь делим числитель на знаменатель. То есть 24 делим на 6.
Правильный ответ — 4.
Дело в особенностях преподавания математики, считает Илья Марьясов.
— В начальном звене вводят операции — сложение, вычитание, умножении и деление, — рассказал специалист. — Примерно до 6-го класса дети не знают, что существуют рациональные числа, которые записываются в виде дробной черты. Когда они вводятся, то выясняется, что операцию деления можно записать не в виде двух точек.
Вплоть до окончания школы все выражения выглядят как дробное число, отдельная операция деления через две точки редко используется. Так умножение у людей фиксируется как приоритетная операция, объяснил математик.
В итоге это приводит к ошибке в решении нашумевшей задачи.
— У людей возникает соблазн 3 умножить на 8 минус 6 (то есть на 2) и получается у них 6. Потом 36 делят на 6, получая 6. И в итоге 6 делят на 6 и выходит 1. Это неверный ответ в данном случае, — подытожил Илья Марьясов.
Попробуйте также ответить на каверзный вопрос из собеседования у Стива Джобса, решить старинную задачу от Илона Маска и многоходовку о дожде в Сиэтле, которую приписывают Марку Цукербергу.
Все тесты «Вокруг света» собраны здесь.
По материалам NGS.RU.
Теги
- Математика
Сегодня читают
Тест: вы ни за что не отыщете кота на этом фото
Тест: выберите свой цвет глаз, а мы раcкажим кое-что важное о вашем характере
Тест на знание культур: угадайте страны по их символам
Тест для настоящих кошатников: найдите 4 котов среди тигров
Как решить самый каверзный пример 36:3(8-6)/6? Математик объяснил, почему многие ошибаются
Функция CALCULATE() в Power BI
- Услуги
- Отрасли
- Програмное обеспечение
- Подготовка
- Ресурсы
- О
- Спенсер Баук
- 27 мая 2021 г.
Читатели, знакомые с Power BI, уже знают, что функция CALCULATE является одной из самых важных функций DAX на платформе. Эта функция широко используется, чрезвычайно полезна и открывает множество возможностей для вашего анализа. Есть много разных способов использовать эту функцию, поэтому в этом посте я покажу вам, как эта функция работает, и несколько распространенных вариантов ее использования.
Базовый синтаксис
Мне нравится рассматривать функцию CALCULATE в двух частях; агрегация и фильтр. Первая часть выражения является частью агрегации. Здесь вы можете разместить любую функцию агрегирования, которая вам нужна, будь то SUM (продажи), AVG (цена) или что-то еще. Вторая часть — это ваши критерии фильтрации. Эта часть определит набор данных, к которому вы применяете агрегацию в первой части.
Вот синтаксис DAX для функции ВЫЧИСЛИТЬ в Power BI:
CALCULATE(,([filter1],([filter2],([filter...]))))
Благодаря возможности применять критерии к существующей таблице перед агрегированием вам не нужно создавать отдельные таблицы для конкретных расчетов .
Критерии одиночного фильтра
Давайте продолжим объяснять, как использовать эту функцию, на очень простом примере. В этом примере мы хотим создать меру, которая всегда будет показывать нам сумму продаж для восточного региона в нашем наборе данных о продажах. Мы знаем, что собираемся суммировать наше поле «Продажи», но мы хотим указать, чтобы суммировать наше поле «Продажи», только когда «Регион» = «Восток». См. ниже:
// Продажи Восточного региона = ВЫЧИСЛИТЬ( СУММ(Заказы[Продажи], [Регион]="Восток") )
Другим распространенным вариантом использования одного критерия фильтра является поиск только продаж за определенный год, часто максимальный год. В этом примере нам даются данные о продажах на уровне года, поэтому мы хотим найти сумму продаж за самый последний год.
//Цикл продаж = VAR max_year = MAX(Заказы[Год]) ВОЗВРАЩАТЬСЯ ВЫЧИСЛИТЬ( СУММ(Заказы[Продажи]), Заказы[Год]=max_year )
Множественные критерии фильтрации
Часто требуется применить более одного критерия к набору данных, используемому для расчета. В этом случае мы будем рассчитывать самые последние доходы, используя конкретную конференцию NCAA из набора финансовых данных NCAA. Вы можете видеть, что я применил несколько критериев для этого расчета.
// Большая 10 выручка CY = VAR max_year = MAX(NCAA_Financials_FCT[Год]) ВОЗВРАЩАТЬСЯ ВЫЧИСЛИТЬ( SUM(NCAA_Financials_FCT[Общие доходы]), NCAA_Financials_FCT[Год]=max_year, 'Conference DIM'[Conf_Name]="Конференция Большой Десятки" )
При применении нескольких фильтров для критериев И с использованием функции ФИЛЬТР для добавления контекста вам потребуется использовать «&&» для добавления критериев. См. ниже:
10 больших доходов CY = VAR max_year = MAX(NCAA_Financials_FCT[Год]) ВОЗВРАЩАТЬСЯ ВЫЧИСЛИТЬ( SUM(NCAA_Financials_FCT[Общие доходы]), ФИЛЬТР(NCAA_Financials_FCT,NCAA_Financials_FCT[Year]=max_year && NCAA_Financials_FCT[CONF_ID]="9")
При применении нескольких фильтров для ИЛИ критерий с использованием функции ФИЛЬТР, который вы хотите использовать с символом «||». добавить критерии. Приведенная ниже функция вернет все данные либо за максимальный год, либо за [CONF_ID] = 1. См. ниже:
//Большие 10 доходов CY Multi ИЛИ = VAR max_year = MAX(NCAA_Financials_FCT[Год]) ВОЗВРАЩАТЬСЯ ВЫЧИСЛИТЬ( SUM(NCAA_Financials_FCT[Общие доходы]), NCAA_Financials_FCT[Год]=max_year || NCAA_Financials_FCT[CONF_ID]="1 )
ВЫЧИСЛИТЬ Используя ВСЕ, ВСЕ, КРОМЕ
В примерах до этого момента мы создали поля, которые будут подвергаться любым фильтрам или полям, применяемым к показателям. Особенно при создании конкретных показателей, таких как те, которые мы сделали, вы можете не захотеть изменять эти значения. Мы можем добиться этого, используя функции ALL и ALLEXCEPT.
Функция ALL будет вычислять часть выражения вашей функции CALCULATE для всех данных в наборе данных независимо от примененных к ним фильтров. Смотри ниже.
// Доходы ВСЕ = ВЫЧИСЛИТЬ( SUM(NCAA_Financials_FCT[Общие доходы]), ВСЕ (NCAA_Financials_FCT) )
Приведенный выше синтаксис приведет к тому, что сумма общих доходов будет показана независимо от каких-либо фильтров. Вы можете видеть в таблице ниже, что даже когда отображается поле «Конференция», отображаются общие доходы для всех данных.
Можно включить некоторые критерии фильтрации, которые всегда будут применяться независимо от того, какие другие фильтры применяются к мере. В приведенном ниже примере вы можете видеть, что я указал определенный год для расчета доходов. Независимо от выбранных лет или конференции это значение останется постоянным.
//Выручка ВСЕ 2017= ВЫЧИСЛИТЬ( SUM(NCAA_Financials_FCT[Общие доходы]), ФИЛЬТР(ВСЕ(NCAA_Financials_FCT), NCAA_Financials_FCT[Год]=2017) )
Функция ALLEXCEPT вернет все ваши данные так же, как и функция ALL, ЗА ИСКЛЮЧЕНИЕМ она будет учитывать некоторые полей фильтра, как указано. В приведенном ниже примере я хочу увидеть общий доход по конференциям, но я хочу, чтобы годы можно было фильтровать. Вы можете видеть в моем синтаксисе, что я утверждаю, что «Год» будет единственным полем, которое может фильтровать набор данных, который агрегируется.
//Доходы ALLEXCEPT Year = ВЫЧИСЛИТЬ ( СУММА ( NCAA_Financials_FCT[Общие доходы]), ВСЕ, КРОМЕ ( NCAA_Financials_FCT, NCAA_Financials_FCT[Год] ) )
Теперь, когда я добавляю это поле в свою таблицу, вы можете видеть, что год теперь учитывается для показателя ALLEXCEPT Year.
Хотя есть и другие способы настроить контекст, в котором функция РАСЧЕТ агрегирует набор данных, мы надеемся, что это дало вам некоторое представление о том, как правильно начать использовать эту функцию.
В заключение
Функция РАСЧЕТ чрезвычайно полезна при создании более сложных расчетов, позволяющих получить более глубокое понимание. Эта функция DAX является одной из наиболее фундаментальных функций для аналитиков, поэтому, надеюсь, эта запись в блоге дала вам представление о том, как использовать ее для повседневного использования.
Имейте в виду, что помимо способов, описанных в этом блоге, существует множество других способов использования этой функции. Эти несколько примеров — лишь отправная точка того, что вы можете делать с помощью CALCULATE. А теперь иди СЧИТАЙ!
Содержание
Категории
Еще для изучения
ВЫЧИСЛИТЬ – Руководство DAX
Синтаксис | Возвращаемые значения | Примечания | Примеры | Статьи | Связанные
Оценивает выражение в контексте, измененном фильтрами.
Синтаксис
ВЫЧИСЛИТЬ ( <Выражение> [ <Фильтр> [ <Фильтр> [ … ] ] ] )
Параметр | Атрибуты | Описание |
---|---|---|
Выражение | Выражение, которое необходимо вычислить. | |
Фильтр | Дополнительный Повторяемый | Логическое выражение (True/False) или табличное выражение, определяющее фильтр. |
Возвращаемые значения
Скаляр Одно значение любого типа.
Значение является результатом выражения, оцененного в измененном контексте фильтра.
» 8 связанных статей
» 1 связанная функция
Примеры
-- Компактный синтаксис (логический) расширяется в полный синтаксис - до оценки ОПРЕДЕЛЯТЬ ИЗМЕРЕНИЕ продаж[Красные продажи] = ВЫЧИСЛИТЬ ([Объем продаж], 'Продукт'[Цвет] = "Красный") ПОКАЗАТЬ Продажи[Красный Продажи Полный] = ВЫЧИСЛИТЬ ( [Объем продаж], ФИЛЬТР ( ВСЕ («Товар» [Цвет]), «Товар» [Цвет] = «Красный») ) ОЦЕНИВАТЬ СУММАРИЗОВАТЬ КОЛОННЫ ( «Продукт» [Цвет], «Сумма продаж», [Сумма продаж], «Красные продажи», [Красные продажи], «Красные продажи полны», [Красные продажи полны] )
Товар[Цвет] | Сумма продаж | Красный Продажа | Красный Продажи Полный |
---|---|---|---|
Серебро | 6 798 560,86 | 1 110 102,10 | 1 110 102,10 |
Синий | 2 435 444,62 | 1 110 102,10 | 1 110 102,10 |
Белый | 5 829 599,91 | 1 110 102,10 | 1 110 102,10 |
Красный | 1 110 102,10 | 1 110 102,10 | 1 110 102,10 |
Черный | 5 860 066,14 | 1 110 102,10 | 1 110 102,10 |
Зеленый | 1 403 184,38 | 1 110 102,10 | 1 110 102,10 |
Оранжевый | 857 320,28 | 1 110 102,10 | 1 110 102,10 |
Розовый | 828 638,54 | 1 110 102,10 | 1 110 102,10 |
Желтый | 89 715,56 | 1 110 102,10 | 1 110 102,10 |
Фиолетовый | 5 973,84 | 1 110 102,10 | 1 110 102,10 |
Коричневый | 1 029 508,95 | 1 110 102,10 | 1 110 102,10 |
Серый | 3 509 138,09 | 1 110 102,10 | 1 110 102,10 |
Золото | 361 496,01 | 1 110 102,10 | 1 110 102,10 |
Лазурь | 97 389,89 | 1 110 102,10 | 1 110 102,10 |
Серебристо-серый | 371 908,92 | 1 110 102,10 | 1 110 102,10 |
Прозрачный | 3 295,89 | 1 110 102,10 | 1 110 102,10 |
-- Вы можете использовать любое условие в качестве аргумента, если оно может -- быть преобразовано в таблицу механизмом DAX ОПРЕДЕЛЯТЬ ПОКАЗАТЬ Продажи[Красно-Синий Продажи] = ВЫЧИСЛИТЬ ([Объем продаж], 'Продукт'[Цвет] IN { "Красный", "Синий" } ) ПОКАЗАТЬ Продажи[Красный Синий Продажи Полные] = ВЫЧИСЛИТЬ ( [Объем продаж], ФИЛЬТР ( ВСЕ («Товар» [Цвет]), «Товар» [Цвет] В { «Красный», «Синий» }) ) ОЦЕНИВАТЬ СУММАРИЗОВАТЬ КОЛОННЫ ( «Продукт» [Цвет], «Сумма продаж», [Сумма продаж], «Красно-синие продажи», [Красно-синие продажи], «Красно-синие продажи полны», [Красно-синие продажи полны] )
Товар[Цвет] | Сумма продаж | Красный Синий Продается | Красный Синий Продажа Полный |
---|---|---|---|
Серебро | 6 798 560,86 | 3 545 546,72 | 3 545 546,72 |
Синий | 2 435 444,62 | 3 545 546,72 | 3 545 546,72 |
Белый | 5 829 599,91 | 3 545 546,72 | 3 545 546,72 |
Красный | 1 110 102,10 | 3 545 546,72 | 3 545 546,72 |
Черный | 5 860 066,14 | 3 545 546,72 | 3 545 546,72 |
Зеленый | 1 403 184,38 | 3 545 546,72 | 3 545 546,72 |
Оранжевый | 857 320,28 | 3 545 546,72 | 3 545 546,72 |
Розовый | 828 638,54 | 3 545 546,72 | 3 545 546,72 |
Желтый | 89 715,56 | 3 545 546,72 | 3 545 546,72 |
Фиолетовый | 5 973,84 | 3 545 546,72 | 3 545 546,72 |
Коричневый | 1 029 508,95 | 3 545 546,72 | 3 545 546,72 |
Серый | 3 509 138,09 | 3 545 546,72 | 3 545 546,72 |
Золото | 361 496,01 | 3 545 546,72 | 3 545 546,72 |
Лазурь | 97 389,89 | 3 545 546,72 | 3 545 546,72 |
Серебристо-серый | 371 908,92 | 3 545 546,72 | 3 545 546,72 |
Прозрачный | 3 295,89 | 3 545 546,72 | 3 545 546,72 |
-- Модификатор KEEPFILTERS не удаляет существующий фильтр ОПРЕДЕЛЯТЬ ИЗМЕРЕНИЕ продаж[Red Blue Sales Keepfilters] = ВЫЧИСЛИТЬ ( [Объем продаж], KEEPFILTERS ( 'Товар'[Цвет] IN { "Красный", "Синий" } ) ) ПОКАЗАТЬ Продажи[Красно-Синий Продажи] = ВЫЧИСЛИТЬ ( [Объем продаж], «Продукт» [Цвет] IN { «Красный», «Синий» } ) ОЦЕНИВАТЬ СУММАРИЗОВАТЬ КОЛОННЫ ( «Продукт» [Цвет], «Сумма продаж», [Сумма продаж], «Красно-синие продажи», [Красно-синие продажи], «Красно-синие фильтры сохранения продаж», [Красно-синие фильтры сохранения продаж] )
Товар[Цвет] | Сумма продаж | Красный Синий Продается | Красный Синий Продажи Keepfilters |
---|---|---|---|
Серебро | 6 798 560,86 | 3 545 546,72 | (пусто) |
Синий | 2 435 444,62 | 3 545 546,72 | 2 435 444,62 |
Белый | 5 829 599,91 | 3 545 546,72 | (пусто) |
Красный | 1 110 102,10 | 3 545 546,72 | 1 110 102,10 |
Черный | 5 860 066,14 | 3 545 546,72 | (пусто) |
Зеленый | 1 403 184,38 | 3 545 546,72 | (пусто) |
Оранжевый | 857 320,28 | 3 545 546,72 | (пусто) |
Розовый | 828 638,54 | 3 545 546,72 | (пусто) |
Желтый | 89 715,56 | 3 545 546,72 | (пусто) |
Фиолетовый | 5 973,84 | 3 545 546,72 | (пусто) |
Коричневый | 1 029 508,95 | 3 545 546,72 | (пусто) |
Серый | 3 509 138,09 | 3 545 546,72 | (пусто) |
Золото | 361 496,01 | 3 545 546,72 | (пусто) |
Лазурь | 97 389,89 | 3 545 546,72 | (пусто) |
Серебристо-серый | 371 908,92 | 3 545 546,72 | (пусто) |
Прозрачный | 3 295,89 | 3 545 546,72 | (пусто) |
-- Когда CALCULATE выполняется в контексте строки, он преобразует -- контексты строк в эквивалентных контекстах фильтра ОПРЕДЕЛЯТЬ ИЗМЕРЕНИЕ Продажи [Среднее за год] = СРЕДНИЙX ( ЗНАЧЕНИЯ («Дата» [Календарный год]), ВЫЧИСЛИТЬ ( SUMX (Продажи, Продажи[Количество] * Продажи[Цена нетто]) ) ) ОЦЕНИВАТЬ СУММАРИЗОВАТЬ КОЛОННЫ ( «Продукт» [Цвет], «Сумма продаж», [Сумма продаж], "Среднее за год", [Среднее за год] )
Товар[Цвет] | Сумма продаж | Годовой средний |
---|---|---|
Серебро | 6 798 560,86 | 2 266 186,95 |
Синий | 2 435 444,62 | 811 814,87 |
Белый | 5 829 599,91 | 1 943 199,97 |
Красный | 1 110 102,10 | 370 034,03 |
Черный | 5 860 066,14 | 1 953 355,38 |
Зеленый | 1 403 184,38 | 467 728,13 |
Оранжевый | 857 320,28 | 285 773,43 |
Розовый | 828 638,54 | 276 212,85 |
Желтый | 89 715,56 | 29 905,19 |
Фиолетовый | 5 973,84 | 1 991,28 |
Коричневый | 1 029 508,95 | 343 169,65 |
Серый | 3 509 138,09 | 1 169 712,70 |
Золото | 361 496,01 | 120 498,67 |
Лазурь | 97 389,89 | 32 463,30 |
Серебристо-серый | 371 908,92 | 123 969,64 |
Прозрачный | 3 295,89 | 1 098,63 |
-- CALCULATE неявно добавляется к любой ссылке на меру ОПРЕДЕЛЯТЬ ИЗМЕРЕНИЕ Продажи[Сумма продаж] = SUMX (Продажи, Продажи[Количество] * Продажи[Цена нетто]) ИЗМЕРЕНИЕ Продажи [Среднее за год] = СРЕДНИЙX ( ЗНАЧЕНИЯ («Дата» [Календарный год]), ВЫЧИСЛИТЬ ( SUMX (Продажи, Продажи[Количество] * Продажи[Цена нетто]) ) ) ПОКАЗАТЬ Продажи[Среднее за год 2] = СРЕДНИЙX ( ЗНАЧЕНИЯ («Дата» [Календарный год]), [Объем продаж] ) ОЦЕНИВАТЬ СУММАРИЗОВАТЬ КОЛОННЫ ( «Продукт» [Цвет], «Сумма продаж», [Сумма продаж], "Среднее за год", [Среднее за год], «Среднее за год 2», [Среднее за год 2] )
Товар[Цвет] | Сумма продаж | Годовой средний | Ежегодно Среднее 2 |
---|---|---|---|
Серебро | 6 798 560,86 | 2 266 186,95 | 2 266 186,95 |
Синий | 2 435 444,62 | 811 814,87 | 811 814,87 |
Белый | 5 829 599,91 | 1 943 199,97 | 1 943 199,97 |
Красный | 1 110 102,10 | 370 034,03 | 370 034,03 |
Черный | 5 860 066,14 | 1 953 355,38 | 1 953 355,38 |
Зеленый | 1 403 184,38 | 467 728,13 | 467 728,13 |
Оранжевый | 857 320,28 | 285 773,43 | 285 773,43 |
Розовый | 828 638,54 | 276 212,85 | 276 212,85 |
Желтый | 89 715,56 | 29 905,19 | 29 905,19 |
Фиолетовый | 5 973,84 | 1 991,28 | 1 991,28 |
Коричневый | 1 029 508,95 | 343 169,65 | 343 169,65 |
Серый | 3 509 138,09 | 1 169 712,70 | 1 169 712,70 |
Золото | 361 496,01 | 120 498,67 | 120 498,67 |
Лазурь | 97 389,89 | 32 463,30 | 32 463,30 |
Серебристо-серый | 371 908,92 | 123 969,64 | 123 969,64 |
Прозрачный | 3 295,89 | 1 098,63 | 1 098,63 |
-- ВЫЧИСЛИТЕ этапы оценки: -- 1. Оценка аргументов фильтра -- 2. Контекстный переход -- 3. Оценка модификаторов CALCULATE -- 4. Применение аргументов фильтра и KEEPFILTERS ОПРЕДЕЛЯТЬ ИЗМЕРЕНИЕ Продажи[Тест] = СРЕДНИЙX ( ЗНАЧЕНИЯ («Дата» [Календарный год]), ВЫЧИСЛИТЬ ( [Объем продаж], 'Продукт'[Категория] = "Аудио", KEEPFILTERS («Продукт» [Цвет] IN { «Красный», «Синий» }), ОТНОШЕНИЕ ПОЛЬЗОВАТЕЛЯ (Продажи[Дата поставки], 'Дата'[Дата]) ) ) ОЦЕНИВАТЬ СУММАРИЗОВАТЬ КОЛОННЫ ( «Продукт» [Цвет], «Сумма продаж», [Тест] )
Цвет | Сумма продаж |
---|---|
Синий | 22 266,55 |
Красный | 16 561,91 |
Связанные статьи
Узнайте больше о CALCULATE в следующих статьях:
- Контекстный переход и фильтры в CALCULATE
В этой статье объясняется, как переход контекста взаимодействует с аргументами фильтра функции CALCULATE в DAX. Это важно, чтобы избежать неожиданных результатов при сложных вычислениях, сделанных в аргументах фильтра. » Читать далее
- Аргументы фильтрации в CALCULATE
Аргумент фильтра в CALCULATE всегда является итератором. Нахождение правильной степени детализации важно для контроля результата и производительности. В этой статье описываются параметры, доступные для создания сложных фильтров в DAX. » Подробнее
- Порядок оценки в параметрах CALCULATE
DAX — это новый язык, используемый PowerPivot и службами Analysis Services в табличном режиме, он напоминает синтаксис формулы Excel и может считаться функциональным языком. У вас нет итерационных операторов, но вы можете запускать итерационные функции, такие как, например, СУММ и ФИЛЬТР. Наиболее важными функциями DAX являются […] » Читать далее
- Использование условий ИЛИ между срезами в DAX
В этой статье описывается, как реализовать в DAX логическое условие ИЛИ между выбором двух срезов отчета Power BI или сводной таблицы в Excel. По умолчанию при использовании более чем одного слайсера они рассматриваются в условии И. » Подробнее
- Контекстные переходы и расширенные таблицы
В этой статье описывается, как расширение таблицы и распространение контекста фильтра являются важными концепциями DAX для понимания и исправления небольших сбоев в выражениях DAX. » Читать далее
- Расширенные таблицы в DAX
Расширенные таблицы — это ядро DAX; понимание того, как они работают, имеет первостепенное значение. В этой статье представлены теоретические основы того, что такое расширенные таблицы, а также основные понятия, полезные при чтении кода DAX. » Читать далее
- Понимание перехода контекста в DAX
Переход контекста — одна из самых малопонятных тем для новичков в DAX. В этой статье мы расскажем о переходе контекста, его последствиях и о том, как использовать его, а не бояться. » Читать далее
- Решение ошибок в аргументах фильтра CALCULATE
Аргументы фильтра в CALCULATE могут быть записаны как логические условия с некоторыми ограничениями.