cancel
Showing results for 
Search instead for 
Did you mean: 
AssafHanina
Sisense Team Member
Sisense Team Member

Exporting Sisense User Lists to CSV

Exporting Sisense users requires using the REST API. While the user list is visible under Admin > User Management > Users, there is no option to download and manipulate this data directly.

From The Users Info, Admin can generate some insights, Such as: 

  1. Review Active/Inactive Users 
  2. Review Last Login
  3. Group the Users by Roles 

Sisense Provide 2 endpoints to get the list of all users. 

  1. Version 0.9 --> Get /users
  2. Version 1.0 --> Get /users

The sample Python script below utilizes the GET /users endpoint on version 1.0

Implementation Steps

  1. Open Python and Install the relative libraries in case needed
  2. Update the Following Variables In the Python Script:
  • Personal Server 
  • Token - Sisense Authentication Token. Can be achieved By Api Version 1.0 - Post ​/authentication​/login
  • CSV Path - Local PC file path for the CSV to download

     3. Run the Script 

Python Script

 

import json
import requests
import pandas as pd

# Define global variables
server = ''  # Replace with your actual server URL. for example: https://url.sisense.com
token = '' # Sisense Authentication token
path = ''
"""
    Define the path variable according to your operating system and file location
    Example for Windows:
    path = r'C:\\Users\demo.demo\Desktop\sisense_users.csv'
    Example for Mac:
    path = '/Users/demo.demo/Desktop/sisense_users.csv'
"""

# Fixed variables: `user_columns`, `params`, and `headers` are fixed and should not be updated.
user_columns = ['_id','active','roleId','created','tenantId','email','firstName','lastName','userName','lastLogin','lastActivity'] # Define the fields to be retrieved for users
params = {
    "fields": ",".join(user_columns)
}
headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json"
    }

# Retrieves user data from the specified server endpoint, filters it based on provided user_columns, and returns a DataFrame.
def get_users(server, token, headers, user_columns, params):
    endpoint = '/api/v1/users'
    url = f'{server}{endpoint}'
    try:
        request = requests.get(url=url, headers=headers, params=params)
        request.raise_for_status()  # Check for request success
        respond = request.json()
        user_data = []
        for user in respond:
            user_dict = {}
            for key, value in user.items():
                if key in user_columns:
                    user_dict[key] = value
            user_data.append(user_dict)  # Append dictionary containing all attributes
        return pd.DataFrame(user_data)
    except requests.exceptions.RequestException as e:
        print('Error:', e)
        return None  # Return None or handle error appropriately


# Modifies the input DataFrame by converting specific columns to datetime format, renaming certain columns, and saving the DataFrame to a CSV file
def modify_df(df_users):
    # Convert columns to datetime format
    df_users["created"] = pd.to_datetime(df_users["created"])
    df_users["lastLogin"] = pd.to_datetime(df_users["lastLogin"])
    df_users["lastActivity"] = pd.to_datetime(df_users["lastActivity"])

    # Rename specific columns in the DataFrame
    df_users.rename(columns={'_id': 'user_id',
                             'userName': 'user_name',
                             'firstName': 'first_name',
                             'lastName': 'last_name',
                             'active': 'is_active',
                             'roleId': 'role_id',
                             'created': 'created_date',
                             'tenantId': 'tenant_id',
                             'lastLogin': 'last_login',
                             'lastActivity': 'last_activity'}, inplace=True)

    # Reorder columns
    ordered_columns = [
        'user_id', 'user_name', 'first_name', 'last_name', 'is_active',
        'role_id', 'created_date', 'tenant_id', 'last_login', 'last_activity'
    ]
    df_users = df_users[ordered_columns]

    # Save the DataFrame to a CSV file without including the index
    df_users.to_csv(path, index=False)
    return df_users

# Retrieve users data using the get_users function
df_users = get_users(server, token, headers, user_columns, params)

# Modify df_users data frame into the final output
df_result = modify_df(df_users)

# Print the first few rows of the modified DataFrame
print(df_result.head())

# Print a message indicating the end of the program
print("program completed")

 

Rate this article:
(1)
Comments
Vadim_Pidgornyi
Sisense Team Member
Sisense Team Member
Version history
Last update:
‎07-09-2024 12:16 PM
Updated by:
Contributors