Membro Calculado para o último filho em dimensões fora do tempo?

9

Em um cubo do SSAS, como criar medidas que são agregadas como LastChild para uma dimensão não temporal?

Os dados de origem têm muitas versões do mesmo registro comercial em um determinado dia. A dimensão de tempo tem uma granularidade de DATE, não segundos & amp; milissegundos.

Os registros de fatos têm um registro de data e hora e uma chave primária incremental (identidade). Com efeito, o que eu quero é calcular uma medida como sendo o último valor para todas as edições em uma determinada data.

As opções que vi até agora se enquadram em uma das duas categorias:

  • Produza uma dimensão de tempo que desce para segundos. Isso resultaria em uma dimensão de tempo muito grande e ineficiente.

OR

  • Ocultar as medidas e substituí-las por medidas calculadas que pesquisam o último valor de uma determinada data com base na chave primária. Isso é complicado e menos eficiente.

Existe um ponto ideal ou uma técnica alternativa para resolver este problema?

A hierarquia natural dos dados é:

  1. Chave comercial
  2. Registro de data e hora do registro (links para a dimensão TIME)
  3. Chave substituta
por Mark 14.11.2011 в 12:33
fonte

1 resposta

5

Não, você não pode criar um atributo latChild sem uma dimensão de tempo:

oquevocêpodefazerécriarumaconsultaemseuDSVparaforneceroúltimovalorfilhoeusá-loparacriarumgrupodemedidas.Exemplo:

Script:

createtabledim(idintnotnullprimarykey,namevarchar(50))insertintodimvalues(1,'one'),(2,'two')createtablefact(idintnotnullprimarykey,dimIdintnotnull,valuenumeric(12,3),constraintfk_fact_dimforeignkey(dimId)referencesdim(id))insertintofactvalues(1,1,5)insertintofactvalues(2,1,3)insertintofactvalues(3,2,10)insertintofactvalues(4,2,20)

scriptmuitosimplesquecriaumsombreadoeumatabeladefatos.Aquiestáumselectsimplesedepoisdoresultadoeuachoquevocêquer,então3e20seriamosúltimosvaloresbaseadosnoIDdaDimensão:

para construir é muito simples, basta clicar com o botão direito do mouse em seu DSV e adicionar uma nova consulta nomeada e informar a consulta para criar seu último valor. No meu caso é:

select dimId, 
(select top 1 value from fact where dimId=F.dimId order by id desc) as lastValue
from fact F
group by dimId 

crie uma chave primária lógica e vincule-a à tabela de dimensões:

enoseucubo,cliquecomobotãodireitoemqualqueráreaembranco,selecione"mostrar todas as tabelas" e adicione sua nova tabela.

E no seu cubo crie uma nova medida como "sem agregações" porque você já agregou sua consulta:

Resultado:

    
por Diego 27.05.2012 / 14:37
fonte