{"id":26911461,"url":"https://github.com/kimrass/tableau","last_synced_at":"2025-09-16T16:20:52.993Z","repository":{"id":113500358,"uuid":"484502878","full_name":"KimRass/Tableau","owner":"KimRass","description":"Data visualization in Tableau","archived":false,"fork":false,"pushed_at":"2024-01-04T15:26:05.000Z","size":63924,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-01-04T16:35:39.830Z","etag":null,"topics":["data-visualization","tableau"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KimRass.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-04-22T16:35:10.000Z","updated_at":"2024-01-04T16:35:42.092Z","dependencies_parsed_at":"2024-01-04T16:45:55.991Z","dependency_job_id":null,"html_url":"https://github.com/KimRass/Tableau","commit_stats":null,"previous_names":["kimrass/data_vis_in_tableau","kimrass/tableau"],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KimRass%2FTableau","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KimRass%2FTableau/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KimRass%2FTableau/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KimRass%2FTableau/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KimRass","download_url":"https://codeload.github.com/KimRass/Tableau/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246656954,"owners_count":20812918,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-visualization","tableau"],"created_at":"2025-04-01T14:38:29.056Z","updated_at":"2025-09-16T16:20:47.972Z","avatar_url":"https://github.com/KimRass.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"Written by KimRass\n\n# Order of Operations\n- Context Filters -\u003e `{FIXED:}` -\u003e Dimensition Filters(Actions, Groups) -\u003e `{INCLUDE:}`, `{EXCLUDE:}` -\u003e Blending -\u003e Table Calculations -\u003e Table Calculation Filters(`FIRST()`, `LAST()`) -\u003e Manually Hidden Marks\n\n# Number\n\n# String\n## `LEFT()`, `RIGHT()`\n```\nLEFT(\"█████\",Round([사용하실 측정값]*5,0))\n```\n## `MID()`\n## CONTAINS()\n```\nCONTAINS([mbr_id], \"MBR\")\n```\n\n# Date\n## `DATEDIFF()`\n```\nDATEDIFF(\"quarter\", [고객별 최초 구매일], [고객별 최초 재구매일 ])\n```\n## `DATEADD()`\n```\nDATEADD(\"month\", 1, DATEADD(\"day\", -1, DATE(STR([Year Month]) + \"01\")))\n```\n```\nIF DAY(TODAY()) \u003c 21\nTHEN DATETRUNC(\"month\", DATEADD(\"month\", - 1, TODAY())) - 1\nELSE DATETRUNC(\"month\", TODAY()) - 1\nEND\n```\n## `DATETRUNC()`\n```\nDATETRUNC(\"week\", [Order Date])\n```\n## `DATEPARSE()`\n```\nDATEPARSE(\"YYYYMM\", STR([연월]))\n```\n\n# `Logical`\n## `CASE WHEN THEN END`\n```\nCASE [Sort Criteria Selection]\nWHEN \"Sales\" THEN SUM([Sales])\nWHEN \"Profit\" THEN SUM([Profit])\nWHEN \"Profit Ratio\" THEN [Profit Ratio]\nWHEN \"Discount\" THEN AVG([Discount])\nEND\n```\n## `IF ELSEIF ELSE THEN END`\n```\nIF [검색할 변수] == \"처리결과\"\nTHEN [처리결과]\nELSEIF [검색할 변수] == \"본부\"\nTHEN [본부]\nELSEIF [검색할 변수] == \"팀명\"\nTHEN [팀명]\nEND\n```\n## `IN()`\n## `ZN()`\n```\nSUM(IF (DATEDIFF(\"year\", [계약금1차일자], [기준 날짜]) == 0\nAND [계약금1차일자] \u003c= [기준 날짜])\nTHEN [_]\nEND)\n- ZN(SUM(IF (DATEDIFF(\"year\", [계약금1차일자], [기준 날짜]) == 0\nAND [해약일자] \u003c= [기준 날짜]\nAND [계약여부] == \"N\")\nTHEN [_]\nEND))\n```\n## `COUNT()`, `COUNTD()`\n```\nCOUNT(IF [계약금1차일자] \u003c= [기준 날짜]\nTHEN [계약여부]\nEND)\n- COUNT(IF ([계약금1차일자] \u003c= [기준 날짜]\nAND [계약여부] = \"N\")\nTHEN [계약여부]\nEND)\n```\n\n# Aggregate\n## ATTR()\n- Return the value of the given expression if only have a single value for all rows in the group, otherwise display `*`. NULL is ignored.\n## AVG()\n## {FIXED:}\n```\n([기준 날짜] \u003e= [분양일])\nAND ([기준 날짜] \u003c= [완공예정])\nOR\n([기준 날짜] \u003e [완공예정]\nAND {FIXED [사업지], [분양구분], [분양종류]:[현재 미분양]} \u003e 0)\n```\n```\n{FIXED [본부], [팀명]:\nCOUNT(IF YEAR([접수일]) == 2021\nTHEN 1\nELSE NULL\nEND)}\n```\n```\nIF {COUNT([Orders])}\n== {FIXED [Region]:COUNT([Orders])}\nTHEN [State]\nELSE [Region]\nEND\n```\n- Compute an aggregate using only the specified dimensions.\n- Reference: https://www.youtube.com/watch?v=P-yj-Jzkq_c\u0026list=PLyipEw5AFv5QvjCCYw_ODFTSKVXhkDiQW\u0026index=3\n## {INCLUDE:}\n```\n{INCLUDE [City]:AVG([Sales])}\n```\n- Compute an aggregate using the specified dimensions and the view dimensions.\n- Reference: https://www.youtube.com/watch?v=JW3iIdyT_hM\u0026list=PLyipEw5AFv5RVvw9X4a-Q-LQxbBqsU9Z1\u0026index=4\n## {EXCLUDE:}\n```\n{EXCLUDE [Sub-Category]:AVG([Sales])}\n```\n- Compute and aggregate excluding the specified dimensions if present in the view.\n- Reference: https://www.youtube.com/watch?v=RWIhdRiQ3Ic\u0026list=PLyipEw5AFv5RVvw9X4a-Q-LQxbBqsU9Z1\u0026index=3\n\n# Table Calculation\n## FIRST(), LAST()\n```\nLAST() \u003c= 23\n```\n- Return the number of rows from the current row to the first(last) row in the partition.\n- Reference: https://www.youtube.com/watch?v=k41o1m9xsR8\u0026list=PLyipEw5AFv5QvjCCYw_ODFTSKVXhkDiQW\u0026index=4\u0026t=47s\n## INDEX()\n- Return the index of the current row in the partition.\n## SIZE()\n- Return the number of rows in the partition.\n## WINDOW_AVG(), WINDOW_COUNT(), WINDOW_MAX(), WINDOW_MIN(), WINDOW_SUM()\n```\n(SUM([Sales]) - WINDOW_MIN(SUM([Sales])))/(WINDOW_MAX(SUM([Sales])) - WINDOW_MIN(SUM([Sales])))\n```\n```\nWINDOW_AVG(SUM([Sales]), -[Window Selection], 0)\n```\n- Reference: https://www.youtube.com/watch?v=8YMWH_ozstE\u0026t=610s\n## RANK()\n```\nRANK(SUM([Size]))\n```\n## TOTAL()\n## LOOKUP()\n```\nLOOKUP(ATTR([Customer Name]), 0)\n```\n- Return the value of the given expression in a target row, specified as a relative offset from the current row.\n- Reference: https://www.youtube.com/watch?v=IRZAbkrkj60\u0026list=PLyipEw5AFv5QvjCCYw_ODFTSKVXhkDiQW\u0026index=4\u0026t=22s\n## RUNNING_COUNT(), RUNNING_SUM()\n```\nRUNNING_SUM(COUNTD([Product Name]))/TOTAL(COUNTD([Product Name]))\n```\n```\nRUNNING_SUM(\nCOUNT(\nIF [Pivot Field Names] == \"가입일\"\nTHEN [Pivot Field Values]\nEND))\n- RUNNING_SUM(\nCOUNT(\nIF [Pivot Field Names] == \"탈퇴일\"\nTHEN [Pivot Field Values]\nEND))\n```\n## SCRIPT_BOOL(), SCRIPT_INT(), SCRIPT_REAL(), SCRIPT_STR()\n```\nRIGHT(\nSCRIPT_STR(\n\"import urllib\nfrom bs4 import BeautifulSoup as bs\nurl = f'http://www.opinet.co.kr/api/avgLastWeek.do?prodcd=B027\u0026code=F916210128\u0026out=xml'\nxml = urllib.request.urlopen(url).read().decode('utf8')\nsoup = bs(xml, 'lxml')\nreturn soup.find('sta_dt').get_text()\",\nATTR([댓글생성자id])), 6)\n```\n\n# Spatial\n## DISTANCE()\n## MAKEPOINT()\n\n# ELSE\n## RANDOM()\n```\n127 + 2.5*(RANDOM() - 0.2)\n```\n\n# Functions\n## Custom Number Format\n```\n\"+\"0;\"-\"0\n```\n```\n(+0.0%);(-0.0%)\n```\n```\n(000,000,000)\n```\n- `Default Properties` -\u003e `Number Format...` -\u003e `Custom`\n- `Format` -\u003e `Numbers:` -\u003e `Custom`\n- Reference: https://www.youtube.com/watch?v=QhRjOF3M60k\n## Histogram\n- `Create` -\u003e `Bins...`\n- Reference: https://www.youtube.com/watch?v=C1uAQBIPYk4\n## Highlight Table\n- `Use Separate Legends` \u003c-\u003e `Combine Legends`\n- Reference: https://www.youtube.com/watch?v=YXYaDq3qtsw\n## Nested Sorting\n- `Create` -\u003e `Combined Field`\n- Reference: https://www.youtube.com/watch?v=sEUttHntepU\n## Copy Format\n- `Copy Formatting` -\u003e `Paste Formatting`\n## Match Mark Color\n- `Mark Cards` -\u003e `Label` -\u003e `Font` -\u003e `Match Mark Color`\n\n# Shortcut Keys\n## Ctrl + W\n- Swap Rows and Columns.\n## Ctrl + M\n- New Worksheet.\n## Alt + Shift + Backspace\n- Clear Worksheet.\n## Alt + I\n- `Filters`\n## Ctrl + F\n- Search.\n## Ctrl + Tab, Ctrl + PgDn\n- Move to next Worksheet, Dashboard, or Story.\n## Ctrl + Shift + Tab, Ctrl + PgUp\n- Move to previous Worksheet Dashboard, or Story.\n## Ctrl + B, Ctrl + Shift + B\n- Zoom Out or Zoom In respectively.\n## Alt + Shift + (C, X, F, or T)\n- Move Fileds to Columns, Rows, Filters or Text respectively.\n## Ctrl + H\n- Presentation Mode.\n## Alt + A -\u003e C\n- `Create Calculate Field...`\n## ALt + A -\u003e O -\u003e G(T)\n- `Show Row(Column) Grand Totals`\n## Alt + F -\u003e A\n- `Save As...`\n## Alt + D -\u003e R\n- `Edit Blend Relationships...`\n## Alt + D -\u003e X\n- `Refresh All Extracts...`\n## Alt + W -\u003e O\n- `Tooltip...`\n## Alt + W -\u003e C -\u003e I, Alt + B -\u003e C\n- `Image...`, `Copy Image` respectively\n## Alt + B -\u003e X\n- `Export Image...`\n## Alt + S -\u003e W\n- `Publish Workbook...`\n## Alt + O -\u003e D or W\n- `Dashboard...` or `Workbook...`\n\n# `Publish Workbook to Tableau Server`\n## `More Options`\n### `Show sheets as tabs`\n### `Show selections`\n### `Include external files`\n\n# URL Parameters\n## `:showAppBanner=false`\n## `:display_count=n`\n## `:showVizHome=n`\n## `:origin=viz_share_link`\n## `:embed=yes`\n## `:toolbar=top`\n\n# Tableau Server\n## `Server Status`\n### `Background Tasks for Extracts`\n\n# Options\n## `Dashboard`\n- Uncheck `Add Phone Layouts to New Dashboards`\n## `Worksheet`\n- Uncheck `Show Sort Contols`\n## `Analysis`\n- `Table Layout` -\u003e Toggle `Show Field Labels for Rows`\n\n# `tableauserverclient`\n```python\nimport tableauserverclient as TSC\n```\n## `TSC.PersonalAccessTokenAuth()`\n```python\ntableau_auth = TSC.PersonalAccessTokenAuth(\"admin_TOKEN\", token)\n```\n## `TSC.Server()`\n```python\nserver = TSC.Server(\"http://218.153.56.75/\", use_server_version=True)\n```\n### `server.auth`\n#### `server.auth.sign_in()`\n```python\nwith server.auth.sign_in(tableau_auth):\n```\n#### `server.auth.sign_out()`\n### `server.projects`\n#### `server.projects.get()`\n### `server.groups`\n#### `server.groups.get()`\n```python\nall_groups, pagination_item = server.groups.get(req_options=req_opts)\n```\n#### `server.groups.populate_users()`\n```python\ngroup_user = list()\nwith server.auth.sign_in(tableau_auth):\n    groups, pagination_item = server.groups.get(req_options=req_opts)\n    for group in groups[1:]:\n        pagination_item = server.groups.populate_users(group, req_options=req_opts)\n        group_user.extend([(group.name,) + empls[user.name] + (user.site_role,) if user.name in empls.keys() else (group.name, None, None, None, user.name, user.site_role) for user in group.users])\n```\n#### `server.groups.create()`\n### `server.users`\n#### `server.users.add()`\n#### `servers.users.update()`\n#### `server.users.remove()`\n### `server.workbooks`\n## `TSC.GroupItem()`\n## `TSC.UserItem`\n### `TSC.UserItem.Roles`\n## `TSC.RequestOptions()`\n```python\nreq_opts = TSC.RequestOptions(pagesize=1000)\n```\n#### `TSC.UserItem.Roles.Creator`, `TSC.UserItem.Roles.Explorer`, `TSC.UserItem.Roles.ExplorerCanPublish`, `TSC.UserItem.Roles.ServerAdministrator`, `TSC.UserItem.Roles.SiteAdministratorCreator`, `TSC.UserItem.Roles.Unlicensed`, `TSC.UserItem.Roles.ReadOnly`, `TSC.UserItem.Roles.Viewer`","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkimrass%2Ftableau","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkimrass%2Ftableau","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkimrass%2Ftableau/lists"}