2019-08-05

Python dans Power BI, pourquoi faire ?

L'ajout du visuel Python dans Power BI date de quelques mois déjà... Je vous propose un cas concret justifiant d'y passer quelques heures.

On peut effectivement se poser la question de la pertinence de ces visuels tant les possibilités en termes de traitement (Power Query) et restitution ont drastiquement évolué sur les dernières versions de Power BI. Alors je vous propose un cas concret pour résoudre en quelques heures une problématique qui nécessiterait autrement le développement d'un visuel spécifique.

La problématique


Il est facile de créer un histogramme dont la couleur des barres est soumise à un affichage conditionnel. C'est en revanche impossible à partir du moment où plusieurs séries sont présentes.

La solution

Dans ce cas, l'utilisation du visuel Python permet d'obtenir le résultat attendu :

Préalablement, il est bien entendu indispensable d'avoir installé Python et d'activer les scripts dans les options. Pour déployer matplotlib :
pip install -U matplotlib
Une fois l'environnement prêt, il est temps de configurer le visuel.
Importer le module :
from pylab import *
Créer la fonction permettant de déterminer la couleur de la barre d'histogramme :
def getcolor(data, typecode, mini, maxi):
if typecode == "c":
return (0.9 * ((maxi - data)/(maxi - mini)), 0.8, 0.3 * ((maxi - data)/(maxi - mini)))
elif typecode == "d":
return (0.75 * ((maxi - data)/(maxi - mini)), 0.75 * ((maxi - data)/(maxi - mini)), 0.8)
else:
return (0.8, 0.75 * ((maxi - data)/(maxi - mini)), 0.75 * ((maxi - data)/(maxi - mini)))

 

Gérer les données. Première série, avec affectation de la couleur via la fonction :
groupedSet = dataset.where(dataset.Yogurt == "Chobani Total").groupby("Date").Prix.sum()
colorSet = [getcolor(data, "c", groupedSet.min(), groupedSet.max()) for data in groupedSet]
plt.bar(groupedSet.index, groupedSet, color = colorSet)


Seconde série, avec l'attribut bottom permettant de gérer l'empilement :
groupedSetAlt = dataset.where(dataset.Yogurt == "Danone Total").groupby("Date").Prix.sum()
colorSet = [getcolor(data, "d", groupedSetAlt.min(), groupedSetAlt.max()) for data in groupedSetAlt]
plt.bar(groupedSetAlt.index, groupedSetAlt, color = colorSet, bottom = groupedSet)


Gestion de l'axe des abscisses :
plt.xticks(groupedSet.index[::4], [i[0:4]+"-"+i[5:7]+"-"+i[8:10] for i in groupedSet.index[::4]])
 

Et affichage :
plt.show()
Et voilà !

J'ai évidemment simplifié mon code pour ne gérer que ces 2 séries avec un filtrage "en dur", libre à vous d'imbriquer une boucle pour traiter un nombre variable de séries...

2016-02-04

Perdus / Trouvés – Les chemins et URL SharePoint 2013

Encore un post à propos des trucs que je cherche souvent… Je l’agrémenterai au fur et à mesure…

Chemins

Suivi de synchro FIM : C:\Program Files\Microsoft Office Servers\15.0\Synchronization Service\UIShell\miisclient.exe

URL

/_layouts/viewlsts.aspx –> Tout le contenu du site.

/_layouts/settings.aspx –> Paramètres du site

/_layouts/searchresults.aspx?k=Truc –> Recherche

/_layouts/closeConnection.aspx?loginasanotheruser=true –> Se connecter en tant que…

/_layouts/savetmpl.aspx –> Sauvegarder le site en tant que Template (utile après avoir activé l’infrastructure de publication)

/_layouts/ChangeSiteMasterPage.aspx –> Accès aux pages maitres et à l’alternate CSS.

2016-01-04

SharePoint Online - 404 Not Found - https://static.sharepointonline.com/…

Ô rage ! Ô désespoir ! Ô vieillesse ennemie… Après des heures de combat acharné, impossible de faire fonctionner ce satané JSLink dans SharePoint Online. Il est pourtant vérifié (16 fois, on n’est jamais trop prudent), relu, testé, réduit à sa portion congrue… Fi, la console continue de cracher son sibyllin message :
404 Not Found - https://static.sharepointonline.com/bld/_layouts/15/ 16.0.4719.1219/

