달나라 노트

Python tableauserverclient : RequestOptions (Filtering) 본문

Python/Python tableauserverclient

Python tableauserverclient : RequestOptions (Filtering)

CosmosProject 2022. 5. 25. 20:51
728x90
반응형

 

 

 

tableauserverclient에서 Project, Workbook, View 등의 객체를 얻으려면 get method를 사용합니다.

 

get method = https://cosmosproject.tistory.com/635

 

근데 그냥 get method만 사용하면 서버에 존재하는 모든 Project, 모든 Workbook, 모든 View에 대한 정보가 return되기 때문에 원하는 대상의 객체만을 얻어올 수 없습니다.

 

이럴 때 원하는 것만 얻어올 수 있도록 filtering하는 방법이 있습니다.

 

 

 

 

import tableauserverclient as TSC

id = 'user_1'
pw = 'pw_1'
url_tableau = 'https://tableau-server.test.com'

server = TSC.Server(url_tableau)
tableau_auth = TSC.TableauAuth(id, pw)


server.auth.sign_in(tableau_auth)


req_option = TSC.RequestOptions()
req_option.filter.add(TSC.Filter(TSC.RequestOptions.Field.Name,
                                 TSC.RequestOptions.Operator.Equals,
                                 'Workbook 23'))

list_workbook_obj, pagination_item = server.workbooks.get(req_option)
print(list_workbook_obj)

workbook_obj = list_workbook_obj[0]

print('Workbook id =', workbook_obj.id)
print('Workbook name =', workbook_obj.name)


server.auth.sign_out()



-- Result
[<Workbook23 Object>]

Workbook id = 11ww11ww11-1111-1111-1111-1111wwww0023
Workbook name = Workbook 23

 

위 예시를 보면 tableauserverclient의 filter기능인 RequestOptions를 get method에 적용해서 Workbook 이름이 Workbook 23인 Workbook의 객체를 얻어오는 코드입니다.

 

 

 

 

 

 

req_option = TSC.RequestOptions()
req_option.filter.add(TSC.Filter(TSC.RequestOptions.Field.Name,
                                 TSC.RequestOptions.Operator.Equals,
                                 'Workbook 23'))

 

RequestOptions는 위처럼 사용할 수 있습니다.

 

먼저 TSC.RequestOptions()를 이용해서 RequestOptions class를 생성합니다.

 

그리고 생성된 class에서 filter.add method를 이용하여 어떤 내용의 조건으로 filter를 할지에 대한 내용을 추가(add)합니다.

 

add method의 인자로 받을 수 있는 것은 TSC.Filter 객체입니다.

Filter 객체에서 우리가 원하는 필터링 조건을 넣어주면 됩니다.

 

이번 예시에서 사용한 조건은 다음과 같습니다.

-> Workbook의 이름이 'Workbook 23'인 Workbook 객체를 얻어온다.

 

TSC.filter 객체는 총 3개의 인자를 받습니다.

 

1. TSC.RequestOptions.Field.Name,

먼저 어떤 Field에 filter를 적용할 것인지 입니다.

여기서 Field는 Name입니다. Workbook의 이름이 무엇인지를 조건으로 할 것이므로 Name Field를 적었습니다.

 

 

2. TSC.RequestOptions.Operator.Equals

두 번째는 Operator입니다.

이름이 같은걸 추출할건지 이름이 다른걸 추출할건지 등의 Operator를 의미합니다.

Equals가 쓰인걸 보면 Field.Name이 다른 무언가랑 같은 것을 추출하라는 의미라는걸 알 수 있습니다.

 

 

3. 'Workbook 23'

세 번째 인자는 내가 원하는 값입니다.

이름이 Workbook 23인 Workbook을 추출할 것이므로 Workbook 23을 적어줍니다.

 

 

 

 

여기까지하면 Filtering을 위한 정보는 모두 완성되었습니다.

완성된 Filtering 옵션은 req_option 변수에 모두 저장되어있습니다.

 

 

list_workbook_obj, pagination_item = server.workbooks.get(req_option)

 

이제 filtering 조건을 담고 있는 req_option을 get method의 인자로서 전달하면 get method는 모든 Workbook 정보를 얻어오는게 아니라 req_option에 저장된 filtering 옵션을 만족하는 Workbook만을 골라서 return해줍니다.

 

