Archive

Archive for the ‘Trucs & astuces’ Category

Teradata – fonctions

December 31st, 2014 No comments
  • Fonctions qui proviennent d’oracle

La migration de Teradata en V14 donne accès à des fonctions compatibles avec Oracle. En voici quelques exemples.

oreplace(‘chaîne’, ‘a_remplacer’,’par’)

Cette fonction permet de remplacer l’intégralité de la chaîne de texte « a_remplacer » par la chaîne « par » dans « chaîne ».

Exemple :

Seule la chaîne de caractère “abc” complète a été remplacée par “efg”.

  

otranslate(‘chaîne’, ‘a_remplacer’,’par’)

Cette fonction permet de remplacer chaque caractère de « a_remplacer » par chaque caractère de « par » dans « chaîne ».

Exemple :

Tous les “a” sont remplacés par un “e”, de même pour “b” par “f” et “c” par “g”.

Si « a_remplacer » dans la fonction OTRANSLATE contient un seul caractère alors la fonction aura le même effet que la fonction OREPLACE avec également un seul caractère dans OREPLACE.

 

  • Fonctions non ANSI

Elles passent très bien dans « Teradata SQL Assistant » mais elles ne passent pas dans un script ou dans la création d’une vue par exemple.

left(‘chaîne’, ‘nb caract à garder’)

*** Failure 3706 Syntax error: expected something between ‘,’ and the ‘LEFT’ keyword.

Statement# 1, Info =28

*** Total elapsed time was 1 second.

.

substr(‘chaîne’, ‘caract de départ’,  ‘nb caract à garder’)

Avant l’arrivée de la V14, il y avait le même problème avec la fonction length qui devait être remplacée par la fonction character_length.

.

  • Fonctions qui ne passent pas sous SQL Assistant mais qui passent dans un bteq

Certaines fonctions ne passent pas sous SQL Assistant alors que dans des scripts elles fonctionnent très bien. Il est donc dommage de s’en passer. Voici deux exemples de fonctions :

RPAD(‘chaîne’,’nb caract’,’chaîne de complément’)

 

Sous SQL Assistant, une fenêtre s’ouvre

Puis une autre :

Pour obtenir le résultat dans UltraEdit :

Dans un script, nous avons directement la donnée suivante :

abcxxx

.

LPAD(‘chaîne’,’nb caract’,’chaîne de complément’)

C’est le même principe que pour la fonction RPAD.

Dans un script, nous avons directement la donnée suivante :

xxxabc

Categories: Trucs & astuces Tags:

Teradata – Gestion des nulls

December 31st, 2014 No comments

Le but de cet article est voir comment il est possible de gérer les valeurs nulles.

Partons du principe que nous avons les tables suivantes à notre disposition.

.
  • Problématique

Nous voulons tous les enregistrements de la table 2 qui ne sont pas présents dans la table 1.

Le résultat attendu est : ‘D’ et ‘E’.

Par un minus, voilà ce qu’on obtient.

Par une sous-requête, voilà ce qu’on obtient.

Le résultat attendu est renvoyé correctement avec le requête utilisant le minus mais pas avec la sous-requête.

Essayons de faire le contraire pour voir : tous les enregistrements de la table 1 qui ne sont pas dans la table 2.

Le résultat attendu est : ‘G’ et null.

Par le minus

Par la sous-requête

Le résultat est correct avec le minus et partiel avec la sous-requête.

Pourquoi ?

Read more…

Categories: Trucs & astuces Tags:

Les Variables dans QlikView

December 5th, 2014 No comments

L’utilisation de variables au sein d’un projet permet une maintenance simplifiée des programmes et des interfaces si celles-ci sont bien utilisées. En effet, une variable permet de paramétrer une valeur, une formule, un code couleur et autres à un endroit, ce qui facilite toute modification par la suite et diminue le risque d’avoir des écarts sur des notions identiques.

Dans un projet QlikView, il y a deux moyens de créer, gérer des variables :

  • Au sein des scripts, en utilisant les commandes SET et LET
  • Au sein de l’interface, dans le Menu « Paramètres » «  Vue d’ensembles des Variables… »

Cette présentation porte sur la gestion des variables par le Menu « Paramètres ». Pour expliquer sa mise en œuvre, voici les différents exemples d’utilisation qui vont être abordés :

I] Gestion des codes couleurs

II] Gestion de l’affichage du nombre d’enregistrements

III] Gestion d’affichage selon une liste de choix

———————————————————————————————————

I] Gestions des codes couleurs :

