Licitações da UE: um produto de BI de ponta a ponta
Dados públicos reais de licitações, levados até o fim: sistemas de origem incompatíveis, um Data Vault absorvendo a resolução de entidades, marts dimensionais e um modelo semântico que publica a própria cobertura e integridade ao lado dos números. Cada métrica é definida por escrito antes de existir qualquer DAX, e testes de regressão fixam cada uma em um contexto de filtro conhecido.
Ler o estudo de caso
Três números pareciam perfeitos e estavam errados. Encontrá-los é o trabalho de verdade; o pipeline que os produziu é commodity. Aqui está em que consistia cada defeito, como ele apareceu e o que os números finais ainda assim não conseguem dizer.
Uma proporção que só podia dar zero
A proporção de contratos-quadro foi medida a princípio sobre o valor certificado — o total que exclui as adjudicações reprovadas nas regras de qualidade da camada de dados. Toda adjudicação de contrato-quadro é reprovada por essas regras, porque o tratamento ambíguo do contrato-quadro é justamente o que impede certificar o valor. A métrica devolvia, portanto, 0% em qualquer contexto de filtro, de forma permanente, e aparecia como um zero limpo e confiante.
Medida sobre o total que inclui valores não verificados, onde as adjudicações de contrato-quadro de fato estão presentes, ela indica 45,7%. O defeito não estava no DAX, e sim na escolha da base — o tipo de erro que nenhuma verificação de sintaxe enxerga.
Um total orçamentário que somava receita com despesa
O arquivo do orçamento federal alemão contém as duas metades do orçamento. Um orçamento fecha em equilíbrio, então somar todas as linhas devolve praticamente o dobro: € 993 bi contra um Bundeshaushalt de 2022 efetivo de € 495,8 bi — um número que pareceria perfeitamente plausível num cartão.
O primeiro dígito do código do Gruppierungsplan separa as duas: os grupos 0–3 são receita e financiamento, os grupos 4–9 são despesa. Cada metade agora reconcilia em € 495,79 bi no exercício de 2022, batendo com o orçamento publicado. A classificação começou como coluna calculada no modelo semântico e desde então passou para o warehouse, onde é derivada da origem e todo consumidor a herda em vez de deduzi-la de novo.
Uma taxa que dividia um recorte por outro
A proporção de contratos-quadro filtra a mesma coluna pela qual quem lê também pode filtrar. Sem KEEPFILTERS, o filtro interno da métrica substitui o filtro de quem lê em vez de restringi-lo. Filtrada para adjudicações fora de contrato-quadro, ela devolvia 84% — valor de contrato-quadro dividido por valor fora de contrato-quadro. Não era erro nem vazio: uma porcentagem plausível que não significa nada.
Toda taxa do modelo agora envolve o filtro do numerador em KEEPFILTERS, e cada uma tem um teste que afirma o comportamento correto ao ser filtrada pela coluna que ela filtra. A maioria dos defeitos de DAX são defeitos de contexto de filtro, por isso a suíte fixa as métricas em vários contextos e não apenas no total geral.
Definições antes do DAX, inclusive as contestadas
Cada métrica foi definida por escrito antes de existir qualquer DAX. Se um número é definido apenas pelo código que o calcula, o código vira a definição, e ninguém consegue dizer se ele está certo — apenas se ele roda.
O contrato também registra onde existe mais de uma definição defensável. A taxa de licitante único é o caso claro: 55 das 351 adjudicações não registram quantas empresas apresentaram proposta. Contando apenas as adjudicações com número de propostas conhecido, dá 19,9%; contando todas, 16,8%. Uma diferença de 3,1 pontos não é arredondamento, e muda a leitura do achado. A primeira é certificada, a segunda é publicada ao lado, e nenhuma aparece sem a cobertura de dados de propostas de 84,3% que limita as duas.
A junção que falhou, publicada como achado
O desenho original comparava o volume de licitações com os orçamentos por ministério. Apenas 1 de 104 compradores pôde ser associado a um ministério federal. A causa é estrutural, não uma questão de ajuste fino: os compradores alemães que aparecem no TED são em sua maioria municípios, estados, hospitais e concessionárias, enquanto o orçamento federal cobre apenas ministérios federais. Os dois conjuntos quase não se sobrepõem, então nenhum matching melhor consegue ligá-los.
A comparação foi retirada do relatório. Em seu lugar entra a junção que falhou, como achado — dois conjuntos de dados oficiais sobre atividade governamental correlata que não podem ser ligados nesse escopo. Resolver isso direito exigiria dados orçamentários estaduais e municipais, o que é uma fase posterior.
