Estou configurando meu primeiro banco de dados dimensional com SSAS e tenho essa dimensão [Materials] que precisa de uma hierarquia mais ou menos assim:
[PriceCode v] --> nullable
Price Code
...
[Material v]
Code
AltCode
Name
...
[Id v] --> not actually exposed as a hierarchy level
DateInserted
DateUpdated
DateDeleted
EffectiveFrom
EffectiveTo
O problema é que o [PriceCode]
atributo pode ser anulado; o DSV tem um FK entre ae [Materials]
uma [PriceCodes]
tabela e [Materials].[PriceCodeId]
é anulável.
Existe uma maneira de ainda definir uma hierarquia em que um atributo anulável é um pai? Eu brinquei com UnkownMember e UnknownMemberName e a configuração NullProcessing da chave de atributo , mas não consegui processar a dimensão.
Pontos de bônus se alguém puder confirmar se estou abordando corretamente o problema da dimensão de mudança lenta, criando um nível de hierarquia com base nas chaves de negócios (ou seja, o Code
campo; a chave natural inclui o EffectiveTo
campo, que é null
para a imagem atual de um registro), e tratando os metadados SCD como um nível próprio.
Na verdade, você tem 2 perguntas em uma pergunta. Se você criar uma nova pergunta para os atributos, seria mais organizado e cortarei/colarei metade disso como resposta lá :)
Nível pai anulável
Você provavelmente não quer
NULL
s em suas dimensões OLAP, e Kimball parece concordar .Depende se você tem um
ETL
processo e um Data Warehouse ou não, como você deve lidar com eles, mas existem diferentes tipos de 'não encontrado'.Pense na diferença em uma chave estrangeira, uma tem um campo vazio, outra tem um campo preenchido, mas o registro relacionado não pode (ou não pode mais) ser encontrado. Gosto de diferenciar entre
BLANK
eDATA ERROR
na minha dimensão.No seu exemplo, você poderia diferenciar entre 'sem código de preço' e 'um código de preço que não consigo mais encontrar'
Se você tiver um
ETL
processo com um Data Warehouse, poderá lidar com isso facilmente em seuETL
processo; caso contrário, precisará de algumas instruções de caso em suas consultas DSV.Esta questão parece revelar problemas com o Data Warehouse subjacente. Existem argumentos a favor e contra os esquemas de estrela e floco de neve, mas pessoalmente eu tendo um esquema de estrela, com um pouco de floco de neve misturado quando necessário.
Em qualquer caso, a limpeza de dados e os links ausentes precisam ser resolvidos em seu Data Warehouse muito antes de você chegar ao dsv.
Atributos de dimensão de alteração lenta
Com relação ao seu
Slowly Changing Dimension
, não vejo como o tipo de dados de hierarquias ou chaves em sua dimensão mudaria porque a dimensão de alguma forma éSCD
, isso não importa. Você só precisa de uma regra de validade em algum lugar em seu ETL que seja selecionada por sua definição de dimensão SSAS ( veja aqui ). Mas, para qualquer umdimension key
que você criar, sugiro que você use uma chave substituta principalmente porque sua chave substituta pode ser umint
oubigint
em vez de um varchar e isso pode melhorar enormemente o desempenho , mesmo para chaves de atributo.É claro que essa chave numérica seria uma representação do 'atributo' e não incluiria necessariamente os campos de validade. A validade do registro é especificada no registro em sua tabela de dimensões, mas como você afirma não é necessário para suas chaves de atributo.
Por exemplo, estes podem ser seus dados de dimensão
Onde você pode escolher dimension_key para a chave do seu
key attribute
e pode escolher name ou name_key como a chave do seuname
atributo.Determinar se vale a pena o aborrecimento
name
depende de quantos membros seu atributo terá (e seu atributo de chave normalmente tem a maioria dos membros).No final, não há realmente nenhuma relação entre o fato de você ter um
SCD
e sua decisão de qual chave é uma boa escolha para seu atributo. Os requisitos do usuário final tomam essa decisão por você. Na dimensão de exemplo, você desejaria que todas as vendas por esteira fossem relatadas sob esteira e não tivesse 2 esteiras em seus membros quando os usuários relatassem isso.