cancel
Showing results for 
Search instead for 
Did you mean: 

Who rated this article

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)
Who rated this article