Un projet QlikView est composé d’un ensemble de feuilles qui se superposent, et se différencient par le nom donné à leur onglet.

Il est donc intéressant de jouer avec les codes couleurs pour différencier l’onglet actif de ceux inactifs.

Dans l’exemple ci-dessous, une couleur bleue est affectée à la trame de fond de l’onglet s’il est actif, blanc sinon :

1. Création des variables v_color_tab_ok (bleu), v_color_tab_ko

……..

Liste des Variables

…….. Read more…

INFORMATICA : Modifier facilement une source

December 3rd, 2014 No comments

Il est parfois fastidieux d’avoir à modifier un fichier comprenant de nombreux champs en source de Powercenter.

Voici donc une astuce pour réaliser facilement cette manœuvre dans le module designer !

Fixer la zone target puis sélectionner le fichier source et faites un glisser/déposer dans cette zone :

NB : La manipulation se fait en zone Target car en Source, il ne sera pas possible de générer la structure du fichier.

Vous vous demandez, mais pourquoi ne réimporte-t-on pas directement la nouvelle source de données ?

Pour les simples et bonnes raisons que cette méthode permet :

– > de récupérer les types de données des champs existants, ce qui évite d’avoir à tous les redéfinir

– > de ne pas perdre tout le paramétrage relatif à cette source dans le Workflow manager.

Lors du déplacement du fichier dans la zone Target, Informatica détecte un conflit, calmez-vous ! il propose les résolutions ci-dessous :

Cliquer sur Rename pour éviter l’écrasement du fichier :

Editer le fichier ainsi renommé et changer le type Flat file pour un Database type, dans notre cas, la base de données Teradata :

La structure s’affiche sous cette forme :

Read more…

QlikView: Exemples de Représentations

July 2nd, 2014 No comments

QlikView offre la possibilité de représenter des données, des tendances de manière très visuelle, de part des icônes, des images, des mini-graphes, ce qui amène de la lisibilité à l’information que l’on souhaite diffuser.

Ainsi cet article présente quelques représentations qui peuvent apporter de la valeur ajoutée aux données exploitées.

Sommaire :

1-      La représentation  « Mini Graphique » :

2-      La représentation « Image »

3-      La représentation  « Pop-Up »

1)      La représentation  « Mini Graphique » :

Le Mini Graphique consiste à représenter la trajectoire d’un indicateur en fonction d’une dimension donnée, et cela pour chaque ligne du tableau.

Dans le cas ci-dessus, est représentée l’évolution du Chiffre d’Affaires sur une année (mois par mois) pour chaque voyageur faisant parti du Top 100 des meilleurs voyageurs d’une compagnie aérienne sur les 12 derniers mois.

Read more…

Trucs et Astuces SQL Assistant TERADATA vol.1

April 2nd, 2014 No comments

L’outil d’Assistant SQL de TERADATA s’appelait, jusqu’à la version 12.0, « Queryman ». Désormais, il porte le nom de « Teradata SQL Assistant »

Cet outil permet à l’utilisateur de requêter librement sur les tables ou vues d’une base de données. Mais aussi à se connecter à des bases externes, importer et exporter des données et autres fonctionnalités.

Pour faciliter une première approche de l’outil, voici quelques trucs et astuces pour une utilisation simplifiée :

Au programme :

  • Les différentes parties de l’interface
  • Définir une connexion et base source
  • Interroger une définition de table
  • Paramétrer une requête pour faciliter l’exécution
  • Recherche simplifiée de requêtes historisées
  • Quelques raccourcis clavier à connaître

Read more…

Décoder les caractères spéciaux sous Linux

December 11th, 2013 No comments

Problématique : Décoder les caractères spéciaux d’un fichier texte sous Linux

Client : Transporteur/Logistique

Contexte technique : Fichiers XML produits par une application Ipad et stockés sous Oracle puis renvoyés vers PowerCenter sous Linux. A chaque étape le character-set utilisé est différent.

Contexte fonctionnel :

Les opérateurs de saisie, répartis dans le monde entier, utilisent  un Ipad pour saisir différents rapports livraison. Ces rapports peuvent contenir une masse importante d’information sous la forme de descriptions longues.

Le résultat dans le DataWarehouse doit être lisible pour en permettre l’analyse et un maximum de caractères spéciaux doivent être conservés ou retranscrits.

Solution : Utilisation de la fonction iconv avec option //TRANSLIT

Read more…

Arrondi d’un intervalle de dates sous Teradata

October 23rd, 2013 No comments

