Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: SQL Server 2019 и более поздних версий Analysis Services
Azure Analysis Services
Fabric/Power BI Premium
Группы вычисления могут значительно сократить количество избыточных мер за счет группировки общих выражений мер в соответствии с вычисляемыми элементами. Группы вычислений поддерживаются в табличных моделях на уровне совместимости 1500 и более высокого уровня совместимости.
Преимущества
Группы вычислений решают проблему в сложных моделях, где может происходить распространение избыточных мер, использующих одинаковые вычисления — наиболее распространённое явление с вычислениями временной аналитики. Например, аналитик по продажам хочет просмотреть итоги продаж и заказы с начала месяца (MTD), с начала квартала (QTD), с начала года (YTD), заказы с начала года за предыдущий год (PY) и т. д. Модель данных должен создавать отдельные меры для каждого вычисления, что может привести к десяткам мер. Пользователю это может означать необходимость перебрать так же много мер и применить их отдельно к своему отчету.
Сначала рассмотрим, как группы вычислений отображаются пользователями в средстве создания отчетов, например Power BI. Затем мы рассмотрим, что создает группу вычислений и как они создаются в модели.
Группы вычислений отображаются в клиентах отчетов в виде таблицы с одним столбцом. Столбец не похож на типичный столбец или измерение, вместо этого он представляет один или несколько многократно используемых вычислений или элементы вычисления , которые можно применить к любой мере, уже добавленной в фильтр значений для визуализации.
В следующей анимации пользователь анализирует данные о продажах в течение 2012 и 2013 годов. Перед применением группы вычислений общая базовая мера Sales вычисляет сумму общих продаж за каждый месяц. Затем пользователь хочет применить временные вычисления для получения итоговых данных о продажах на данный момент в месяце, на данный момент в квартале, на данный момент в году и так далее. Без групп вычислений пользователю придется выбрать отдельные меры аналитики времени.
В этом примере с группой вычислений с именем "Аналитика времени" пользователь перетаскивает элемент вычисления времени в область фильтра "Столбцы ", каждый элемент вычисления отображается как отдельный столбец. Значения для каждой строки вычисляются из базовой меры Sales.
Группы вычислений работают с явными показателями DAX. В этом примере Sales — это явная мера, уже созданная в модели. Группы вычислений не работают с неявными мерами DAX. Например, в Power BI неявные меры создаются при перетаскивании столбцов в визуальные элементы для просмотра агрегированных значений без создания явной меры. В настоящее время Power BI создает DAX для неявных мер, написанных как встроенные вычисления DAX. Это означает, что неявные меры не могут работать с группами вычислений. Было введено новое свойство модели, видимое в табличной объектной модели (TOM), DiscourageImplicitMeasures. В настоящее время для создания групп вычислений это свойство должно иметь значение true. Если задано значение true, Power BI Desktop в режиме Live Connect отключает создание неявных мер.
Группы вычислений также поддерживают многомерные запросы выражений данных. Это означает, что пользователи Microsoft Excel, которые запрашивают табличные модели данных с помощью MDX, могут полностью использовать возможности групп вычислений в сводных таблицах и графиках листа.
Как они работают
Теперь, когда вы узнали, как отображаются пользователи групп вычислений, давайте рассмотрим, как будет создан пример группы вычислений аналитики времени.
Прежде чем перейти к подробным сведениям, давайте введем некоторые новые функции DAX специально для групп вычислений:
SELECTEDMEASURE — используется в выражениях вычисления для ссылки на показатель, находящийся в текущем контексте. В этом примере мера "Продажи".
SELECTEDMEASURENAME — используется выражениями для элементов вычисления, чтобы определить меру, которая находится в контексте по имени.
ISSELECTEDMEASURE — используется выражениями для элементов вычисления, чтобы определить, какая мера находится в контексте, указанном в списке мер.
SELECTEDMEASUREFORMATSTRING — используется выражениями для вычислительных элементов для получения форматной строки меры, находящейся в контексте.
Пример аналитики времени
Имя таблицы — аналитика времени
Имя столбца — вычисление времени
Приоритет — 20
Элементы вычислений в рамках интеллектного анализа времени
Текущий
SELECTEDMEASURE()
MTD
CALCULATE(SELECTEDMEASURE(), DATESMTD(DimDate[Date]))
QTD
CALCULATE(SELECTEDMEASURE(), DATESQTD(DimDate[Date]))
YTD
CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date]))
PY
CALCULATE(SELECTEDMEASURE(), SAMEPERIODLASTYEAR(DimDate[Date]))
PY MTD
CALCULATE(
SELECTEDMEASURE(),
SAMEPERIODLASTYEAR(DimDate[Date]),
'Time Intelligence'[Time Calculation] = "MTD"
)
PY QTD
CALCULATE(
SELECTEDMEASURE(),
SAMEPERIODLASTYEAR(DimDate[Date]),
'Time Intelligence'[Time Calculation] = "QTD"
)
PY YTD
CALCULATE(
SELECTEDMEASURE(),
SAMEPERIODLASTYEAR(DimDate[Date]),
'Time Intelligence'[Time Calculation] = "YTD"
)
Годовом исчислении
SELECTEDMEASURE() -
CALCULATE(
SELECTEDMEASURE(),
'Time Intelligence'[Time Calculation] = "PY"
)
YOY%
DIVIDE(
CALCULATE(
SELECTEDMEASURE(),
'Time Intelligence'[Time Calculation]="YOY"
),
CALCULATE(
SELECTEDMEASURE(),
'Time Intelligence'[Time Calculation]="PY"
)
)
Чтобы протестировать эту группу вычислений, выполните запрос DAX в SSMS или daX Studio с открытым исходным кодом. Примечание. YoY и YOY% опущены в этом примере запроса.
Запрос аналитики времени
EVALUATE
CALCULATETABLE (
SUMMARIZECOLUMNS (
DimDate[CalendarYear],
DimDate[EnglishMonthName],
"Current", CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "Current" ),
"QTD", CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "QTD" ),
"YTD", CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "YTD" ),
"PY", CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY" ),
"PY QTD", CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY QTD" ),
"PY YTD", CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY YTD" )
),
DimDate[CalendarYear] IN { 2012, 2013 }
)
Возврат результата запроса временной аналитики
В возвращаемой таблице показаны вычисления для каждого примененного элемента вычисления. Например, сведения о QTD за март 2012 г. — это сумма января, февраля и марта 2012 года.
Строки динамического формата
Строки динамического формата с группами вычислений позволяют условно применять строки форматирования к мерам, не заставляя их возвращать строки.
Табличные модели поддерживают динамическое форматирование мер с помощью функции FORMAT DAX. Однако функция FORMAT имеет недостаток в том, что она возвращает строку, из-за чего меры, которые в обычных условиях были бы числовыми, также возвращаются в виде строки. Это может иметь некоторые ограничения, например, не работать с большинством визуальных элементов Power BI в зависимости от числовых значений, таких как диаграммы.
В Power BI строки динамического формата для мер также позволяют условному применению строк форматирования к определенной мере, не заставляя их возвращать строку и без использования групп вычислений. Дополнительные сведения см. в статье "Строки динамического формата" для мер.
Строки динамического формата для аналитики времени
Если мы рассмотрим приведенный выше пример аналитики времени, все элементы вычисления, кроме yoY% должны использовать формат текущей меры в контексте. Например, YTD, вычисляемый на базовой мере 'Продажи', должен быть выражен в валюте. Если бы это была группа вычислений для базового показателя, подобного Orders, формат был бы числовым. YoY%, однако, должен быть процент независимо от формата базовой меры.
Для %YOY можно переопределить строку форматирования, установив для свойства выражения формата значение 0,00%;-0,00%;0,00%. Дополнительные сведения о свойствах форматной строки см. в разделе "MDX Cell Properties - FORMAT STRING Contents".
В этом визуальном элементе матрицы в Power BI продажи Current/YOY и заказы Current/YOY сохраняют свои соответственно базовые строковые форматы. YOY продажи% и YOY заказы%, однако переопределяет строку формата для использования процентного формата.
Строки динамического формата для преобразования валют
Строки динамического формата обеспечивают простое преобразование валют. Рассмотрим следующую модель данных Adventure Works. Он моделировался для преобразования валют "один ко многим ", как определено типами преобразования.
Столбец FormatString добавляется в таблицу DimCurrency и заполняется строками форматирования для соответствующих валют.
В этом примере следующая группа вычислений определяется следующим образом:
Пример преобразования валют
Имя таблицы — преобразование валюты
Имя столбца — вычисление преобразования
Приоритет — 5
Элементы вычисления для преобразования валют
Нет преобразования
SELECTEDMEASURE()
Преобразованная валюта
IF(
//Check one currency in context & not US Dollar, which is the pivot currency:
SELECTEDVALUE( DimCurrency[CurrencyName], "US Dollar" ) = "US Dollar",
SELECTEDMEASURE(),
SUMX(
VALUES(DimDate[Date]),
CALCULATE( DIVIDE( SELECTEDMEASURE(), MAX(FactCurrencyRate[EndOfDayRate]) ) )
)
)
Форматирование строкового выражения
SELECTEDVALUE(
DimCurrency[FormatString],
SELECTEDMEASUREFORMATSTRING()
)
Замечание
Выражения выбора для групп вычислений в настоящее время находятся в предварительной версии и могут использоваться для реализации автоматического преобразования валют в группах вычислений, удаляя необходимость иметь два отдельных элемента вычисления.
Строковое выражение формата должно возвращать скалярную строку. Она использует новую функцию SELECTEDMEASUREFORMATSTRING для возврата к строке формата базовой меры, если в контексте фильтра существует несколько валют.
В следующей анимации показана динамическая конвертация валюты для меры продаж в отчете.
Выражения выбора (предварительная версия)
Выражения выбора — это необязательные свойства, определенные для группы вычислений. Существует два типа выражений выбора:
- multipleOrEmptySelectionExpression. Это выражение выбора применяется при выборе нескольких элементов вычисления, не существующего элемента вычисления или при выполнении конфликтующего выбора.
- noSelectionExpression. Это выражение выбора применяется, если группа вычислений не фильтруется.
Оба этих выражения выбора также имеют строковое выражение динамического формата formatStringDefinition.
В итоге для группы вычислений можно определить следующее:
...
"calculationGroup": {
"multipleOrEmptySelectionExpression": {
"expression": "",
"formatStringDefinition": {...}
},
"noSelectionExpression": {
"expression": "",
"formatStringDefinition": {...}
}
...
}
Замечание
Эти выражения, если они указаны, применяются только для конкретных ситуаций, упомянутых. Выбор для одного элемента вычисления не затрагивается этими выражениями.
Ниже приведен обзор этих выражений и их поведение по умолчанию, если оно не указано:
Тип выбора | Выражение выбора не определено (по умолчанию) | Определено выражение выбора |
---|---|---|
Один выбор | Применен выбор | Выбор применяется |
Несколько выборок | Группа вычислений не фильтруется | Возвращает результат вычисления многоэлементного или пустого выражения выбора. |
Пустое выделение | Группа вычислений не фильтруется | Возвращает результат вычисления выражения multipleOrEmptySelectionExpression |
Нет выбора | Группа вычислений не фильтруется | Возвращаемый результат оценки noSelectionExpression |
Выбор нескольких элементов или отсутствие выбора
Если в одной группе вычислений сделано несколько выборов и определено выражение multipleOrEmptySelectionExpression, то группа вычислений будет оценивать и возвращать его результат. Если это выражение не определено, группа вычислений вернет следующий результат:
SELECTEDMEASURE()
Например, давайте рассмотрим группу вычислений под названием MyCalcGroup, которая имеет выражение для множества или пустого выбора, конфигурированное следующим образом.
IF (
ISFILTERED ( 'MyCalcGroup' ),
"Filters: "
& CONCATENATEX (
FILTERS ( 'MyCalcGroup'[Name] ),
'MyCalcGroup'[Name],
", "
)
)
Теперь представьте, что в группе вычислений выбран следующий выбор:
EVALUATE
{
CALCULATE (
[MyMeasure],
'MyCalcGroup'[Name] = "item1" || 'MyCalcGroup'[Name] = "item2"
)
}
Здесь мы выбираем два элемента в группе вычислений, "item1" и "item2". Это множественный выбор, поэтому вычисляется выражение multipleOrEmptySelectionExpression и возвращает следующий результат: "Фильтры: item1, item2".
Затем выполните следующий выбор в группе вычислений:
EVALUATE
{
CALCULATE (
[MyMeasure],
'MyCalcGroup'[Name] = "item4" -- item4 does not exists
)
}
Это пример пустого выбора, так как элемент4 не существует в этой группе вычислений. Поэтому выражение multipleOrEmptySelectionExpression вычисляется и возвращает следующий результат: "Фильтры: ".
Нет выделенных элементов
Выражение noSelectionExpression на группу вычислений будет применено, если группа вычислений не была отфильтрована. В основном это используется для выполнения действий по умолчанию, не требуя, чтобы пользователь выполнял действия, сохраняя гибкость для пользователя, чтобы переопределить действие по умолчанию. Например, давайте рассмотрим автоматическое преобразование валюты с долларом США в качестве центральной валюты сводной.
Мы можем настроить группу вычислений со следующим выражением noSelectionExpression:
IF (
//Check one currency in context & not US Dollar, which is the pivot currency:
SELECTEDVALUE (
DimCurrency[CurrencyName],
"US Dollar"
) = "US Dollar",
SELECTEDMEASURE (),
SUMX (
VALUES ( DimDate[DateKey] ),
CALCULATE (
DIVIDE ( SELECTEDMEASURE (), MAX ( FactCurrencyRate[EndOfDayRate] ) )
)
)
)
Мы также зададим формат FormatStringDefinition для этого выражения:
SELECTEDVALUE(
DimCurrency[FormatString],
SELECTEDMEASUREFORMATSTRING()
)
Теперь, если валюта не выбрана, все валюты будут автоматически преобразованы в валюту сводной (доллар США) по мере необходимости. Кроме того, вы можете выбрать другую валюту для преобразования в нее без необходимости переключать элементы вычисления, как это пришлось бы делать, если бы не было noSelectionExpression.
Приоритет
Приоритет — это свойство, определенное для группы вычислений. Он указывает порядок объединения групп вычислений с базовой мерой при использовании SELECTEDMEASURE() в элементе вычисления.
Пример приоритета
Давайте посмотрим на простой пример. Эта модель имеет меру с указанным значением 10 и двумя группами вычислений, каждая из которых содержит один элемент вычисления. Мы будем применять элементы вычислений из обеих групп вычислений к метрике. Вот как мы настроим его:
'Measure group'[Measure] = 10
Первая группа вычислений — 'Calc Group 1 (Precedence 100)'
это и элемент вычисления:'Calc item (Plus 2)'
'Calc Group 1 (Precedence 100)'[Calc item (Plus 2)] = SELECTEDMEASURE() + 2
Вторая группа вычислений — 'Calc Group 2 (Precedence 200)'
, и элемент вычислений — 'Calc item (Times 2)'
:
'Calc Group 2 (Precedence 200)'[Calc item (Times 2)] = SELECTEDMEASURE() * 2
Вы увидите, что группа вычислений 1 имеет значение приоритета 100, а группа вычислений 2 имеет значение приоритета 200.
С помощью SQL Server Management Studio (SSMS) или внешнего средства с функциями чтения и записи XMLA , например табличного редактора с открытым исходным кодом, можно использовать скрипты XMLA для создания групп вычислений и задания значений приоритета. Здесь мы добавим "Calc group 1 (Precedence 100)"
:
{
"createOrReplace": {
"object": {
"database": "CHANGE TO YOUR DATASET NAME",
"table": "Calc group 1 (Precedence 100)"
},
"table": {
"name": "Calc group 1 (Precedence 100)",
"calculationGroup": {
"precedence": 100,
"calculationItems": [
{
"name": "Calc item (Plus 2)",
"expression": "SELECTEDMEASURE() + 2",
}
]
},
"columns": [
{
"name": "Calc group 1 (Precedence 100)",
"dataType": "string",
"sourceColumn": "Name",
"sortByColumn": "Ordinal",
"summarizeBy": "none",
"annotations": [
{
"name": "SummarizationSetBy",
"value": "Automatic"
}
]
},
{
"name": "Ordinal",
"dataType": "int64",
"isHidden": true,
"sourceColumn": "Ordinal",
"summarizeBy": "sum",
"annotations": [
{
"name": "SummarizationSetBy",
"value": "Automatic"
}
]
}
],
"partitions": [
{
"name": "Partition",
"mode": "import",
"source": {
"type": "calculationGroup"
}
}
]
}
}
}
И этот скрипт добавляет "Calc group 2 (Precedence 200)"
:
{
"createOrReplace": {
"object": {
"database": "CHANGE TO YOUR DATASET NAME",
"table": "Calc group 2 (Precedence 200)"
},
"table": {
"name": "Calc group 2 (Precedence 200)",
"calculationGroup": {
"precedence": 200,
"calculationItems": [
{
"name": "Calc item (Times 2)",
"expression": "SELECTEDMEASURE() * 2"
}
]
},
"columns": [
{
"name": "Calc group 2 (Precedence 200)",
"dataType": "string",
"sourceColumn": "Name",
"sortByColumn": "Ordinal",
"summarizeBy": "none",
"annotations": [
{
"name": "SummarizationSetBy",
"value": "Automatic"
}
]
},
{
"name": "Ordinal",
"dataType": "int64",
"isHidden": true,
"sourceColumn": "Ordinal",
"summarizeBy": "sum",
"annotations": [
{
"name": "SummarizationSetBy",
"value": "Automatic"
}
]
}
],
"partitions": [
{
"name": "Partition",
"mode": "import",
"source": {
"type": "calculationGroup"
}
}
]
}
}
}
В Power BI Desktop у нас есть визуальный элемент карточки, отображающий метрику, и срез для каждой из групп расчётов в представлении отчета.
При выборе обоих срезов необходимо объединить выражения DAX. Для этого мы начнем с самого высокого приоритета элемента вычисления, 200, а затем замените аргумент SELECTEDMEASURE() следующим самым высоким, 100.
Таким образом, выражение DAX для элемента вычисления с самым высоким приоритетом:
SELECTEDMEASURE() * 2
И выражение DAX элемента вычисления второй по высоте приоритетности:
SELECTEDMEASURE() + 2
Теперь они объединяются, заменив часть SELECTEDMEASURE() элемента вычисления с наивысшим приоритетом на следующий элемент вычисления с наивысшим приоритетом, как показано ниже:
( SELECTEDMEASURE() + 2 ) * 2
Затем, если есть больше элементов вычисления, мы продолжаем, пока не доберемся до исходного показателя. В этой модели существует только две группы вычислений, поэтому теперь мы заменим параметр SELECTEDMEASURE() самой мерой, как показано ниже.
( ( [Measure] ) + 2 ) * 2
Как и наш Measure = 10, это то же самое, что:
( ( 10 ) + 2 ) * 2
Если аргументов SELECTEDMEASURE() больше нет, вычисляется объединенное выражение DAX:
( ( 10 ) + 2 ) * 2 = 24
В Power BI Desktop, при применении обеих групп вычислений с фильтром, результаты меры выглядят следующим образом:
Но помните, что сочетание вложено таким образом, чтобы выходные данные не были 10 + 2 * 2 = 14, как вы видите здесь:
Для простых преобразований оценка идет от более низкого к более высокому приоритету. Число 10 увеличивается на 2, а затем умножается на 2. В DAX существуют такие функции, как CALCULATE, которые применяют фильтры или изменения контекста к внутренним выражениям. В этом случае более высокий приоритет изменяет выражение более низкого приоритета.
Приоритет также определяет, какая строка динамического формата применяется к объединенному выражению DAX для каждой меры. Строка динамического формата группы вычислений с наибольшим приоритетом — единственная, которая применяется. Если сама мера имеет строку динамического формата, она считается более низкой приоритетом для любой группы вычислений в модели.
Пример с очередностью средних значений
Рассмотрим другой пример использования той же модели, что и в примере аналитики времени, описанном ранее в этой статье. Но на этот раз добавим группу вычислений Averages . Группа расчёта средних значений содержит средние вычисления, которые не зависят от традиционных временных функций анализа, так как они не изменяют контекст фильтра дат - они просто применяют средние вычисления в рамках этого контекста.
В этом примере определяется ежедневный средний расчет. Расчеты, такие как средние баррели нефти в день, распространены в нефтяных и газовых приложениях. Другие распространенные бизнес-примеры включают средний показатель продаж магазина в розничной торговле.
Хотя такие вычисления вычисляются независимо от вычислений аналитики времени, может потребоваться объединить их. Например, пользователю может потребоваться увидеть баррели нефти в день YTD, чтобы просмотреть ежедневную ставку нефти с начала года до текущей даты. В этом сценарии приоритет должен быть задан для элементов вычисления.
Наши предположения:
Имя таблицы — Averages.
Имя столбца — среднее вычисление.
Приоритет равен 10.
Расчетные элементы для средних значений
Нет среднего
SELECTEDMEASURE()
Среднесуточное значение
DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))
Ниже приведен пример запроса DAX и возвращаемой таблицы:
Средний запрос
EVALUATE
CALCULATETABLE (
SUMMARIZECOLUMNS (
DimDate[CalendarYear],
DimDate[EnglishMonthName],
"Sales", CALCULATE (
[Sales],
'Time Intelligence'[Time Calculation] = "Current",
'Averages'[Average Calculation] = "No Average"
),
"YTD", CALCULATE (
[Sales],
'Time Intelligence'[Time Calculation] = "YTD",
'Averages'[Average Calculation] = "No Average"
),
"Daily Average", CALCULATE (
[Sales],
'Time Intelligence'[Time Calculation] = "Current",
'Averages'[Average Calculation] = "Daily Average"
),
"YTD Daily Average", CALCULATE (
[Sales],
'Time Intelligence'[Time Calculation] = "YTD",
'Averages'[Average Calculation] = "Daily Average"
)
),
DimDate[CalendarYear] = 2012
)
Среднее значение результатов запроса
В следующей таблице показано, как вычисляются значения марта 2012 года.
Имя столбца | Расчет |
---|---|
С начала года | Сумма продаж за январь, февраль 2012 г. = 495 364 + 506 994 + 373 483 |
Среднесуточный | Продажи за март 2012 г. разделены на число дней в марте = 373 483 / 31 |
Среднее за день с начала года | YTD за март 2012 года разделен на # дней в январе, феврале и Мар = 1,375,841 / (31 + 29 + 31) |
Ниже приведено определение элемента вычисления YTD, применяемого с приоритетом 20.
CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date]))
Ниже приведена ежедневная средняя, применяемая с приоритетом 10.
DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))
Так как приоритет группы вычислений аналитики времени выше, чем в группе вычислений "Среднее значение", он применяется максимально широко. Вычисление YTD Daily Average применяется как к числителю, так и к знаменателю (количество дней) формулы ежедневного среднего.
Это эквивалентно следующему выражению:
CALCULATE(DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate)), DATESYTD(DimDate[Date]))
Не это выражение:
DIVIDE(CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date])), COUNTROWS(DimDate)))
Боковая рекурсия
В приведенном выше примере аналитики времени некоторые элементы вычисления относятся к другим в той же группе вычислений. Это называется боковой рекурсией. Например, YOY% ссылается на YOY и PY.
DIVIDE(
CALCULATE(
SELECTEDMEASURE(),
'Time Intelligence'[Time Calculation]="YOY"
),
CALCULATE(
SELECTEDMEASURE(),
'Time Intelligence'[Time Calculation]="PY"
)
)
В этом случае оба выражения вычисляются отдельно, так как они используют разные операторы вычисления. Другие типы рекурсии не поддерживаются.
Один элемент вычисления в контексте фильтра
В нашем примере аналитики времени элемент вычисления PY YTD имеет одно выражение вычисления:
CALCULATE(
SELECTEDMEASURE(),
SAMEPERIODLASTYEAR(DimDate[Date]),
'Time Intelligence'[Time Calculation] = "YTD"
)
Аргумент YTD функции CALCULATE() переопределяет контекст фильтра для повторного использования логики, уже определенной в элементе вычисления YTD. Невозможно применить как PY, так и YTD в одной оценке. Группы вычислений применяются только в том случае, если один элемент вычисления из группы вычислений находится в контексте фильтра.
Заказ
По умолчанию, когда столбец из группы вычислений помещается в отчет, элементы вычисления упорядочены в алфавитном порядке по имени. Порядок, в котором элементы вычисления отображаются в отчете, можно изменить, указав порядковое свойство. Указание порядка элементов вычисления с помощью свойства Ordinal не изменяет порядок, в котором оцениваются элементы вычисления. Он также не изменяет порядок отображения элементов вычисления в обозревателе табличных моделей.
Чтобы указать порядковое свойство для элементов вычисления, необходимо добавить второй столбец в группу вычислений. В отличие от столбца по умолчанию, в котором используется тип данных Text, второй столбец, используемый для упорядочивания элементов вычисления, имеет тип данных целого числа. Единственной целью этого столбца является указание числового порядка, в котором отображаются элементы вычисления в группе вычислений. Так как этот столбец не содержит значения в отчете, рекомендуется задать для свойства Hidden значение True.
После добавления второго столбца в группу вычислений можно указать значение порядкового свойства для элементов вычислений, которые нужно упорядочить.
Дополнительные сведения см. в разделе "Порядок элементов вычисления".
Создание группы вычислений
Группы вычислений поддерживаются в Visual Studio с обновлением Analysis Services Projects VSIX версии 2.9.2 и более поздних. Группы вычислений также можно создавать с помощью языка скриптов табличной модели (TMSL) или табличного редактора с открытым исходным кодом.
Создание группы вычислений с помощью Visual Studio
В обозревателе табличных моделей щелкните правой кнопкой мыши группы вычислений и выберите команду "Создать группу вычислений". По умолчанию новая группа вычислений имеет один столбец и один элемент вычисления.
Используйте свойства , чтобы изменить имя и ввести описание для группы вычислений, столбца и элемента вычисления по умолчанию.
Чтобы ввести выражение формулы DAX для элемента вычисления по умолчанию, щелкните правой кнопкой мыши и выберите команду "Изменить формулу ", чтобы открыть редактор DAX. Введите допустимое выражение.
Чтобы добавить дополнительные элементы вычисления, щелкните правой кнопкой мыши пункт "Элементы вычисления" и выберите пункт "Создать элемент вычисления".
Заказать элементы вычислений
В обозревателе табличных моделей щелкните правой кнопкой мыши группу вычислений и нажмите кнопку "Добавить столбец".
Присвойте столбцу порядковый номер (или что-то подобное), введите описание, а затем задайте для свойства Hidden значение True.
Для каждого элемента вычисления, который требуется упорядочить, задайте порядковое свойство положительным числом. Каждое число идет последовательно, например, элемент вычисления с порядковым свойством 1 отображается первым, свойство 2 отображается вторым и так далее. Элементы вычислений с -1 по умолчанию не включаются в порядок, но отображаются перед упорядоченными элементами в отчете.
Соображения
Как только группа вычислений добавляется в семантику модели, отчеты Power BI будут использовать вариантный тип данных для всех мер. Если после этого все группы вычислений удаляются из модели, меры будут возвращены в исходные типы данных снова.
Ограничения
Безопасность на уровне объекта (OLS), определенная в таблицах групп вычислений, не поддерживается. Однако OLS можно определить в других таблицах в той же модели. Если элемент вычисления ссылается на защищенный объект OLS, возвращается универсальная ошибка.
Безопасность на уровне строк (RLS) не поддерживается. Определите RLS в таблицах в той же модели, но не определяйте их для самих групп вычислений (ни прямо, ни косвенно).
Выражения подробных строк не поддерживаются с группами вычислений.
Визуальные элементы интеллектуального повествования в Power BI не поддерживаются с группами вычислений.
Неявные агрегаты столбцов в Power BI не поддерживаются для моделей с группами вычислений. В настоящее время, если свойство DiscourageImplicitMeasures имеет значение false (по умолчанию), отображаются параметры агрегирования, однако они не могут быть применены. Если DiscourageImplicitMeasures имеет значение true, параметры агрегирования не отображаются.
При создании отчетов Power BI с помощью LiveConnection строки динамического формата не применяются к мерам уровня отчета.