Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:
SQL Server Analysis Services
Azure Analysis Services
Fabric/Power BI Premium
Концепция автотекстов ограничивает пространство куба теми ячейками, которые фактически существуют в кубе в контрпозиции, к тем, которые могут существовать в результате создания всех возможных сочетаний элементов иерархии атрибутов из одной иерархии. Это связано с тем, что элементы одной иерархии атрибутов не могут существовать с элементами другой иерархии атрибутов в том же измерении. Если в инструкции SELECT используются два или более иерархий атрибутов одного измерения, службы Analysis Services вычисляют выражения атрибутов, чтобы убедиться, что члены этих атрибутов должным образом ограничены критериями всех остальных атрибутов.
Например, предположим, что вы работаете с атрибутами из географического измерения. Если у вас есть одно выражение, которое возвращает все члены из атрибута City и другое выражение, которое ограничивает членов атрибута Country для всех стран или регионов в Европе, это приведет к тому, что члены города ограничены только теми городами, которые принадлежат странам или регионам в Европе. Это связано с автоматической характеристикой служб Analysis Services. Автовключение применяется только к атрибутам из того же измерения, так как оно пытается предотвратить включение записей измерений, исключенных в одном выражении атрибута, другими выражениями атрибута. Автосуществование также можно рассматривать как пересечение выражений различных атрибутов по строкам измерений.
Существование ячейки
Следующие ячейки всегда существуют:
Член (все) каждой иерархии при пересечении с элементами других иерархий в одном измерении.
Вычисляемые члены, пересекающиеся со своими невычисляемыми братьями и сестрами, или с родителями и потомками этих невычисляемых братьев и сестер.
Предоставление не существующих ячеек
Несуществующую ячейку представляет собой ячейку, предоставляемую системой в качестве ответа на запрос или вычисление, запрашивающее ячейку, которая не существует в кубе. Например, если у вас есть куб с иерархией атрибутов City и иерархией атрибутов Country, принадлежащие измерению Geography, а также мера "Объем продаж в Интернете", пространство этого куба включает только те элементы, которые существуют друг с другом. Например, если иерархия атрибутов City включает города Нью-Йорк, Лондон, Париж, Токио и Мельбурн; и иерархия атрибутов Country включает страны и регионы США, Соединенное Королевство, Франция, Япония и Австралия; затем пространство куба не включает пространство (ячейку) на пересечении Парижа и Соединенных Штатов.
При запросе ячеек, которые не существуют, не существующие ячейки возвращают значения NULL; То есть они не могут содержать вычисления и не могут определять вычисления, записываемые в это пространство. Например, следующая инструкция содержит ячейки, которые не существуют.
SELECT [Customer].[Gender].[Gender].Members ON COLUMNS,
{[Customer].[Customer].[Aaron A. Allen]
,[Customer].[Customer].[Abigail Clark]} ON ROWS
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
Замечание
Этот запрос использует функцию Members (Set) (многомерные выражения) для возврата набора элементов иерархии атрибутов "Пол" на оси столбцов и пересекает этот набор с указанным набором элементов из иерархии атрибутов Customer на оси строк.
При выполнении предыдущего запроса ячейка на пересечении Aaron A. Allen и Female отображает значение NULL. Аналогичным образом, ячейка на пересечении Абигила Кларка и Мужчины отображает значение NULL. Эти ячейки не существуют и не могут содержать значение, но ячейки, которые не существуют, могут отображаться в результате, возвращаемом запросом.
При использовании функции Кросссоединения (МНОГОМЕРНЫЕ выражения) для возврата между продуктами иерархии атрибутов из иерархий атрибутов в том же измерении автоматически существует ограничение этих кортежей, возвращаемых набору кортежей, которые на самом деле существуют, а не возвращать полный декартовый продукт. Например, запустите и проверьте результаты выполнения следующего запроса.
SELECT CROSSJOIN
(
{[Customer].[Country].[United States]},
[Customer].[State-Province].Members
) ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
Замечание
Обратите внимание, что 0 используется для обозначения оси столбца, которая является сокращенной для оси (0) — то есть оси столбцов.
Предыдущий запрос возвращает ячейки только для элементов из каждой иерархии атрибутов в запросе, который существует друг с другом. Предыдущий запрос также можно записать с помощью нового варианта * функции * (Crossjoin) (многомерные выражения).
SELECT
[Customer].[Country].[United States] *
[Customer].[State-Province].Members
ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
Предыдущий запрос также можно записать следующим образом:
SELECT [Customer].[State-Province].Members
ON 0
FROM [Adventure Works]
WHERE (Measures.[Internet Sales Amount],
[Customer].[Country].[United States])
Возвращаемые значения ячеек будут идентичными, хотя метаданные в результирующем наборе будут отличаться. Например, при предыдущем запросе иерархия "Страна" была перемещена на ось среза (в предложении WHERE) и поэтому не отображается явно в результирующем наборе.
Каждый из этих трех предыдущих запросов демонстрирует влияние автоматического поведения в SQL Server SQL Server Analysis Services.
Глубокие и мелкие автотексты
Автоматические выражения можно применять к выражениям как Deep или Shallow. Deep Autoexists означает, что все выражения будут оценены для достижения максимально возможного уровня глубины после применения выражений среза, вложенных выражений на оси и т. д. Неглубокие автоэкспрессии означает, что внешние выражения вычисляются перед текущим выражением и эти результаты передаются текущему выражению. Настройка по умолчанию — это глубокий автоэкзист.
Следующий сценарий и примеры помогут проиллюстрировать различные типы Autoexistss. В следующих примерах будут созданы два набора: один как вычисляемое выражение, а другой — как константное выражение.
//Obtain the Top 10 best reseller selling products by Name
with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'
set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'
set Preferred10Products as '
{[Product].[Model Name].&[Mountain-200],
[Product].[Model Name].&[Road-250],
[Product].[Model Name].&[Mountain-100],
[Product].[Model Name].&[Road-650],
[Product].[Model Name].&[Touring-1000],
[Product].[Model Name].&[Road-550-W],
[Product].[Model Name].&[Road-350-W],
[Product].[Model Name].&[HL Mountain Frame],
[Product].[Model Name].&[Road-150],
[Product].[Model Name].&[Touring-3000]
}'
select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,
Top10SellingProducts on 1
from [Adventure Works]
Полученный результирующий набор данных:
| Объем продаж реселлера | Сумма скидки | Скидка на PCT | |
|---|---|---|---|
| Mountain-200 | $14,356,699,36 | $19,012.71 | 0.13% |
| Дорога-250 | $9,377,457,68 | $ 4032.47 | 0.04% |
| Mountain-100 | $8,568,958,27 | $139,393,27 | 1.63% |
| Дорога-650 | $ 7,442,141.81 | $39,698.30 | 0.53% |
| Туринг-1000 | $6,723,794,29 | $166,144.17 | 2.47% |
| Road-550-W | $3668,383,88 | $ 1901.97 | 0.05% |
| Road-350-W | $3,665,932,31 | $20,946,50 | 0.57% |
| HL Mountain Frame | $3,365,069,27 | $174.11 | 0.01% |
| Дорога-150 | $2,363,805.16 | $0,00 | 0.00% |
| Туринг-3000 | $2046,508,26 | $79,582.15 | 3.89% |
Полученный набор продуктов, как представляется, совпадает с Preferred10Products; то есть проверьте набор Preferred10Products:
with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'
set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'
set Preferred10Products as '
{[Product].[Model Name].&[Mountain-200],
[Product].[Model Name].&[Road-250],
[Product].[Model Name].&[Mountain-100],
[Product].[Model Name].&[Road-650],
[Product].[Model Name].&[Touring-1000],
[Product].[Model Name].&[Road-550-W],
[Product].[Model Name].&[Road-350-W],
[Product].[Model Name].&[HL Mountain Frame],
[Product].[Model Name].&[Road-150],
[Product].[Model Name].&[Touring-3000]
}'
select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,
Preferred10Products on 1
from [Adventure Works]
В соответствии со следующими результатами оба набора (Top10SellingProducts, Preferred10Products) одинаковы
| Объем продаж реселлера | Сумма скидки | Скидка на PCT | |
|---|---|---|---|
| Mountain-200 | $14,356,699,36 | $19,012.71 | 0.13% |
| Дорога-250 | $9,377,457,68 | $ 4032.47 | 0.04% |
| Mountain-100 | $8,568,958,27 | $139,393,27 | 1.63% |
| Дорога-650 | $ 7,442,141.81 | $39,698.30 | 0.53% |
| Туринг-1000 | $6,723,794,29 | $166,144.17 | 2.47% |
| Road-550-W | $3668,383,88 | $ 1901.97 | 0.05% |
| Road-350-W | $3,665,932,31 | $20,946,50 | 0.57% |
| HL Mountain Frame | $3,365,069,27 | $174.11 | 0.01% |
| Дорога-150 | $2,363,805.16 | $0,00 | 0.00% |
| Туринг-3000 | $2046,508,26 | $79,582.15 | 3.89% |
В следующем примере продемонстрирована концепция глубоких Autoexists. В примере мы фильтруем Top10SellingProducts по атрибуту [Продукт].[Product Line] для тех, кто находится в группе [Mountain]. Обратите внимание, что оба атрибута (слайсер и ось) принадлежат одному и тому же измерению [Product].
with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'
set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'
// Preferred10Products set removed for clarity
select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,
Top10SellingProducts on 1
from [Adventure Works]
where [Product].[Product Line].[Mountain]
Создает следующий результирующий набор:
| Объем продаж реселлера | Сумма скидки | Скидка на PCT | |
|---|---|---|---|
| Mountain-200 | $14,356,699,36 | $19,012.71 | 0.13% |
| Mountain-100 | $8,568,958,27 | $139,393,27 | 1.63% |
| HL Mountain Frame | $3,365,069,27 | $174.11 | 0.01% |
| Mountain-300 | $1907,249,38 | $876,95 | 0.05% |
| Mountain-500 | $ 1067,327.31 | $17,266,09 | 1.62% |
| Маунтин-400-W | $592,450,05 | $303,49 | 0.05% |
| LL Mountain Frame | $521,864,42 | $252,41 | 0.05% |
| ML Mountain Frame-W | $482,953.16 | $206,95 | 0.04% |
| ML Mountain Frame | $343,785.29 | $161,82 | 0.05% |
| Женские горные шорты | $260,304.09 | $6675,56 | 2.56% |
В приведенном выше результирующем наборе у нас есть семь новичков в списке Top10SellingProducts, и Mountain-200, Mountain-100 и HL Mountain Frame переместились на вершину списка. В предыдущем результирующем наборе эти три значения были перемешаны.
Это называется Deep Autoexists, потому что набор Top10SellingProducts оценивается по условиям сегментации запроса. Глубокая автоэкзистенция означает, что все выражения будут оцениваться для достижения максимально возможной глубины пространства после применения выражений среза, подвыборок выражений на оси и так далее.
Однако может потребоваться выполнить анализ над Top10SellingProducts в качестве эквивалента Preferred10Products, как показано в следующем примере:
with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'
set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'
set Preferred10Products as '
{[Product].[Model Name].&[Mountain-200],
[Product].[Model Name].&[Road-250],
[Product].[Model Name].&[Mountain-100],
[Product].[Model Name].&[Road-650],
[Product].[Model Name].&[Touring-1000],
[Product].[Model Name].&[Road-550-W],
[Product].[Model Name].&[Road-350-W],
[Product].[Model Name].&[HL Mountain Frame],
[Product].[Model Name].&[Road-150],
[Product].[Model Name].&[Touring-3000]
}'
select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,
Preferred10Products on 1
from [Adventure Works]
where [Product].[Product Line].[Mountain]
Создает следующий результирующий набор:
| Объем продаж реселлера | Сумма скидки | Скидка на PCT | |
|---|---|---|---|
| Mountain-200 | $14,356,699,36 | $19,012.71 | 0.13% |
| Mountain-100 | $8,568,958,27 | $139,393,27 | 1.63% |
| HL Mountain Frame | $3,365,069,27 | $174.11 | 0.01% |
В приведенных выше результатах срез дает результат, содержащий только продукты из Preferred10Products, которые входят в группу [Mountain] в [Product].[Линия продуктов], как и ожидалось, так как Preferred10Products является константным выражением.
Этот результирующий набор также понимается как неглубокий автоэкзист. Это связано с тем, что выражение вычисляется перед предложением срезов. В предыдущем примере выражение было константным выражением для иллюстрации, чтобы представить концепцию.
Поведение autoexists можно изменить на сеансовом уровне, используя свойство строки подключения. В следующем примере начинается открытие нового сеанса и добавление свойства Autoexists=3 в строку подключения. Чтобы сделать пример, необходимо открыть новое подключение. После установления подключения с параметром "Autoexist" оно будет оставаться в силе до завершения этого подключения.
with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'
set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'
//Preferred10Products set removed for clarity
select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,
Top10SellingProducts on 1
from [Adventure Works]
where [Product].[Product Line].[Mountain]
Следующий результат теперь показывает поверхностное поведение Autoexists.
| Объем продаж реселлера | Сумма скидки | Скидка на PCT | |
|---|---|---|---|
| Mountain-200 | $14,356,699,36 | $19,012.71 | 0.13% |
| Mountain-100 | $8,568,958,27 | $139,393,27 | 1.63% |
| HL Mountain Frame | $3,365,069,27 | $174.11 | 0.01% |
Поведение AUTOEXISTS можно изменить с помощью параметра AUTOEXISTS=[1|2|3] в строке подключения; см. сведения о поддерживаемых свойствах XMLA (XMLA) и ConnectionString использование параметра.
См. также
Основные понятия в многомерных выражениях (службы Analysis Services)
Пространство куба
Кортежи
Работа с элементами, кортежами и наборами (многомерные выражения)
Итоги визуальных элементов и не визуальные итоги
Справочник по языку многомерных выражений (многомерные выражения)
Справочник по многомерным выражениям