Вычислить пример как: Онлайн-калькулятор. Примеры решений задач по математике

Содержание

Примеры вычислений полей—ArcMap | Документация

  • Простые вычисления
  • Встроенные функции Python
  • Использование блоков кода
  • Примеры кода – math
  • Вычисления в полях с использованием логики Python
  • Вычисления в полях с использованием логики VBScript
  • Примеры кода – геометрия
  • Информация о единицах измерения геометрии
  • Примеры кода – даты
  • Примеры кода – текст
  • Накопительные и последовательные вычисления
  • Случайные значения
  • Вычисление нулевых значений

Ввод значений с клавиатуры – не единственный способ редактирования таблиц. В некоторых случаях вам может потребоваться выполнить математические вычисления для получения значения поля отдельной записи или даже всех записей. Можно выполнять как простые, так и сложные вычисления над всеми либо только выбранными записями. Кроме того, в полях атрибутивных таблиц можно вычислить длину, периметр и прочие геометрические свойства.

В разделах ниже приводятся примеры использования калькулятора поля. Вычисления можно осуществлять при помощи 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

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

  • Услуги
  • Отрасли
  • Програмное обеспечение
  • Подготовка
  • Ресурсы
  • О

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

Оставить комментарий