Teradata  nous réserve décidément bien des surprises dès qu’il s’agit de manipuler des arrondis. Nous l’avons vu précédemment sur des arrondis de nombres équidistants de deux bornes, mais c’est aussi vrai lors du calcul d’une différence de dates.

Dans notre cas, une compagnie aérienne souhaite différencier les vols en fonction de leur durée en heures.

Pour cela, on part des Date/heure de départ et arrivée pour un calcul simple : Date/heure Fin – Date-/heure début.

Sous Teradata, on aurait donc  :

SELECT CAST(CAST(‘2013-07-26 18:12:00′ AS TIMESTAMP(0))-CAST(‘2013-07-26 16:10:00′ AS TIMESTAMP(0)) HOUR(4)) AS INTEGER)

— résultat => 2, arrondi de 2 heures et 2 minutes

L’arrondi paraît logique;  il l’est beaucoup moins dans le cas suivant :

SELECT CAST((CAST(‘2013-07-26 18:00:00′ AS TIMESTAMP(0))-CAST(‘2013-07-26 15:58:00′ AS TIMESTAMP(0)) HOUR(4)) AS INTEGER)

— résultat => 3, arrondi de 2 heures et 2 minutes !!

Read more…

Arrondi au plus proche sous Teradata

June 30th, 2013 No comments

Arrondir un nombre au plus proche sous Teradata est relativement simple au premier abord.

S’il s’agit d’arrondir à l’entier on pourra utiliser :

SELECT CAST(1.2345 AS DECIMAL(2,0)) –> 1

Pour arrondir à deux décimales, on utilisera :

SELECT CAST(1.2345 AS DECIMAL(5,2)) –> 1.23

Mais la résolution de l’arrondi au plus proche se révèle plus surprenante quand le nombre est équidistant de l’arrondi supérieur et de l’arrondi inférieur.

En effet, contrairement à la plupart des systèmes sur le marché (de Excel à Oracle en passant par SSIS ou MySql), sous Teradata l’arrondi d’un nombre équidistant de ses arrondis inférieurs et supérieurs ne se fait pas systématiquement vers le supérieur mais dépend de la parité du dernier chiffre avant troncature.

Ainsi obtiendra-t-on :

SELECT CAST(1.2345 AS DECIMAL(5,3)) –> 1.234

SELECT CAST(4.5 AS DECIMAL(2,0)) –> 4

Alors que :

SELECT CAST(1.2335 AS DECIMAL(5,3)) –> 1.234

SELECT CAST(3.5 AS DECIMAL(2,0)) –> 4

C’est à dire que si le dernier chiffre avant troncature (en rouge dans l’exemple) est pair , le nombre sera arrondi à l’inférieur. Si ce dernier chiffre est impair, le nombre sera arrondi au supérieur.

En clair, Teradata a pris le parti de répartir l’approximation de l’arrondi équidistant entre le supérieur et l’inférieur.

Conclusion :

Si ce comportement est particulièrement perturbant parce qu’il va à l’encontre de 80% des systèmes sur le marché, il peut être expliqué par le besoin de lisser l’erreur d’approximation lorsque l’on traite une très forte volumétrie de données.

A noter enfin qu’Informatica PowerCenter prend le contrepied en arrondissant les pairs au supérieur et les impairs à l’inférieur.

Extraire un PDF à partir d’un BLOB via Informatica

March 28th, 2013 No comments

Retour d’expérience projet où notre client souhaitait pousser 12 à 14 000 documents PDF de suivi de planning et d’absentéisme vers une application de mailing.

Ces documents étaient stockés en tant que BLOB (Binary Large Object) dans la base Oracle du portail BI dédié au personnel. Afin de pouvoir pousser ces documents vers les intéressés, nous avons utilisé l’ETL en place : Informatica PowerCenter.

Contexte technique : PDF stockés en BLOB sous Oracle 10g, Informatica PowerCenter 8.6.1

Solution : Transformation Java dans le mapping PowerDesigner

Document de Référence :   The Binary Reader and BinaryWriter Java Transformations

Résolution :

Il s’agissait donc de créer un mapping s’appuyant sur la table Oracle contenant le BLOB en question, pour l’extraire vers notre répertoire cible en tant que fichier PDF.

Ce mapping nécessitait au minimum 3 informations :

  • Le nom du fichier à générer
  • Le champ BLOB contenant le PDF
  • Le chemin du répertoire cible, dans notre cas un paramètre du mapping

Mapping d'extraction d'un blob

Mapping d'extraction d'un blob



 
Read more…