Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Recupera dados de um cubo especificado.
Syntax
[ WITH <SELECT WITH clause>
[ , <SELECT WITH clause>...n ]
]
SELECT
[ *
| ( <SELECT query axis clause>
[ , <SELECT query axis clause>,...n ]
)
]
FROM
<SELECT subcube clause>
[ <SELECT slicer axis clause> ]
[ <SELECT cell property list clause> ]
<SELECT WITH clause> ::=
( CELL CALCULATION <CREATE CELL CALCULATION body clause> )
| ( [ CALCULATED ] MEMBER <CREATE MEMBER body clause>)
| ( SET <CREATE SET body clause>)
| ( MEASURE = <measure body clause> )
<SELECT query axis clause> ::=
[ NON EMPTY ] Set_Expression
[ <SELECT dimension property list clause> ]
ON
Integer_Expression
| AXIS(Integer)
| COLUMNS
| ROWS
| PAGES
| SECTIONS
| CHAPTERS
<SELECT subcube clause> ::=
Cube_Name
| [NON VISUAL] (SELECT
[ *
| ( <SELECT query axis clause> [ ,
<SELECT query axis clause>,...n ] )
]
FROM
<SELECT subcube clause>
<SELECT slicer axis clause> )
<SELECT slicer axis clause> ::=
WHERE Tuple_Expression
<SELECT cell property list clause> ::=
[ CELL ] PROPERTIES CellProperty_Name
[ , CellProperty_Name,...n ]
<SELECT dimension property list clause> ::=
[DIMENSION] PROPERTIES
(DimensionProperty_Name
[,DimensionProperty_Name,...n ] )
| (LevelProperty_Name
[, LevelProperty_Name,...n ] )
| (MemberProperty_Name
[, MemberProperty_Name,...n ] )
Arguments
Set_Expression
Uma expressão válida de Expressões Multidimensionais (MDX) que devolve um conjunto.
Inteiro
Um inteiro entre 0 e 127.
Cube_Name
Uma cadeia válida que fornece um nome de cubo.
Tuple_Expression
Uma expressão válida de Expressões Multidimensionais (MDX) que devolve uma tupla.
CellProperty_Name
Uma cadeia válida que representa uma propriedade de célula.
DimensionProperty_Name
Uma cadeia válida que representa uma propriedade de dimensão.
LevelProperty_Name
Uma cadeia válida que representa uma propriedade de nível.
MemberProperty_Name
Uma cadeia válida que representa uma propriedade de membro.
Observações
A <SELECT slicer axis clause> expressão deve conter membros em dimensões e hierarquias diferentes das referenciadas nas expressões especificadas <SELECT query axis clause> .
Se um atributo no cubo for omitido das expressões especificadas <SELECT query axis clause> e do <SELECT slicer axis clause> valor, o membro padrão do atributo é implicitamente adicionado ao eixo do slic.
A opção NON VISUAL na instrução subselect permite-lhe filtrar membros mantendo os totais verdadeiros em vez dos totais filtrados. Isto permite-lhe consultar as dez maiores vendas (pessoas/produtos/regiões) e obter o total real de vendas de todos os membros consultados, em vez do valor total das vendas dos dez primeiros devolvidos. Consulte os exemplos abaixo para mais informações.
Os membros calculados podem ser incluídos na <cláusula> do eixo de consulta SELECT sempre que a ligação foi aberta usando as subconsultas do parâmetro cadeia de ligação subqueries=1; veja Propriedades XMLA Suportadas (XMLA) e ConnectionString para a utilização dos parâmetros. Um exemplo é fornecido sobre membros calculados em subseleções.
Autoexiste
Quando dois ou mais atributos da dimensão são usados numa instrução SELECT, o Analysis Services avalia as expressões dos atributos para garantir que os membros desses atributos estão devidamente confinados para cumprir os critérios de todos os outros atributos. Por exemplo, suponha que está a trabalhar com atributos da dimensão Geografia. Se tiveres uma expressão que devolve todos os membros do atributo Cidade, e outra expressão que confina os membros do atributo País a todos os países/regiões da Europa, isso fará com que os membros da Cidade fiquem confinados apenas às cidades que pertencem a países/regiões da Europa. Esta característica dos Serviços de Análise chama-se Autoexiste e aplica-se apenas a atributos na mesma dimensão. Autoexiste aplica-se apenas a atributos da mesma dimensão porque tenta impedir que os registos de dimensão excluídos numa expressão de atributo sejam incluídos pelas outras expressões de atributo. Os autoexists também podem ser entendidos como a interseção resultante das diferentes expressões de atributos nos registos de dimensão. Veja os seguintes exemplos abaixo:
//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]
O conjunto de resultados obtido é:
| Nome do Modelo + Medidas | Valor das Vendas do Revendedor | Montante do Desconto | Desconto PCT |
|---|---|---|---|
| Mountain-200 | $14.356.699,36 | $19.012,71 | 0,13% |
| Estrada-250 | $9.377.457,68 | $4.032,47 | 0,04% |
| Mountain-100 | $8.568.958,27 | $139.393,27 | 1,63% |
| Estrada-650 | $7.442.141,81 | $39.698,30 | 0,53% |
| Touring-1000 | $6.723.794,29 | $166.144,17 | 2,47% |
| Road-550-W | $3.668.383,88 | $1.901,97 | 0,05% |
| Estrada-350-W | $3.665.932,31 | $20.946,50 | 0,57% |
| Estrutura de Montanha HL | $3.365.069,27 | $174,11 | 0,01% |
| Estrada-150 | $2.363.805,16 | $0,00 | 0,00% |
| Touring-3000 | $2.046.508,26 | $79.582,15 | 3,89% |
O conjunto obtido de produtos parece ser o mesmo do Preferred10Products; Portanto, verificando o conjunto 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]
De acordo com os resultados seguintes, ambos os conjuntos (Top10VendingProducts, Preferred10Products) são iguais
| Nome do Modelo + Medidas | Valor das Vendas do Revendedor | Montante do Desconto | Desconto PCT |
|---|---|---|---|
| Mountain-200 | $14.356.699,36 | $19.012,71 | 0,13% |
| Estrada-250 | $9.377.457,68 | $4.032,47 | 0,04% |
| Mountain-100 | $8.568.958,27 | $139.393,27 | 1,63% |
| Estrada-650 | $7.442.141,81 | $39.698,30 | 0,53% |
| Touring-1000 | $6.723.794,29 | $166.144,17 | 2,47% |
| Road-550-W | $3.668.383,88 | $1.901,97 | 0,05% |
| Estrada-350-W | $3.665.932,31 | $20.946,50 | 0,57% |
| Estrutura de Montanha HL | $3.365.069,27 | $174,11 | 0,01% |
| Estrada-150 | $2.363.805,16 | $0,00 | 0,00% |
| Touring-3000 | $2.046.508,26 | $79.582,15 | 3,89% |
Nos exemplos anteriores criámos dois conjuntos: um como expressão calculada e outro como expressão constante. Estes exemplos ilustram as diferentes variantes de Autoexists.
Os autoexists podem ser aplicados de forma profunda ou superficial às expressões. A definição padrão é profunda. O exemplo seguinte irá ilustrar o conceito de deep Autoexists. No exemplo, estamos a filtrar o Top10SellingProducts pelo atributo [Linha de Produtos] para aqueles no grupo [Montanha]. Note que ambos os atributos (fatiador e eixo) pertencem à mesma dimensão, [Produto].
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]
Produz o seguinte conjunto de resultados:
| Nome do Modelo + Medidas | Valor das Vendas do Revendedor | Montante do Desconto | Desconto PCT |
|---|---|---|---|
| Mountain-200 | $14.356.699,36 | $19.012,71 | 0,13% |
| Mountain-100 | $8.568.958,27 | $139.393,27 | 1,63% |
| Estrutura de Montanha HL | $3.365.069,27 | $174,11 | 0,01% |
| Mountain-300 | $1.907.249,38 | $876,95 | 0,05% |
| Mountain-500 | $1.067.327,31 | $17.266,09 | 1,62% |
| Mountain-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% |
| Calções de Montanha Femininos | $260.304,09 | $6.675,56 | 2,56% |
No conjunto de resultados anterior, temos sete recém-chegados à lista dos Top10VendingProducts e Mountain-200, Mountain-100 e HL Mountain Frame subiram para o topo da lista. No conjunto de resultados anterior, esses três valores estavam intercalados
Isto chama-se Deep Autoexists, porque o conjunto Top10SellingProducts é avaliado para cumprir as condições de segmentação da consulta. Deep Autoexists significa que todas as expressões serão avaliadas para atingir o espaço mais profundo possível após aplicar as expressões do slicer, as expressões de subseleção no eixo, e assim sucessivamente.
No entanto, pode ser necessário fazer a análise sobre o Top10VendingProducts como equivalente ao Preferred10Products, como no seguinte exemplo:
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]
Produz o seguinte conjunto de resultados:
| Nome do Modelo + Medidas | Valor das Vendas do Revendedor | Montante do Desconto | Desconto PCT |
|---|---|---|---|
| Mountain-200 | $14.356.699,36 | $19.012,71 | 0,13% |
| Mountain-100 | $8.568.958,27 | $139.393,27 | 1,63% |
| Estrutura de Montanha HL | $3.365.069,27 | $174,11 | 0,01% |
Nos resultados acima, a segmentação resulta em um conjunto que contém apenas os produtos da Preferred10Products que pertencem ao grupo [Mountain] em [Produto].[Linha de Produtos], como era esperado, pois a Preferred10Products é uma expressão constante.
Este conjunto de resultados também é entendido como autoexistência superficial. Isto acontece porque a expressão é avaliada antes da cláusula de fatiamento. No exemplo anterior, a expressão era uma expressão constante para fins ilustrativos, de modo a introduzir o conceito.
O comportamento do Autoexists pode ser modificado ao nível da sessão usando a propriedade da cadeia de ligação Autoexists . O exemplo seguinte começa por abrir uma nova sessão e adicionar a propriedade Autoexists=3 à cadeia de ligação. Tens de abrir uma nova ligação para fazer o exemplo. Uma vez estabelecida a ligação com a configuração Autoexist, ela permanecerá ativa até essa ligação terminar.
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]
O conjunto de resultados seguinte mostra agora o comportamento superficial do Autoexists.
| Nome do Modelo + Medidas | Valor das Vendas do Revendedor | Montante do Desconto | Desconto PCT |
|---|---|---|---|
| Mountain-200 | $14.356.699,36 | $19.012,71 | 0,13% |
| Mountain-100 | $8.568.958,27 | $139.393,27 | 1,63% |
| Estrutura de Montanha HL | $3.365.069,27 | $174,11 | 0,01% |
O comportamento do Autoexists pode ser modificado usando o parâmetro AUTOEXISTS=[1|2|3] na cadeia de ligação; ver Propriedades XMLA Suportadas (XMLA) e ConnectionString para a utilização de parâmetros.
Examples
O exemplo seguinte devolve a soma dos Measures.[Order Quantity] membros, agregados nos primeiros oito meses do ano civil de 2003 contidos na Date dimensão, do cubo Adventure Works .
WITH MEMBER [Date].[Calendar].[First8Months2003] AS
Aggregate(
PeriodsToDate(
[Date].[Calendar].[Calendar Year],
[Date].[Calendar].[Month].[August 2003]
)
)
SELECT
[Date].[Calendar].[First8Months2003] ON COLUMNS,
[Product].[Category].Children ON ROWS
FROM
[Adventure Works]
WHERE
[Measures].[Order Quantity]
Para compreender NÃO VISUAL, o exemplo seguinte é uma consulta a [Adventure Works] para obter valores de [Valor de Vendas de Revendedor] numa tabela onde as categorias de produto são as colunas e os tipos de negócio de revendedor são as linhas. Note que os totais são dados tanto para produtos como para revendedores.
A seguinte declaração SELECT:
select [Category].members on 0,
[Business Type].members on 1
from [Adventure Works]
where [Measures].[Reseller Sales Amount]
Produz os seguintes resultados:
| Tipo de Negócio + Categoria | Todos os Produtos | Acessórios | Bikes | Vestuário | Componentes |
|---|---|---|---|---|---|
| Todos os Revendedores | $80.450.596,98 | $571.297,93 | $66.302.381,56 | $1.777.840,84 | $11.799.076,66 |
| Loja de Bicicletas Especializada | $6.756.166,18 | $65.125,48 | $6.080.117,73 | $252.933,91 | $357.989,07 |
| Revendedor de Valor Acrescentado | $34.967.517,33 | $175.002,81 | $30.892.354,33 | $592.385,71 | $3.307.774,48 |
| Warehouse | $38.726.913,48 | $331.169,64 | $29.329.909,50 | $932.521,23 | $8.133.313,11 |
Para produzir uma tabela com dados apenas para os produtos Acessórios e Vestuário, os revendedores de Valor Acrescentado e do Armazén, mantendo os totais globais, poderiam ser escritos da seguinte forma usando NÃO VISUAL:
select [Category].members on 0,
[Business Type].members on 1
from NON VISUAL (Select {[Category].Accessories, [Category].Clothing} on 0,
{[Business Type].[Value Added Reseller], [Business Type].[Warehouse]} on 1
from [Adventure Works])
where [Measures].[Reseller Sales Amount]
Produz os seguintes resultados:
| Tipo de Negócio + Categoria | Todos os Produtos | Acessórios | Vestuário |
|---|---|---|---|
| Todos os Revendedores | $80.450.596,98 | $571.297,93 | $1.777.840,84 |
| Revendedor de Valor Acrescentado | $34.967.517,33 | $175.002,81 | $592.385,71 |
| Warehouse | $38.726.913,48 | $331.169,64 | $932.521,23 |
Para produzir uma tabela que totaliza visualmente as colunas, mas que para totais de linhas traz o total verdadeiro de todas as [Categoria], deve ser feita a seguinte consulta:
select [Category].members on 0,
[Business Type].members on 1
from NON VISUAL (Select {[Category].Accessories, [Category].Clothing} on 0
from ( Select {[Business Type].[Value Added Reseller], [Business Type].[Warehouse]} on 0
from [Adventure Works])
)
where [Measures].[Reseller Sales Amount]
Observe como NÃO VISUAL é aplicado apenas a [Categoria].
A consulta acima produz os seguintes resultados:
| Tipo de Negócio + Categoria | Todos os Produtos | Acessórios | Vestuário |
|---|---|---|---|
| Todos os Revendedores | $73.694.430,80 | $506.172,45 | $1.524.906,93 |
| Revendedor de Valor Acrescentado | $34.967.517,33 | $175.002,81 | $592.385,71 |
| Armazém | $38.726.913,48 | $331.169,64 | $932.521,23 |
Quando comparado com os resultados anteriores, pode observar que a linha [Todos os Revendedores] agora soma os valores exibidos para [Revendedor de Valor Acrescentado] e [Armazém], mas que a coluna [Todos os Produtos] mostra o valor total de todos os produtos, incluindo aqueles que não são exibidos.
O exemplo seguinte demonstra como usar elementos calculados em subseleções para filtrar sobre eles. Para conseguir reproduzir esta amostra, a ligação deve ser estabelecida usando o parâmetro cadeia de ligação subqueries=1.
select Measures.allmembers on 0
from (
Select { [Measures].[Reseller Sales Amount]
, [Measures].[Reseller Total Product Cost]
, [Measures].[Reseller Gross Profit]
, [Measures].[Reseller Gross Profit Margin]
} on 0
from [Adventure Works]
)
A consulta acima produz os seguintes resultados:
| Valor das Vendas do Revendedor | Revendedor Custo Total do Produto | Lucro Bruto do Revendedor | Margem de Lucro Bruto dos Revendedores |
|---|---|---|---|
| $80,450,596.98 | $79.980.114,38 | $470.482,60 | 0,58% |