Toutes les combinaisons de chemin relatif y passent : silence radio. Dès que l’URL complète du fichier est fournie… Saccage du moteur qui tente de le récupérer dans les ressources serveur, sans succès évidemment.
Et si ? Oui ! La solution est d’utiliser l’alias de la collection de sites :
~sitecollection/…/MonFichier.js
Et paf ! Ca fait ce qui est attendu ! (En l’occurrence ici, un champ Chocapic).

2015-09-02

Helper – Loopback check

Parce qu’on en a besoin pour les serveurs de dev, de prod, de tout, le paramétrage du loopback check est un incontournable.

Serveur de DEV

On désactive directement en PowerShell :
New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa
 -Name "DisableLoopbackCheck" -value "1" -PropertyType dword

Serveur de PROD


A venir…

2015-07-16

Visual Studio–Expressions régulières

Plus pour moi-même, pour rappeler un groupe de capture dans la recherche avec Expressions Régulières de Visual Studio, c’est $1… qu’il faut utiliser. Là où les expressions typées Unix utiliseront le backslash.

image

2015-05-02

Analytics avec SharePoint 2013 – La fin des souffrances ?

Si vous avez comme moi des clients SharePoint 2013 dans le marketing et la communication (interne ou externe)… Vous avez forcément subi les foudres des décideurs lorsque vous avez présenté l’état des lieux des solutions de statistiques de consultation, avec insulte compte triple si vos interlocuteurs étaient aguerris à SharePoint 2010 ou 2007.

Analytics n’existe pas sous SharePoint 2013 ? Mais ils étaient presque corrects sous 2010 !

Ces 2 excels ne me suffisent pas !

Même google le fait gratuitement ! (Là-dessus, nonobstant la qualité des productions de Mountain View, j’aurais je l’espère l’occasion de revenir sur leur “gratuité” et leur “perfection”)

Et bien, vous voici avec une carte “cloud” à jouer, une pierre, deux coups : Préparez le terrain de l’hybride ou consolidez un abonnement existant en utilisant la brique Azure “Application Insights” dans vos pages maitres SharePoint :

http://azure.microsoft.com/blog/2015/04/22/understand-your-sharepoint-usage-with-application-insights-2/

2015-03-13

SharePoint - La recherche d’utilisateurs est toujours infructueuse

Votre recherche est fonctionnelle pour tous vos documents, vidéos et autres contenus… Mais d’utilisateurs point ! Votre belle démonstration d’annuaire basé sur la recherche tombe allo (Annuaire, allo… désolé.)

Vérifiez donc votre crawl log. Il peut contenir l’erreur suivante sur le STS :

Error in the Microsoft SharePoint Server People Protocol Handler. ( Object reference not set to an instance of an object.; SearchID = F9CC7134-A517-4E17-A81A-7419B5572B6D )

Capture_20150313_143013

Dans ce cas, vérifiez qu’une collection de sites racine existe à la base de votre application web. Dans mon cas, il y avait les collections de sites : http://devXXX.tomain.fr/sites/Coll1 et http://devXXX.tomain.fr/sites/Coll2. En ajoutant la collection http://devXXX.tomain.fr/ (un team site sans contenu ni droit), puis en lançant un nouveau crawl, mes utilisateurs sont désormais disponibles dans la recherche !

La recherche dans “ce site” ne renvoie rien alors que la recherche globale fonctionne…

Après vos jonglages sur cette GED intranet, paramétrage aux petits oignons des AAM et une mise en prod de haut vol, impossible de retrouver un quelconque document depuis la boite de recherche “ce site” / “this site” du coin supérieur droit de vos pages… Et pourtant, en étendant la recherche ou en recherchant dans “tout” / “All”, avec les mêmes critères, des documents apparaissent !

Quelle que soit votre version de SharePoint, cet article est en effet toujours valable : http://support.microsoft.com/fr-fr/kb/2000365 : La recherche “this site” ne retourne rien si le chemin crawlé n’est pas celui “Par défaut” de vos AAM. Une simple permutation à chaud des mappages et tout rentre dans l’ordre.