Примеры вычислений полей—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.  | 
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.  | 
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.  | 
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 могут быть записаны как логические условия с некоторыми ограничениями.
  



 1
 0
 3, но возвращаются строки, а не объекты геометрии.
 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
 strftime("%d/%m/%Y")
Тип выражения:
PYTHON_9.3