Free Trial

Base de Connaissance

Apprenez auprès des experts.
TIPS de la semaine

Chaque semaine, découvrez de nouvelles astuces et bonnes pratiques pour devenir un expert !

Voir l'index

Réglementaire: produire de manière automatisée un document formaté

WilliamR
Alteryx
Alteryx
Créé

How To: Produire un document réglementaire à partir d'Alteryx, Python et d'un modèle

 

  • Produire un document réglementaire peut être long et fastidieux. Découvrez comment avec Alteryx, vous pouvez à la fois travailler sur la préparation de la donnée pour calculer les indicateurs demandés mais aussi comment vous pouvez remplir de manière automatique le document définitif.
  • Dans cet exemple, nous partons du principe que les indicateurs sont déjà disponibles dans le SI de l'entreprise sous la forme de "métriques".

Excel2.JPG

 

Prerequisites

 

  • Product - Alteryx Designer:
    • Version(s) à partir de 2018.3 (car il est nécessaire d'utiliser quelques lignes de python)
  • Additional Tools:
    • Des contrôles d'intégrité peuvent être positionnés à l'aide de l'outil "Expected Zero Record" du pack additionnel CREW Maro Pack téléchargeable depuis ce lien.
  • Additional required assets (API Keys, Permissions, etc.).
    • Par défaut Alteryx Designer comprend une liste de package python préinstallés. La liste est disponible ici. Afin d'installer les packages python additionnels, si vous avez installé une version Admin, il est nécessaire de pouvoir élever les privilèges en lançant Alteryx Designer en mode administrateur (clic droit sur l'application puis "exécuter en tant qu'administrateur"). Si vous avez installé une version non Admin, il n'y a pas de permissions spécifiques à prévoir.
    • Documentation de l'outil python ici
    • Informations utiles pour l'utilisation de l'outil python ici.

 

Procédure

 

  • Importer le modèle réglementaire (Ici le fichier Template\Template_liability_data_reporting_2019_v2.7.1_ détail.xlsx) avec un outil d'Input Data,
  • Sélectionner l'onglet à remplir,
  • Puis il faut extraire les codes correspondants aux indidateurs (couple colonne/ligne) avant de transposer les colonnes en ligne,

Excel.JPG

  • Puis utiliser un Append Field pour générer l'ensemble des cellules du rapport,
  • Concaténer ensuite les deux informations pour générer une clé ligne_colonne,

Alteryx1.JPG

  • Associer la cellule à l'information provenant du SI sur la même clé (Jointure),

Alteryx2.JPG

  • Utiliser un tableau croisé pour générer la matrice définitive,

Alteryx3.JPG

  • Créer un document de sortie temporaire,
  • Le charge avec un code Python utilisant la librairie openpyxl qui permet de conserver toutes les caractéristiques du modèle (mise en forme, cellules grisées, police, ...).
# List all non-standard packages to be imported by your 
# script here (only missing packages will be installed)
from ayx import Package
Package.installPackages(['openpyxl'])

#! Python 3
# - Copy and Paste Ranges using OpenPyXl library

import openpyxl
import os
from ayx import Alteryx

#Get Alteryx working directory
dir= Alteryx.getWorkflowConstant("Engine.WorkflowDirectory")

#Prepare the spreadsheets to copy from and paste too.

#File to be copied
wb = openpyxl.load_workbook(dir + "Data\\TempData.xlsx") #Add file name
sheet = wb["Sheet1"] #Add Sheet name

#File to be pasted into
template = openpyxl.load_workbook(dir + "Template\\Template_liability_data_reporting_2019_v2.7.1_ détail.xlsx") #Add file name
temp_sheet = template["T01.00"] #Add Sheet name



#Copy range of cells as a nested list
#Takes: start cell, end cell, and sheet you want to copy from.
def copyRange(startCol, startRow, endCol, endRow, sheet):
    rangeSelected = []
    #Loops through selected Rows
    for i in range(startRow,endRow + 1,1):
        #Appends the row to a RowSelected list
        rowSelected = []
        for j in range(startCol,endCol+1,1):
            rowSelected.append(sheet.cell(row = i, column = j).value)
        #Adds the RowSelected List and nests inside the rangeSelected
        rangeSelected.append(rowSelected)

    return rangeSelected
         

#Paste range
#Paste data from copyRange into template sheet
def pasteRange(startCol, startRow, endCol, endRow, sheetReceiving,copiedData):
    countRow = 0
    for i in range(startRow,endRow+1,1):
        countCol = 0
        for j in range(startCol,endCol+1,1):
            
            sheetReceiving.cell(row = i, column = j).value = copiedData[countRow][countCol]
            countCol += 1
        countRow += 1
def createData():
    print("Processing...")
    #Dans le cas du LDR, on effectue l'extraction de la matrice du fichier temporaire
    selectedRange = copyRange(1,1,24,70,sheet) #Change the 4 number values
    #On l'injecte ensuite au bon endroit (num colonne début,num ligne début,num colonne fin, num ligne fin )
    #Il serait aussi possible de récupérer dynamiquement ces valeurs
    pastingRange = pasteRange(3,5,26,74,temp_sheet,selectedRange) #Change the 4 number values
    
    #You can save the template as another file to create a new file here too.s
    template.save(dir + "Livrable\\LDR_Filled.xlsx")
    
    print("Range copied and pasted!")

Excel2.JPG

 

Workflow complet

 

Workflow.JPG

 

Problèmes potentiels

 

Révélation
Cette méthode impose d'utiliser l'outil python accessible à partir de la version 2018.3 et d'importer le package openpyxl.

  

Resources additionnelles

 

Pièces jointes
contributeurs
Étiquettes