Forum Discussion
Slicers as input for Python script
Hi everyone -
I have a python network script visual in Power BI.
I am looking to apply a slicer (instead of hard-coding the teams - tm1 and tm2 ) in the python script below.
How can be this be done?
Thank you in advance!
# The following code to create a dataframe and remove duplicated rows is always executed and acts as a preamble for your script:
# dataset = pandas.DataFrame(TmName, OppName)
# dataset = dataset.drop_duplicates()
# Paste or type your script code here:
import networkx
import matplotlib.pyplot as plt
tm1 = 'Villanova'
tm2 = 'Cal Poly SLO'
# load edges file from csv
left = list(dataset.TmName)
right = list(dataset.OppName)
graph = networkx.Graph()
graph.add_edges_from(list(zip(left, right)))
# Test single path
shortest_path = networkx.shortest_path(graph, tm1, tm2)
#
edges_2team = dataset[dataset.TmName.isin(shortest_path)]
left_2team= list(edges_2team['TmName'])
right_2team = list(edges_2team['OppName'])
graph_2team = networkx.Graph()
graph_2team.add_edges_from(list(zip(left_2team, right_2team)))
networkx.draw(graph_2team, with_labels=True)
plt.show()
Hey jmarcrum ,
this code is maybe doing what you are looking for:
# The following code to create a dataframe and remove duplicated rows is always executed and acts as a preamble for your script: # dataset = pandas.DataFrame(TmName, OppName, Selection1, Selection2) # dataset = dataset.drop_duplicates() # Paste or type your script code here: import networkx import matplotlib.pyplot as plt tm1_l = list(dataset.Selection1) tm1 = tm1_l[1] tm2_l = list(dataset.Selection2) tm2 = tm2_l[1] # load edges file from csv left = list(dataset.TmName) right = list(dataset.OppName) graph = networkx.Graph() graph.add_edges_from(list(zip(left, right))) # Test single path shortest_path = networkx.shortest_path(graph, tm1, tm2) edges_2team = dataset[dataset.TmName.isin(shortest_path)] left_2team= list(edges_2team['TmName']) right_2team = list(edges_2team['OppName']) graph_2team = networkx.Graph() graph_2team.add_edges_from(list(zip(left_2team, right_2team))) plt.title(tm1 + " " + tm2) networkx.draw(graph_2team, with_labels=True) plt.show()as it allows to create this chart:
Be aware of this line:
networkx.draw(graph_2team, with_labels=True)
Hopefully, this is what you are looking for.Regards,
Tom
9 Replies
- TomMartensSuper User
Hey jmarcrum ,
you can add the column that "feeds" the slicer to the python script values.
Another option is to create a measure using DAX if the column originates from an unrelated table. You can use SELECTEDVALUE('<tablename>'[columname] , <defaultvalue>), see here: https://dax.guide/selectedvalue/
Hopefully, this provides some ideas to tackle your challenge.
Regards,
Tom
Stay safe, stay healthy
- jmarcrumHelper II
Hi Tom -
I went the second route, using DAX on the disconnected table, but I'm getting an error. Do you know what might be wrong?
You can see the edited code as well as the error in the middle. It think my imported measures aren't objects?
My pbix file is here:
https://www.dropbox.com/s/1qm5b3l73c01tbr/To_Publish4.pbix?dl=0
- TomMartensSuper User
Hey jmarcrum ,
please provide a pbix that creates a working network graph, without trying to incorporate the unrelated table or SELECTEDVALUE solutions that I mentioned.
Regards,
Tom
- Greg_DecklerCommunity Champion
I could be mistaken but I am pretty sure that python visuals interact with other visuals so a slicer should pre-filter the dataframe coming into the python visual...
- jmarcrumHelper II
I guess i don't really want to filter the dataframe coming in. I really want to pass in a parameter... like allow the user to select a team 1 and a team 2 that I can then pass in to the python script and use in place of the tm1 and tm2 hard-coded values.
Does that make sense? How would I do that?
- dreambennieNew Member
Hey everyone, just want to check with you is you networkx python script working when the report be published to server?
I'm facing a problem that the python script works well in desktop, and it works in my gateway server too. But when I publish the report to server with using the same gateway server to support refresh.
The python script fails with the following error:Script Runtime Error
[S-8b0f9ca0-eb61-491c-a98d-cc6bf0c07d18][S-8b0f9ca0-eb61-491c-a98d-cc6bf0c07d18]ModuleNotFoundError: No module named 'networkx'
Please try again later or contact support. If you contact support, please provide these details.
Thansk.