return되는 값들은 일반적인 get과 동일하게 workbook 객체들의 list (list_workbook_obj)와 pagination_item입니다.

pagination_item은 일단 넘어가겠습니다.

 

중요한건 list_workbook_obj입니다.

 

위 코드에서 list_workbook_obj를 출력한 결과는 아래와 같습니다.

 

[<Workbook23 Object>]

 

저희가 원했던 대로 Workbook23의 객체가 담긴 list가 return되었습니다.

굳이 list의 형태로 return하는 이유는 get method로 인해 얻어진 Workbook 객체가 여러 개 일 수 있기 때문입니다.

 

 

 

 

workbook_obj = list_workbook_obj[0]

print('Workbook id =', workbook_obj.id)
print('Workbook name =', workbook_obj.name)

 

그리고 그 다음 부분을 보면 위와 같습니다.

list_workbook_obj에서 indexing으로 Workbook23 객체를 workbook_obj에 저장하고 workbook 객체를 이용하는 방식입니다.

 

 

 

 

 

 

 

 

 

이러한 filtering은 Workbook 뿐 아니라 Project, View 모두에 적용할 수 있습니다.

 

 

 

 

import tableauserverclient as TSC

id = 'user_1'
pw = 'pw_1'
url_tableau = 'https://tableau-server.test.com'

server = TSC.Server(url_tableau)
tableau_auth = TSC.TableauAuth(id, pw)


server.auth.sign_in(tableau_auth)


req_option = TSC.RequestOptions()
req_option.filter.add(TSC.Filter(TSC.RequestOptions.Field.Name,
                                 TSC.RequestOptions.Operator.Equals,
                                 'Project 13'))

list_project_obj, pagination_item = server.projects.get(req_option)
print(list_project_obj)

project_obj = list_project_obj[0]

print('Project id =', project_obj.id)
print('Project name =', project_obj.name)


server.auth.sign_out()



-- Result
[<Project13 Object>]

Project id = 11pp11pp11-1111-1111-1111-1111pppp0013
Project name = Project 13

 

위 예시는 Filtering을 project에 적용한 예시입니다.

RequestOptions 객체를 만드는 것은 완전히 동일하며, 단순히 get method를 project에 적용하면 됩니다.

 

 

 

 

 

 

 

import tableauserverclient as TSC

id = 'user_1'
pw = 'pw_1'
url_tableau = 'https://tableau-server.test.com'

server = TSC.Server(url_tableau)
tableau_auth = TSC.TableauAuth(id, pw)


server.auth.sign_in(tableau_auth)


req_option = TSC.RequestOptions()
req_option.filter.add(TSC.Filter(TSC.RequestOptions.Field.Tags,
                                 TSC.RequestOptions.Operator.Equals,
                                 'important_workbook'))

list_workbook_obj, pagination_item = server.workbooks.get(req_option)
print(list_workbook_obj)

workbook_obj = list_workbook_obj[0]

print('Workbook id =', workbook_obj.id)
print('Workbook name =', workbook_obj.name)


server.auth.sign_out()



-- Result
[<Workbook3 Object>]

Workbook id = 11ww11ww11-1111-1111-1111-1111wwww0003
Workbook name = Workbook 3

 

이번에는 RequestOptions의 Field를 Tags로 설정했습니다.

Tableau의 Workbook을 만들 때 Tag를 설정할 수 있는데 그런 Tag를 기준으로 filtering을 할 수도 있습니다.

 

 

 

 

 

 

 

 

RequestOptions에 적용할 수 있는 Field의 종류와 Operator의 종류는 tableauserverclient 공식 문서에서 확인할 수 있습니다.

 

RequestOptions = https://tableau.github.io/server-client-python/docs/api-ref#requests

 

 

Field 옵션 중 대표적인 것은 아래와 같습니다.

 

Field Description
Name Project/Workbook/View 이름
Tags Project/Workbook/View 태그
OwnerName Project/Workbook/View의 소유자 이름
CreatedAt Project/Workbook/View의 생성 시점
UpdatedAt Project/Workbook/View의 업데이트 시점

 

 

Operator 옵션 중 대표적인 것은 아래와 같습니다.

 

Operator Description
Equals Field = Value
GreaterThan Field > Value
GreaterThanOrEqual Field >= Value
LessThan Field < Value
LessThanOrEqual Field <= Value
In Field in Value

 

 

 

 

 

 

728x90
반응형
Comments