在单独列中添加网站名称 - Python 与 Tableau Server
我写了下面的Python代码,用来从Tableau服务器导出用户列表,这段代码在提取单个站点的数据时运行得很好。但是,如果我们想要同时从多个站点提取数据,Tableau就会给我报错。
这是我运行的代码:
from tableau_api_lib import TableauServerConnection
import pandas as pd
from tableau_api_lib.utils.querying import get_users_dataframe
tableau_server_config = {
'my_env': {
'server': 'https://myserver.com',
'api_version': '3.21',
'username': 'user',
'password': 'pass',
'site_name': ['FT','INT','ss'],
'site_url': ['FT','INT','ss']
}
}
conn = TableauServerConnection(tableau_server_config, env='my_env')
conn.sign_in()
users_df = get_users_dataframe(conn=conn)
users_df.drop(columns=['domain', 'externalAuthUserId', 'locale','language'], inplace=True)
print(users_df)
错误信息 -
PaginationError:
The Tableau Server REST API method decorator did not return paginated results.
Please verify that your connection is logged in and has a valid auth token.
If using personal access tokens, note that only one session can be active at a time using a single token.
Also note that the extract_pages() method wrapping this call is intended for paginated results only.
Not all Tableau Server REST API methods support pagination.
有没有办法解决这个问题?另外,我希望输出中也能包含站点名称。
有没有人能帮帮我?
谢谢!
1 个回答
0
这个库有一个叫做切换站点的方法。你只需要在你的配置字典里放一个站点。下面是我如何用它来导出所有站点的用户,并根据网址的值创建一个站点名称的列。
from tableau_api_lib.utils import querying
tableau_server_config = {
'my_env': {
'server': 'https://myserver.com',
'api_version': '3.21',
'username': 'user',
'password': 'pass',
'site_name': 'FT',
'site_url': 'FT'
}
}
conn = TableauServerConnection(tableau_server_config, env='my_env')
conn.sign_in()
这个操作会查询所有可用的站点,并把结果放到一个数据框里。
sites_df = querying.get_sites_dataframe(conn)
我创建了空列表来存放数据。一个是每个站点的用户数据框,另一个是响应值的列表,以备调试时使用。
frames = []
switch_site_responses = []
for index, row in sites_df.iterrows():
switch_site_responses.append(conn.switch_site(content_url=row["contentUrl"]))
users_df = querying.get_users_dataframe(conn)
users_df['site_name'] = row["contentUrl"]
frames.append(users_df)
server_users_df = pd.concat(frames)