일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- c#
- list
- PySpark
- Python
- Mac
- Google Spreadsheet
- google apps script
- Kotlin
- string
- Github
- Redshift
- Tkinter
- math
- GIT
- 파이썬
- dataframe
- Java
- PostgreSQL
- SQL
- Google Excel
- gas
- matplotlib
- Excel
- django
- numpy
- PANDAS
- Apache
- hive
- array
- Today
- Total
달나라 노트
Python tableauserverclient : RequestOptions (Filtering) 본문
Python tableauserverclient : RequestOptions (Filtering)
CosmosProject 2022. 5. 25. 20:51
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 |
'Python > Python tableauserverclient' 카테고리의 다른 글
Python tableauserverclient : server.version (tableau server version setting, tableau server 버전 설정) (0) | 2022.05.26 |
---|---|
Python tableauserverclient : populate (2) | 2022.05.25 |
Python tableauserverclient : get (project class 얻기, workbook class 얻기, view class 얻기) (0) | 2022.05.25 |
Python tableauserverclient : Refresh workbook (0) | 2020.12.21 |
Python tableauserverclient : Filtering (0) | 2020.12.21 |