Best Of
Re: Magic ETL Join visual feedback (summary of join results)
This would be a great addition to Domo and MagicETL to increase data democratization!
Re: Auto Height and Width For Cards
I came here to request something similar to the OP. Not having the ability to make our dashboards vertically responsive is compromising the design and useful of our dashboards and apps for our clients.
We have several dashboards that are meant to act as single page 'at a glance' dashboards. Regardless of the monitor they are being viewed on, the user should see all content on screen at once, without needing to scroll, and without any wasted screen space.
However, as the OP said, this not currently possible with the default layout. Cards can be sized to fit on a single monitor vertically, but when viewed on a different monitor they will often extend beyond the height of the screen, or appear 'shrunk' inside a letterbox not taking full advantage of the screen space.
An optional feature similar to how cards and bricks currently use all horizontal space available, scaling cards as necessary, would be very useful.
Re: Send email to people who I have shared the App with
Hey @verytiredgirl!
As @ColemenWilson mentioned, I was able to write some Python code that pulls the data you are looking for and pushes it to a Domo dataset for use within a workflow (and anywhere else you'd like it). I have this configured to work within a Jupyter Workspace within our Domo instance. Here's the code I have:
import requests
import json
import pandas as pd
import numpy as np
import domojupyter as domo # You'll need to create a dev token, store it in an Account, and then add that Account to this Jupyter Workspace, naming it "Domo Dev Token" account_properties = domo.get_account_property_keys('Domo Dev Token')
devToken = domo.get_account_property_value('Domo Dev Token', account_properties[0]) def app_user_access(app_id):
"""Retrieves user access data related to a particular App Studio app Args:
app_id (str): The id of the app to get a user access list from
Returns:
df_combined (Pandas dataframe): A dataframe of all users (and groups with users) that have access to an app
"""
# You'll
baseURL = "https://[your-instance-name].domo.com/api/content/v1/dataapps/" + str(app_id) + "/adminsummary"
headers = {
"x-domo-developer-token": devToken,
"accept": "application/json"
}
response = requests.request("GET", baseURL, headers=headers)
# Pull direct access list
users = json.loads(response.text)['access']['users']
user_df = pd.json_normalize(users)[['id', 'displayName', 'emailAddress', 'title']]
user_df.rename(columns={'id': 'User ID', 'displayName': 'Display Name', 'title': 'User Title', 'emailAddress': 'Email'}, inplace=True)
# Pull users with access via a group
if 'groups' in json.loads(response.text)['access']:
groups = json.loads(response.text)['access']['groups']
group_users_df = pd.json_normalize(groups, 'userIds', ['id', 'name'], record_prefix="userID")
group_users_df.rename(columns={'userID0': 'User ID', 'id': 'Group ID', 'name': 'Group Name'}, inplace=True)
# Join in user data # This is just the "People" Domo Governance dataset
user_data = domo.read_dataframe('Domo Governance People dataset', query='SELECT * FROM table')
user_data['User ID'] = user_data['User ID'].astype('int64')
group_users_df = group_users_df.merge(user_data[['User ID', 'Display Name', 'Title', 'Email']], on='User ID', how='left')
group_users_df.rename(columns={'Title': 'User Title'}, inplace=True)
df_combined = pd.concat([user_df, group_users_df], ignore_index=True, sort=False)
else:
df_combined = user_df
df_combined['App ID'] = app_id
return df_combined def all_app_user_access():
"""Retrieves user access data related to all App Studio apps
Returns:
all_app_access_df (Pandas dataframe): A dataframe of all users (and groups with users) that have access to all apps in Domo
"""
# Get a list of all app ids # NOTE: This dataflow was custom made, so you'll need to create it and add it to the Jupyter Workspace
pages_df = domo.read_dataframe('Apps and Pages Dataset', query='SELECT * FROM table')
apps_df = pages_df[pages_df['Is an App'] == 1]
apps_df = apps_df[['App ID', 'App Name']].drop_duplicates()
list_of_app_ids = apps_df['App ID'].tolist()
list_of_app_names = apps_df['App Name'].tolist()
# Loop through all apps
all_app_access_df = pd.DataFrame()
for i in range(0,len(list_of_app_ids)):
app_data = app_user_access(list_of_app_ids[i])
app_data['App Name'] = list_of_app_names[i]
all_app_access_df = pd.concat([all_app_access_df, app_data], ignore_index=True, sort=False)
return all_app_access_df domo.write_dataframe(all_app_user_access(), 'Apps with Users Dataset')
However, this code only works if you create a dataset called "Apps and Pages Dataset" via a dataflow that looks like this:
I'm basically just getting a list of all Apps and their associated pages, with owner info as well.
Kinda complicated, but it works for us, so I hope this helps!
Re: Dashed and solid lines in Line Bar Chart
The line styles are not configurable per line in that chart type. You could assign color rules for specific lines, which may help you. In one that I did recently, I used a lighter blue for forecasted and a darker blue for actual.
Re: App Studio share a specific page with a person or user not the entire app
Great idea @HelenOBrien would love to see an ETA assigned to this.
Re: How to Allow End Users to Run Workflow Without Failing?
I don't think you would ever want workflows to override permissions or set a role if the user didn't already have permissions. You could try to setup an indirect workflow that triggers or "listens" for updates to a dataset. Have the user fill out a form or submit whatever….and have that trigger the admin owned workflow.
Re: App Studio share a specific page with a person or user not the entire app
Would love this feature sooner than later!




