<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Techno Whisp</title>
	<atom:link href="https://technowhisp.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://technowhisp.com/</link>
	<description>Whispering Technology</description>
	<lastBuildDate>Sat, 03 Jun 2023 22:27:06 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.2.9</generator>
	<item>
		<title>Power BI Visual Padding using themes</title>
		<link>https://technowhisp.com/power-bi-visual-padding-using-themes/</link>
					<comments>https://technowhisp.com/power-bi-visual-padding-using-themes/#comments</comments>
		
		<dc:creator><![CDATA[Jose Cherian]]></dc:creator>
		<pubDate>Sat, 03 Jun 2023 22:23:30 +0000</pubDate>
				<category><![CDATA[Power BI]]></category>
		<guid isPermaLink="false">http://technowhisp.com/?p=1246</guid>

					<description><![CDATA[<p>Visual padding was a long awaited feature in Power BI and Microsoft added support for it  in 2023-March release of Power BI. In the past, users had to use dirty workarounds to create padding and this new feature is a great addition to Power BI. As of May 2023 release, the padding feature has some [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/power-bi-visual-padding-using-themes/">Power BI Visual Padding using themes</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Visual padding was a long awaited feature in Power BI and Microsoft added support for it  in <a href="https://powerbi.microsoft.com/en-sg/blog/power-bi-march-2023-feature-summary/#post-22359-_Toc128998036">2023-March release of Power BI</a>. In the past, users had to use dirty workarounds to create padding and this new feature is a great addition to Power BI.</p>
<p>As of May 2023 release, the padding feature has some limitations:</p>
<ul>
<li>Padding adjustments are per side; no shortcut to  adjust top, bottom, left and right  at one go</li>
<li>No way to define a default padding at report level</li>
</ul>
<p>To overcome this issue, we can control the Power BI visual padding using themes.  We will use a simple theme that only adjust the padding for demonstration. Please save the below snippet as a json file so that we can use it as  a theme.</p>
<div>
<div>
<pre class="EnlighterJSRAW" data-enlighter-language="json">{
    "name": "Padding Demo",
    "visualStyles": {
        "*": {
            "*": {
                "padding":[{
                    "top":20,
                    "bottom":20,
                    "left": 20,
                    "right":20
                 }]
            }
        }

    }
}

</pre>
<p>To use our new theme,  go to <strong>View</strong>  &gt; <strong>Browse for themes</strong> and select the the json file created in previous step. Below screen grab shows the procedure and the end results.</p>
<p><a href="http://technowhisp.com/wp-content/uploads/Padding_demo.gif"><img decoding="async" loading="lazy" class="aligncenter wp-image-1255 size-full" src="http://technowhisp.com/wp-content/uploads/Padding_demo.gif" alt="Power BI Padding Demo" width="946" height="719" /></a></p>
</div>
</div>
<p>&nbsp;</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/power-bi-visual-padding-using-themes/">Power BI Visual Padding using themes</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://technowhisp.com/power-bi-visual-padding-using-themes/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Kaggle API &#8211; The Missing Python Documentation</title>
		<link>https://technowhisp.com/kaggle-api-python-documentation/</link>
					<comments>https://technowhisp.com/kaggle-api-python-documentation/#comments</comments>
		
		<dc:creator><![CDATA[Jose Cherian]]></dc:creator>
		<pubDate>Wed, 19 Feb 2020 15:30:19 +0000</pubDate>
				<category><![CDATA[Kaggle]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<guid isPermaLink="false">http://technowhisp.com/?p=1132</guid>

					<description><![CDATA[<p>Official Kaggle API is a command line utility written in Python3, but the documentation only covers command line usage and not Python usage. This post will explain how you can use the API(Version 1.5.6) within Python. 1. Installing Kaggle API You can run pip install kaggle  to install the api. You might need to run pip [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/kaggle-api-python-documentation/">Kaggle API &#8211; The Missing Python Documentation</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Official <a href="https://github.com/Kaggle/kaggle-api">Kaggle API</a> is a command line utility written in Python3, but the documentation only covers command line usage and not Python usage. This post will explain how you can use the API(Version 1.5.6) within Python.</p>
<h3>1. Installing Kaggle API</h3>
<p style="padding-left: 40px;">You can run <strong><span class="lang:sh decode:true crayon-inline">pip install kaggle</span></strong><span style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;">  to install the api. You might need to run <strong><span class="lang:sh decode:true crayon-inline">pip install &#8211;user kaggle</span>  </strong>on Linux or Mac if you are encountering issues with the installation.</span></p>
<h3></h3>
<h3>2. Setting up the API Key</h3>
<p style="padding-left: 40px;">Kaggle API requires an API token. Go to the Account Tab (<span class="lang:sh decode:true crayon-inline ">https://www.kaggle.com/&lt;username&gt;/account</span> ) and click &#8216;Create API Token&#8217;.  A file named <strong>kaggle.json</strong> will be downloaded. Move this file in to <span class="lang:sh decode:true crayon-inline ">~/.kaggle/</span>  folder in Mac and Linux or to <span class="lang:sh decode:true crayon-inline ">C:\Users\&lt;username&gt;\.kaggle\ </span> on windows. This is required for authentication and do not skip this step.</p>
<p style="padding-left: 40px;">Alternatively, you can populate <span class="lang:sh decode:true crayon-inline ">KAGGLE_USERNAME</span> and <span class="lang:sh decode:true crayon-inline ">KAGGLE_KEY</span>  environment variables with values from <strong>kaggle.json</strong> to get the api to authenticate. Please note that environment variables have precedence over the kaggle.json file and hence setting them incorrectly will result in authentication failure even if you have correct contents in kaggle.json file.</p>
<h3>3. Initializing and Authenticating</h3>
<p>You can use below lines of code to get an authenticated API instance.</p>
<pre class="lang:python decode:true EnlighterJSRAW" data-enlighter-language="python">from kaggle.api.kaggle_api_extended import KaggleApi
api = KaggleApi()
api.authenticate()</pre>
<h3></h3>
<h3>4. Interacting with competitions</h3>
<h4 style="padding-left: 40px;">4.1 Searching competitions</h4>
<pre class="EnlighterJSRAW" data-enlighter-language="python"># Searching competitions
# Signature: competitions_list(group=None, category=None, sort_by=None, page=1, search=None)
competitions = api.competitions_list(search='cat',category="playground")

# competitions is a list of competition objects.
# iterate though each item to access individual competition
for comp in competitions:
    print(comp.ref,comp.reward,comp.userRank,sep=',')</pre>
<p>&nbsp;</p>
<p style="padding-left: 40px;">Most of the list methods in the api have a command line counter part which can be used to display the formatted results. It is not really useful for automation tasks as they dont return anything, but might be useful when exploring the api.</p>
<p>&nbsp;</p>
<figure id="attachment_1140" aria-describedby="caption-attachment-1140" style="width: 717px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="wp-image-1140 size-full" src="http://technowhisp.com/wp-content/uploads/2020/02/Pasted-into-Kaggle-API-The-Missing-Python-Documentation.png" alt="competitions_list_cli" width="717" height="96" srcset="https://technowhisp.com/wp-content/uploads/2020/02/Pasted-into-Kaggle-API-The-Missing-Python-Documentation.png 717w, https://technowhisp.com/wp-content/uploads/2020/02/Pasted-into-Kaggle-API-The-Missing-Python-Documentation-300x40.png 300w" sizes="(max-width: 717px) 100vw, 717px" /><figcaption id="caption-attachment-1140" class="wp-caption-text">competitions_list_cli</figcaption></figure>
<h4 style="padding-left: 40px;">4.2 Listing and downloading competition Files</h4>
<pre class="lang:python decode:true EnlighterJSRAW" data-enlighter-language="python"># List files for a competition
# Signature: competitions_data_list_files(id, **kwargs)
api.competitions_data_list_files('titanic')

# Download all files for a competition
# Signature: competition_download_files(competition, path=None, force=False, quiet=True)
api.competition_download_files('titanic')

# Download single file for a competition
# Signature: competition_download_file(competition, file_name, path=None, force=False, quiet=False)
api.competition_download_file('titanic','gender_submission.csv')</pre>
<h4 style="padding-left: 40px;">4.3 Submitting to competitions</h4>
<pre class="lang:python decode:true EnlighterJSRAW" data-enlighter-language="python"># Signature: competition_submit(file_name, message, competition, quiet=False)
api.competition_submit('gender_submission.csv','API Submission','titanic')</pre>
<h4 style="padding-left: 40px;">4.4 Retrieving Leader Board</h4>
<pre class="lang:python decode:true EnlighterJSRAW" data-enlighter-language="python"># Signature: competition_view_leaderboard(id, **kwargs)
leaderboard = api.competition_view_leaderboard('titanic')</pre>
<h3></h3>
<h3>5. Interacting with datasets</h3>
<h4 style="padding-left: 40px;">5.1 Searching datasets</h4>
<pre class="lang:python decode:true EnlighterJSRAW" data-enlighter-language="python"># Signature: dataset_list(sort_by=None, size=None, file_type=None, license_name=None, tag_ids=None, search=None, user=None, mine=False, page=1, max_size=None, min_size=None) 
datasets=api.dataset_list(search='demographics',license_name='cc', file_type='csv')

# datasets is a collection of dataset
for dat in  datasets:
     print(dat.ref,dat.viewCount,dat.voteCount,sep=',')</pre>
<h4 style="padding-left: 40px;">5.2 Listing dataset files</h4>
<pre class="lang:python decode:true EnlighterJSRAW" data-enlighter-language="python">#Signature: dataset_list_files(dataset)
# dataset string should be in format [owner]/[dataset-name]
api.dataset_list_files('avenn98/world-of-warcraft-demographics').files</pre>
<h4 style="padding-left: 40px;">5.3 Downloading Files</h4>
<pre class="lang:python decode:true EnlighterJSRAW" data-enlighter-language="python"># Download all files of a dataset
# Signature: dataset_download_files(dataset, path=None, force=False, quiet=True, unzip=False)
api.dataset_download_files('avenn98/world-of-warcraft-demographics')

# download single file
#Signature: dataset_download_file(dataset, file_name, path=None, force=False, quiet=True)
api.dataset_download_file('avenn98/world-of-warcraft-demographics','WoW Demographics.csv')</pre>
<h3></h3>
<h3>6. Interacting with Kernels</h3>
<h4 style="padding-left: 40px;">6.1 Searching Kernels</h4>
<pre class="lang:python decode:true EnlighterJSRAW" data-enlighter-language="python">#Signature: kernels_list(page=1, page_size=20, dataset=None, competition=None, parent_kernel=None, search=None, mine=False, user=None, language=None, kernel_type=None, output_type=None, sort_by=None)
kernels = api.kernels_list(search='titanic')
for kernel in kernels:
     print(kernel.ref,kernel.totalVotes,kernel.language,sep=',')</pre>
<h4 style="padding-left: 40px;">6.2 Retrieve a kernels output</h4>
<pre class="lang:python decode:true EnlighterJSRAW" data-enlighter-language="python"># Retrieve output for a specified kernel
# Signature: kernels_output(kernel, path, force=False, quiet=True)
api.kernels_output('startupsci/titanic-data-science-solutions',path='.')</pre>
<h4 style="padding-left: 40px;">6.3 Get the status of the latest kernel run</h4>
<pre class="lang:python decode:true EnlighterJSRAW" data-enlighter-language="python"># Signature: kernels_status(kernel)
api.kernels_status('startupsci/titanic-data-science-solutions')</pre>
<p>&nbsp;</p>
<h4 style="padding-left: 40px;">6.4 Pull a kernel to local machine</h4>
<pre class="lang:python decode:true EnlighterJSRAW" data-enlighter-language="python"># Signature: kernels_pull(kernel, path, metadata=False, quiet=True)
api.kernels_pull('startupsci/titanic-data-science-solutions',path='.')</pre>
<h4 style="padding-left: 40px;">6.5 Initialize metadata file for a kernel</h4>
<pre class="lang:python decode:true EnlighterJSRAW" data-enlighter-language="python"># Signature: kernels_initialize(folder)
api.kernels_initialize('./demo')</pre>
<h4 style="padding-left: 40px;">6.6 Pushing a kernel to Kaggle</h4>
<pre class="lang:python decode:true EnlighterJSRAW" data-enlighter-language="python"># Need to have a valid metadata file called 'kernel-metadata.json' in the folder
# Create one using kernels_initialize if you dont have one
# Signature: kernels_push(folder)
api.kernels_push('./demo')</pre>
<p>&nbsp;</p>
<p>Have any questions? Please add it as comments and I will try my best to answer them.</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/kaggle-api-python-documentation/">Kaggle API &#8211; The Missing Python Documentation</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://technowhisp.com/kaggle-api-python-documentation/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Tableau Prep Python Integration &#8211; Installing and Setting Up TabPy</title>
		<link>https://technowhisp.com/tableau-prep-python-integration-installing-and-setting-up-tabpy/</link>
					<comments>https://technowhisp.com/tableau-prep-python-integration-installing-and-setting-up-tabpy/#comments</comments>
		
		<dc:creator><![CDATA[Jose Cherian]]></dc:creator>
		<pubDate>Fri, 20 Sep 2019 11:32:56 +0000</pubDate>
				<category><![CDATA[Tableau Prep]]></category>
		<guid isPermaLink="false">http://technowhisp.com/?p=1076</guid>

					<description><![CDATA[<p>Tableau Prep Python integration was added in  2019.3 and this post shows how to install and setup TabPy for Tableau Prep. Tableau recommends to run TabPy in a virtual environment and we will use Anaconda to manage our virtual environment. 1.  Downloading and Installing Anaconda You can download Anaconda for free from this link. Please [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/tableau-prep-python-integration-installing-and-setting-up-tabpy/">Tableau Prep Python Integration &#8211; Installing and Setting Up TabPy</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Tableau Prep Python integration was added in  2019.3 and this post shows how to install and setup TabPy for Tableau Prep. Tableau recommends to run TabPy in a virtual environment and we will use Anaconda to manage our virtual environment.</p>
<h3></h3>
<h3>1.  Downloading and Installing Anaconda</h3>
<p>You can download Anaconda for free from <a href="https://www.anaconda.com/distribution/#download-section">this link.</a> Please remember to choose the correct distribution and architecture. Below image shows Windows 64 bit Python 3.7 download link and minimum version required by Tabpy is Python 3.6.</p>
<p>&nbsp;</p>
<figure id="attachment_1073" aria-describedby="caption-attachment-1073" style="width: 1006px" class="wp-caption aligncenter"><a href="http://technowhisp.com/wp-content/uploads/2019/09/Anaconda.png"><img decoding="async" loading="lazy" class="size-full wp-image-1073" src="http://technowhisp.com/wp-content/uploads/2019/09/Anaconda.png" alt="" width="1006" height="493" srcset="https://technowhisp.com/wp-content/uploads/2019/09/Anaconda.png 1006w, https://technowhisp.com/wp-content/uploads/2019/09/Anaconda-300x147.png 300w, https://technowhisp.com/wp-content/uploads/2019/09/Anaconda-768x376.png 768w" sizes="(max-width: 1006px) 100vw, 1006px" /></a><figcaption id="caption-attachment-1073" class="wp-caption-text">Downloading Anaconda For Windows</figcaption></figure>
<p>Once the installer  is downloaded,  double click on it to start the installation. Default options are fine and the installation process will take about 10 minutes.</p>
<p>&nbsp;</p>
<figure id="attachment_1074" aria-describedby="caption-attachment-1074" style="width: 623px" class="wp-caption aligncenter"><a href="http://technowhisp.com/wp-content/uploads/2019/09/conda_install.gif"><img decoding="async" loading="lazy" class="size-full wp-image-1074" src="http://technowhisp.com/wp-content/uploads/2019/09/conda_install.gif" alt="" width="623" height="461" /></a><figcaption id="caption-attachment-1074" class="wp-caption-text">Installing Anaconda</figcaption></figure>
<h3></h3>
<h3>2. Creating Virtual Environment</h3>
<p>From start menu, Search for Anaconda Prompt and open it. Execute following commands in order to create a virtual environment called &#8216;tpy&#8217; and then to activate it.</p>
<pre class="lang:batch decode:true">conda create -n tpy python=3.7
activate tpy</pre>
<p>&nbsp;</p>
<figure id="attachment_1080" aria-describedby="caption-attachment-1080" style="width: 390px" class="wp-caption aligncenter"><a href="http://technowhisp.com/wp-content/uploads/2019/09/Anaconda_Prompt.png"><img decoding="async" loading="lazy" class="size-full wp-image-1080" src="http://technowhisp.com/wp-content/uploads/2019/09/Anaconda_Prompt.png" alt="Anaconda Prompt" width="390" height="717" srcset="https://technowhisp.com/wp-content/uploads/2019/09/Anaconda_Prompt.png 390w, https://technowhisp.com/wp-content/uploads/2019/09/Anaconda_Prompt-163x300.png 163w" sizes="(max-width: 390px) 100vw, 390px" /></a><figcaption id="caption-attachment-1080" class="wp-caption-text">Anaconda Prompt</figcaption></figure>
<h3></h3>
<h3>3. Installing TabPy</h3>
<p>From the activated &#8216;tpy&#8217; environment, execute following commands:</p>
<pre class="lang:batch decode:true">pip install tabpy
pip install pandas
tabpy</pre>
<p>The first two lines will install TabPy and pandas (required for Prep) and the third line will start the tabpy server at port 9004.</p>
<figure id="attachment_1075" aria-describedby="caption-attachment-1075" style="width: 973px" class="wp-caption aligncenter"><a href="http://technowhisp.com/wp-content/uploads/2019/09/tabpy_install.gif"><img decoding="async" loading="lazy" class="size-full wp-image-1075" src="http://technowhisp.com/wp-content/uploads/2019/09/tabpy_install.gif" alt="Installing and Running Tabpy" width="973" height="508" /></a><figcaption id="caption-attachment-1075" class="wp-caption-text">Installing and Running Tabpy</figcaption></figure>
<h3></h3>
<h3>4. Tableau Prep Python Integration</h3>
<p>In Order to use Python code in the flow, we need to use &#8216;Add Script&#8217; step. We will use a simple function to sort the output data in descending order of sales. Save the below lines of code in a file with .py extension.</p>
<pre class="lang:python decode:true" title="myscript.py">def sort_descending(df):
    """Sorts the dataframe in descending order of sales."""
    return df.sort_values(by=['Sales'], ascending=False)</pre>
<p>Below screen grab shows the entire process. You can <a href="http://technowhisp.com/wp-content/uploads/2019/09/Python_Prep.tflx">download the packaged flow file here</a>.</p>
<figure id="attachment_1088" aria-describedby="caption-attachment-1088" style="width: 921px" class="wp-caption aligncenter"><a href="http://technowhisp.com/wp-content/uploads/2019/09/prep_python.gif"><img decoding="async" loading="lazy" class="size-full wp-image-1088" src="http://technowhisp.com/wp-content/uploads/2019/09/prep_python.gif" alt="Tableau Prep Python Integration" width="921" height="597" /></a><figcaption id="caption-attachment-1088" class="wp-caption-text">Tableau Prep Python Integration</figcaption></figure>
<h3></h3>
<h3>5. TabPy Additional Configurations</h3>
<p>TabPy is highly configurable and the configurations can be controlled using a configuration file. Common configuration settings include Changing port number, enabling HTTPS, Enabling Authentication, Change Logging Levels, etc.</p>
<p><a href="http://technowhisp.com/wp-content/uploads/2019/09/config.cfg">Download this sample configuration file</a> (use right click and save link as) and you can start TabPy server using the configuration using below command:</p>
<pre class="lang:batch decode:true">tabpy --config=path_to_the_downloaded_file</pre>
<p>Describing all configuration settings are beyond the scope of this post, but<a href="https://github.com/tableau/TabPy/blob/master/docs/server-config.md"> you can find details at this link</a>.</p>
<figure id="attachment_1099" aria-describedby="caption-attachment-1099" style="width: 972px" class="wp-caption aligncenter"><a href="http://technowhisp.com/wp-content/uploads/2019/09/prep_config.gif"><img decoding="async" loading="lazy" class="size-full wp-image-1099" src="http://technowhisp.com/wp-content/uploads/2019/09/prep_config.gif" alt="Running Tabpy with Configuration File" width="972" height="503" /></a><figcaption id="caption-attachment-1099" class="wp-caption-text">Running Tabpy with Configuration File</figcaption></figure>
<p>If you have any questions, please feel free to ask in the comments and I will try my best to answer.</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/tableau-prep-python-integration-installing-and-setting-up-tabpy/">Tableau Prep Python Integration &#8211; Installing and Setting Up TabPy</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://technowhisp.com/tableau-prep-python-integration-installing-and-setting-up-tabpy/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Tableau Prep &#8211; Aggregating Strings</title>
		<link>https://technowhisp.com/tableau-prep-aggregating-strings/</link>
					<comments>https://technowhisp.com/tableau-prep-aggregating-strings/#comments</comments>
		
		<dc:creator><![CDATA[Jose Cherian]]></dc:creator>
		<pubDate>Tue, 27 Aug 2019 21:12:22 +0000</pubDate>
				<category><![CDATA[Tableau Prep]]></category>
		<guid isPermaLink="false">http://technowhisp.com/?p=958</guid>

					<description><![CDATA[<p>Aggregating strings is a common task in data cleaning, but it is not yet supported in Tableau Prep out of the box.  This post is inspired by a Tableau community question where a user asked help on combining data from multiple rows into a single cell. This is a more generalised solution to that same [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/tableau-prep-aggregating-strings/">Tableau Prep &#8211; Aggregating Strings</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Aggregating strings is a common task in data cleaning, but it is not yet supported in Tableau Prep out of the box.  This post is inspired by a<a href="https://community.tableau.com/thread/302878"> Tableau community question </a>where a user asked help on combining data from multiple rows into a single cell. This is a more generalised solution to that same problem.</p>
<p>Before we start, I have to admit that this is a complicated flow for a simple problem. If we had a concatenate function in Tableau Prep aggregation step, we could have done this reshaping in a single step. There is already an <a href="https://community.tableau.com/ideas/8955">idea in the Ideas Forum</a>. Please upvote if you like this idea.</p>
<p>&nbsp;</p>
<p><strong>Requirement</strong></p>
<p>Data is in tall format which is analysis friendly, but we need to generate an output in csv which has one row per user and all his/her workdays are separated by comma. This output is an input to another application.</p>
<figure id="attachment_963" aria-describedby="caption-attachment-963" style="width: 543px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="wp-image-963 size-full" src="http://technowhisp.com/wp-content/uploads/2019/05/SCHEDULE.jpg" alt="Original Data" width="543" height="353" srcset="https://technowhisp.com/wp-content/uploads/2019/05/SCHEDULE.jpg 543w, https://technowhisp.com/wp-content/uploads/2019/05/SCHEDULE-300x195.jpg 300w" sizes="(max-width: 543px) 100vw, 543px" /><figcaption id="caption-attachment-963" class="wp-caption-text">Original Data</figcaption></figure>
<figure id="attachment_959" aria-describedby="caption-attachment-959" style="width: 282px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="wp-image-959 size-full" src="http://technowhisp.com/wp-content/uploads/2019/05/Result.jpg" alt="Aggregated Strings" width="282" height="164" /><figcaption id="caption-attachment-959" class="wp-caption-text">Required Result</figcaption></figure>
<p>This solution includes 5 Steps:</p>
<ol>
<li><strong>Create Row IDs per group</strong></li>
</ol>
<p style="padding-left: 40px;">In our case we need to create row Ids per employee. Please see this post about <a href="http://technowhisp.com/creating-unique-row-ids-in-tableau-prep/">creating row Ids</a> if you are having difficulty in generating row Ids per employee.</p>
<figure id="attachment_1050" aria-describedby="caption-attachment-1050" style="width: 550px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="wp-image-1050 size-full" src="http://technowhisp.com/wp-content/uploads/2019/08/Pasted-into-Tableau-Prep-Aggregating-Strings.png" alt="Creating Row IDs" width="550" height="192" srcset="https://technowhisp.com/wp-content/uploads/2019/08/Pasted-into-Tableau-Prep-Aggregating-Strings.png 550w, https://technowhisp.com/wp-content/uploads/2019/08/Pasted-into-Tableau-Prep-Aggregating-Strings-300x105.png 300w" sizes="(max-width: 550px) 100vw, 550px" /><figcaption id="caption-attachment-1050" class="wp-caption-text">Creating Row IDs</figcaption></figure>
<p>&nbsp;</p>
<figure id="attachment_1030" aria-describedby="caption-attachment-1030" style="width: 275px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-1030" src="http://technowhisp.com/wp-content/uploads/2019/08/data_with_row_id.jpg" alt="Data With Row IDs" width="275" height="206" /><figcaption id="caption-attachment-1030" class="wp-caption-text">Data With Row IDs</figcaption></figure>
<p style="padding-left: 40px;"><strong>2. Convert Row Ids to Field Names</strong></p>
<p style="padding-left: 40px;">Use a calculation to convert RowIDs like 1,2,3 to F1,F2,F3. We will use this column as field names later.</p>
<figure id="attachment_1051" aria-describedby="caption-attachment-1051" style="width: 454px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="wp-image-1051 size-full" src="http://technowhisp.com/wp-content/uploads/2019/08/Pasted-into-Tableau-Prep-Aggregating-Strings-1.png" alt="Creating Field Names" width="454" height="244" srcset="https://technowhisp.com/wp-content/uploads/2019/08/Pasted-into-Tableau-Prep-Aggregating-Strings-1.png 454w, https://technowhisp.com/wp-content/uploads/2019/08/Pasted-into-Tableau-Prep-Aggregating-Strings-1-300x161.png 300w" sizes="(max-width: 454px) 100vw, 454px" /><figcaption id="caption-attachment-1051" class="wp-caption-text">Creating Field Names</figcaption></figure>
<p style="padding-left: 40px;"><strong>3. Union with a dummy File to make field names consistent</strong></p>
<figure id="attachment_1037" aria-describedby="caption-attachment-1037" style="width: 539px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="wp-image-1037 size-full" src="http://technowhisp.com/wp-content/uploads/2019/08/dummy_header.jpg" alt="Dummy Header File" width="539" height="325" srcset="https://technowhisp.com/wp-content/uploads/2019/08/dummy_header.jpg 539w, https://technowhisp.com/wp-content/uploads/2019/08/dummy_header-300x181.jpg 300w" sizes="(max-width: 539px) 100vw, 539px" /><figcaption id="caption-attachment-1037" class="wp-caption-text">Dummy Header File</figcaption></figure>
<figure id="attachment_1039" aria-describedby="caption-attachment-1039" style="width: 938px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-1039" src="http://technowhisp.com/wp-content/uploads/2019/08/union_dummy..jpg" alt="Union with Dummy Header File" width="938" height="206" srcset="https://technowhisp.com/wp-content/uploads/2019/08/union_dummy..jpg 938w, https://technowhisp.com/wp-content/uploads/2019/08/union_dummy.-300x66.jpg 300w, https://technowhisp.com/wp-content/uploads/2019/08/union_dummy.-768x169.jpg 768w" sizes="(max-width: 938px) 100vw, 938px" /><figcaption id="caption-attachment-1039" class="wp-caption-text">Union with Dummy Header File</figcaption></figure>
<p style="padding-left: 40px;"><strong>4. Pivot Rows To columns</strong></p>
<p style="padding-left: 40px;">Add a pivot step and select row to columns. Drag ROW_ID in to the pivoted fields section and Workday to aggregate section. Use max as aggregation.</p>
<figure id="attachment_1041" aria-describedby="caption-attachment-1041" style="width: 1117px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-1041" src="http://technowhisp.com/wp-content/uploads/2019/08/pivot_field_names.jpg" alt="Pivot Rows To Columns" width="1117" height="766" srcset="https://technowhisp.com/wp-content/uploads/2019/08/pivot_field_names.jpg 1117w, https://technowhisp.com/wp-content/uploads/2019/08/pivot_field_names-300x206.jpg 300w, https://technowhisp.com/wp-content/uploads/2019/08/pivot_field_names-768x527.jpg 768w, https://technowhisp.com/wp-content/uploads/2019/08/pivot_field_names-1024x702.jpg 1024w" sizes="(max-width: 1117px) 100vw, 1117px" /><figcaption id="caption-attachment-1041" class="wp-caption-text">Pivot Rows To Columns</figcaption></figure>
<p style="padding-left: 40px;"><strong>5. Concatenate Fields and Clean</strong></p>
<p style="padding-left: 40px;">Create a field called &#8216;Work Days&#8217; with below formula  and keep only the required fields. Depending on your dataset, you might need to add more Fields in to your calculation. I am using 5 Fields(f1 to F5) here and the result is an aggregate string field.</p>
<figure id="attachment_1044" aria-describedby="caption-attachment-1044" style="width: 444px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-1044" src="http://technowhisp.com/wp-content/uploads/2019/08/concat.jpg" alt="Calculation to Concatenate Fields" width="444" height="223" srcset="https://technowhisp.com/wp-content/uploads/2019/08/concat.jpg 444w, https://technowhisp.com/wp-content/uploads/2019/08/concat-300x151.jpg 300w" sizes="(max-width: 444px) 100vw, 444px" /><figcaption id="caption-attachment-1044" class="wp-caption-text">Calculation to Concatenate Fields</figcaption></figure>
<p>&nbsp;</p>
<figure id="attachment_1045" aria-describedby="caption-attachment-1045" style="width: 1374px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-1045" src="http://technowhisp.com/wp-content/uploads/2019/08/Final-Flow.jpg" alt="Final Flow" width="1374" height="218" srcset="https://technowhisp.com/wp-content/uploads/2019/08/Final-Flow.jpg 1374w, https://technowhisp.com/wp-content/uploads/2019/08/Final-Flow-300x48.jpg 300w, https://technowhisp.com/wp-content/uploads/2019/08/Final-Flow-768x122.jpg 768w, https://technowhisp.com/wp-content/uploads/2019/08/Final-Flow-1024x162.jpg 1024w" sizes="(max-width: 1374px) 100vw, 1374px" /><figcaption id="caption-attachment-1045" class="wp-caption-text">Final Flow</figcaption></figure>
<p>&nbsp;</p>
<p>Please download the <a href="http://technowhisp.com/wp-content/uploads/2019/08/String_Aggregation.tflx">packaged flowfile</a> to play around with this flow.</p>
<p>&nbsp;</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/tableau-prep-aggregating-strings/">Tableau Prep &#8211; Aggregating Strings</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://technowhisp.com/tableau-prep-aggregating-strings/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Tableau Prep &#8211; Iterating Group And Replace</title>
		<link>https://technowhisp.com/tableau-prep-iterating-group-and-replace/</link>
					<comments>https://technowhisp.com/tableau-prep-iterating-group-and-replace/#comments</comments>
		
		<dc:creator><![CDATA[Jose Cherian]]></dc:creator>
		<pubDate>Mon, 29 Jul 2019 21:11:37 +0000</pubDate>
				<category><![CDATA[Tableau Prep]]></category>
		<guid isPermaLink="false">http://technowhisp.com/?p=923</guid>

					<description><![CDATA[<p>We can setup up a trigger to receive email alerts when ungrouped categories are detected in the flow, but how do we modify the flow to group the ungrouped categories? We will cover that in this post using the same flow used in the email trigger post. Click on the &#8216;Group  Category&#8217; step and you [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/tableau-prep-iterating-group-and-replace/">Tableau Prep &#8211; Iterating Group And Replace</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="http://technowhisp.com/tableau-prep-email-alerts/">We can setup up a trigger to receive email alerts when ungrouped categories are detected in the flow</a>, but how do we modify the flow to group the ungrouped categories? We will cover that in this post using the same flow used in the email trigger post.</p>
<figure id="attachment_916" aria-describedby="caption-attachment-916" style="width: 1441px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="wp-image-916 size-full" src="http://technowhisp.com/wp-content/uploads/2019/04/Ungroup_To_Server.jpg" alt="" width="1441" height="397" srcset="https://technowhisp.com/wp-content/uploads/2019/04/Ungroup_To_Server.jpg 1441w, https://technowhisp.com/wp-content/uploads/2019/04/Ungroup_To_Server-300x83.jpg 300w, https://technowhisp.com/wp-content/uploads/2019/04/Ungroup_To_Server-768x212.jpg 768w, https://technowhisp.com/wp-content/uploads/2019/04/Ungroup_To_Server-1024x282.jpg 1024w" sizes="(max-width: 1441px) 100vw, 1441px" /><figcaption id="caption-attachment-916" class="wp-caption-text">Current Flow We Setup For Generating Trigger</figcaption></figure>
<p>Click on the &#8216;Group  Category&#8217; step and you can see that there are two ungrouped categories as mentioned in the email trigger.</p>
<p><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-931" src="http://technowhisp.com/wp-content/uploads/2019/04/New_Cat.png" alt="" width="307" height="330" srcset="https://technowhisp.com/wp-content/uploads/2019/04/New_Cat.png 307w, https://technowhisp.com/wp-content/uploads/2019/04/New_Cat-279x300.png 279w" sizes="(max-width: 307px) 100vw, 307px" /></p>
<p>There are many ways to include these new categories in to our existing groups, but none of them are perfect.</p>
<p><strong>Manual Grouping</strong></p>
<p>Since we only have a couple of ungrouped items in the flow, this option will work for us, but it won&#8217;t be effective if the number of new items are huge.</p>
<p><strong>Algorithmic Grouping</strong></p>
<p>We can try to use one of the built in algorithms like &#8216;Spelling&#8217; or pronunciation, but it will reset our existing grouping.</p>
<figure id="attachment_934" aria-describedby="caption-attachment-934" style="width: 686px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-934" src="http://technowhisp.com/wp-content/uploads/2019/04/Replace_Group_Warn.jpg" alt="" width="686" height="289" srcset="https://technowhisp.com/wp-content/uploads/2019/04/Replace_Group_Warn.jpg 686w, https://technowhisp.com/wp-content/uploads/2019/04/Replace_Group_Warn-300x126.jpg 300w" sizes="(max-width: 686px) 100vw, 686px" /><figcaption id="caption-attachment-934" class="wp-caption-text">Warning When Rerunning The Algorithm</figcaption></figure>
<p>It is ok if our existing grouping is entirely based on a built in algorithm, but what if we fine tuned the results manually? We will have to redo all those optimizations again. It would have been  a lot better if Tableau  Prep allowed us to keep the existing groups, and run the algorithm to find new matches.</p>
<p><strong>Nested Algorithmic Grouping</strong></p>
<p>You can keep the existing  groups and run  the grouping algorithm again on top of the existing grouping. To do that, add a new group and replace in the existing &#8216;Group Category&#8217; step. Please note that we are not editing the existing &#8216;Group and Replace&#8217; step, but adding a new one.</p>
<figure id="attachment_935" aria-describedby="caption-attachment-935" style="width: 914px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-935" src="http://technowhisp.com/wp-content/uploads/2019/04/Nested_Algorithmic_Grouping.jpg" alt="" width="914" height="359" srcset="https://technowhisp.com/wp-content/uploads/2019/04/Nested_Algorithmic_Grouping.jpg 914w, https://technowhisp.com/wp-content/uploads/2019/04/Nested_Algorithmic_Grouping-300x118.jpg 300w, https://technowhisp.com/wp-content/uploads/2019/04/Nested_Algorithmic_Grouping-768x302.jpg 768w" sizes="(max-width: 914px) 100vw, 914px" /><figcaption id="caption-attachment-935" class="wp-caption-text">Nested Algorithmic Grouping</figcaption></figure>
<p>While this is the easiest way to integrate new changes when large number of values to be grouped, we are losing flow readability.  How will the changes pane look after 10 iterations? How do you know which step replaces what</p>
<p>So which method should you choose? Well it depends a lot on personal preference, buy here is my take on this.</p>
<p><strong>Manual</strong> &#8211; When I only have a couple of new values to be grouped</p>
<p><strong>Nested Algorithmic Grouping</strong> &#8211; When I just want a quick fix.</p>
<p><strong>Algorithmic Grouping</strong> &#8211; When I want to refractor the flow for readability. In that case I will remove all groupings and  regroup everything in a single step.</p>
<p>&nbsp;</p>
<p><strong>Summary</strong></p>
<p>This was the final post in my Future Proofing Group And Replace Series. SO here is The steps involved:</p>
<ol>
<li><a href="http://technowhisp.com/2019/04/25/tableau/tableau-prep-future-proofing-group-and-replace/">Remove ungrouped(dirty) data from output</a></li>
<li><a href="http://technowhisp.com/tableau-prep-email-alerts/">Generate an email trigger when ungrouped(dirty) data is detected</a></li>
<li><a href="http://technowhisp.com/tableau-prep-iterating-group-and-replace/">Modify the flow to handle the ungrouped(dirty) data</a></li>
</ol>
<p>&nbsp;</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/tableau-prep-iterating-group-and-replace/">Tableau Prep &#8211; Iterating Group And Replace</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://technowhisp.com/tableau-prep-iterating-group-and-replace/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>How to connect to FTP with Tableau Prep</title>
		<link>https://technowhisp.com/how-to-connect-to-ftp-with-tableau-prep/</link>
					<comments>https://technowhisp.com/how-to-connect-to-ftp-with-tableau-prep/#respond</comments>
		
		<dc:creator><![CDATA[Jose Cherian]]></dc:creator>
		<pubDate>Sun, 23 Jun 2019 20:55:05 +0000</pubDate>
				<category><![CDATA[Tableau Prep]]></category>
		<guid isPermaLink="false">http://technowhisp.com/?p=943</guid>

					<description><![CDATA[<p>It is common to use FTP as a file transfer mechanism between businesses. Tableau Prep cant connect to FTP out of the box, but we can make it work with a free utility called FTPUSE. Install the utility and add a FTP folder as local drive by entering the below command in an elevated command [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/how-to-connect-to-ftp-with-tableau-prep/">How to connect to FTP with Tableau Prep</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>It is common to use FTP as a file transfer mechanism between businesses. Tableau Prep cant connect to FTP out of the box, but we can make it work with<a href="https://www.ferrobackup.com/map-ftp-as-disk.html"> a free utility called FTPUSE</a>.</p>
<p>Install the utility and add a FTP folder as local drive by entering the below command in an elevated command prompt.</p>
<p><span class="lang:sh decode:true crayon-inline ">FTPUSE DRIVE_LETTER: yourserver.domain.com/path password /USER:username</span></p>
<p>Now the  FTP folder appears as a network drive in our PC. Please note that the drive will be disconnected on reboot. (We will remedy this in our flow schedule BAT file.)</p>
<figure id="attachment_944" aria-describedby="caption-attachment-944" style="width: 1515px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-944" src="http://technowhisp.com/wp-content/uploads/2019/04/FTP.jpg" alt="" width="1515" height="949" srcset="https://technowhisp.com/wp-content/uploads/2019/04/FTP.jpg 1515w, https://technowhisp.com/wp-content/uploads/2019/04/FTP-300x188.jpg 300w, https://technowhisp.com/wp-content/uploads/2019/04/FTP-768x481.jpg 768w, https://technowhisp.com/wp-content/uploads/2019/04/FTP-1024x641.jpg 1024w" sizes="(max-width: 1515px) 100vw, 1515px" /><figcaption id="caption-attachment-944" class="wp-caption-text">FTP Folder As Network Drive</figcaption></figure>
<p>This mapping works like a normal network drive in PREP. Since the mapping is not permanent, it is safer to remap the drive before running the flow . Here is the complete BAT file I used for running the flow.</p>
<pre class="show-lang:2 lang:sh decode:true ">@echo off
set prep="C:\Program Files\Tableau\Tableau Prep Builder 2019.1\scripts\tableau-prep-cli.bat"
set flow="C:\Automation\FTP_TEST.tfl"
if exist X:\ (
	echo Disconnecting existing mapping....
	ftpuse X: /delete
)
echo Mapping FTP folder to network drive....
ftpuse X: yourserver/path password /USER:username
call  %prep% -t %flow%
PAUSE
</pre>
<p>Here is a screen grab of the flow run.</p>
<figure id="attachment_946" aria-describedby="caption-attachment-946" style="width: 1404px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-946" src="http://technowhisp.com/wp-content/uploads/2019/04/ftp_run.gif" alt="" width="1404" height="876" /><figcaption id="caption-attachment-946" class="wp-caption-text">Connecting to files in FTP</figcaption></figure>
<p>&nbsp;</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/how-to-connect-to-ftp-with-tableau-prep/">How to connect to FTP with Tableau Prep</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://technowhisp.com/how-to-connect-to-ftp-with-tableau-prep/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Tableau Prep Email Alerts</title>
		<link>https://technowhisp.com/tableau-prep-email-alerts/</link>
					<comments>https://technowhisp.com/tableau-prep-email-alerts/#comments</comments>
		
		<dc:creator><![CDATA[Jose Cherian]]></dc:creator>
		<pubDate>Sat, 04 May 2019 02:49:57 +0000</pubDate>
				<category><![CDATA[Tableau Prep]]></category>
		<guid isPermaLink="false">http://technowhisp.com/?p=909</guid>

					<description><![CDATA[<p>In  future proofing group and replace post, I promised to write about generating an email alert when ungrouped data is detected by the flow. We will use that scenario for this post, but the same technique can be applied for a wide variety of other scenarios as well. Unfortunately Tableau Prep does not have a [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/tableau-prep-email-alerts/">Tableau Prep Email Alerts</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In  <a href="http://technowhisp.com/2019/04/25/tableau/tableau-prep-future-proofing-group-and-replace/">future proofing group and replace post</a>, I promised to write about generating an email alert when ungrouped data is detected by the flow. We will use that scenario for this post, but the same technique can be applied for a wide variety of other scenarios as well.</p>
<p>Unfortunately Tableau Prep does not have a built in alert feature yet, so we have to depend on Tableau Server. Change the flow in our <a href="http://technowhisp.com/2019/04/25/tableau/tableau-prep-future-proofing-group-and-replace/">last post</a> to write the ungrouped data in to Tableau server</p>
<figure id="attachment_916" aria-describedby="caption-attachment-916" style="width: 1441px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-916" src="http://technowhisp.com/wp-content/uploads/2019/04/Ungroup_To_Server.jpg" alt="" width="1441" height="397" srcset="https://technowhisp.com/wp-content/uploads/2019/04/Ungroup_To_Server.jpg 1441w, https://technowhisp.com/wp-content/uploads/2019/04/Ungroup_To_Server-300x83.jpg 300w, https://technowhisp.com/wp-content/uploads/2019/04/Ungroup_To_Server-768x212.jpg 768w, https://technowhisp.com/wp-content/uploads/2019/04/Ungroup_To_Server-1024x282.jpg 1024w" sizes="(max-width: 1441px) 100vw, 1441px" /><figcaption id="caption-attachment-916" class="wp-caption-text">Flow To Write Ungrouped Category To Server</figcaption></figure>
<p>&nbsp;</p>
<p>Now  let&#8217;s create a simple chart that shows the count of the categories as below and publish it to tableau server.</p>
<figure id="attachment_917" aria-describedby="caption-attachment-917" style="width: 854px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-917" src="http://technowhisp.com/wp-content/uploads/2019/04/Chart.jpg" alt="" width="854" height="523" srcset="https://technowhisp.com/wp-content/uploads/2019/04/Chart.jpg 854w, https://technowhisp.com/wp-content/uploads/2019/04/Chart-300x184.jpg 300w, https://technowhisp.com/wp-content/uploads/2019/04/Chart-768x470.jpg 768w" sizes="(max-width: 854px) 100vw, 854px" /><figcaption id="caption-attachment-917" class="wp-caption-text">Simple Flow To COunt Ungrouped Categories</figcaption></figure>
<p>Go to Tableau server and open the view. <a href="https://onlinehelp.tableau.com/current/pro/desktop/en-us/data_alerts.htm">Create an alert</a> for &#8220;Number Of Records&#8221; Above or Equal To One. If there are no ungrouped categories, our chart will be empty. We will receive a trigger as long as there is at least one ungrouped category detected in the flow.</p>
<figure id="attachment_919" aria-describedby="caption-attachment-919" style="width: 1272px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-919" src="http://technowhisp.com/wp-content/uploads/2019/04/Alert.png" alt="" width="1272" height="798" srcset="https://technowhisp.com/wp-content/uploads/2019/04/Alert.png 1272w, https://technowhisp.com/wp-content/uploads/2019/04/Alert-300x188.png 300w, https://technowhisp.com/wp-content/uploads/2019/04/Alert-768x482.png 768w, https://technowhisp.com/wp-content/uploads/2019/04/Alert-1024x642.png 1024w" sizes="(max-width: 1272px) 100vw, 1272px" /><figcaption id="caption-attachment-919" class="wp-caption-text">Alert Configuration</figcaption></figure>
<p>Now play with different input files, you will receive an email if the flow generate any ungrouped categories. (You might need to change the alert frequency during testing as the setting shown will trigger only one email per day).</p>
<figure id="attachment_921" aria-describedby="caption-attachment-921" style="width: 1280px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-921" src="http://technowhisp.com/wp-content/uploads/2019/04/Alert_Email.png" alt="" width="1280" height="678" srcset="https://technowhisp.com/wp-content/uploads/2019/04/Alert_Email.png 1280w, https://technowhisp.com/wp-content/uploads/2019/04/Alert_Email-300x159.png 300w, https://technowhisp.com/wp-content/uploads/2019/04/Alert_Email-768x407.png 768w, https://technowhisp.com/wp-content/uploads/2019/04/Alert_Email-1024x542.png 1024w" sizes="(max-width: 1280px) 100vw, 1280px" /><figcaption id="caption-attachment-921" class="wp-caption-text">Sample Alert Email</figcaption></figure>
<p>The post <a rel="nofollow" href="https://technowhisp.com/tableau-prep-email-alerts/">Tableau Prep Email Alerts</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://technowhisp.com/tableau-prep-email-alerts/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Tableau Prep &#8211; Future Proofing Group and Replace</title>
		<link>https://technowhisp.com/tableau-prep-future-proofing-group-and-replace/</link>
					<comments>https://technowhisp.com/tableau-prep-future-proofing-group-and-replace/#comments</comments>
		
		<dc:creator><![CDATA[Jose Cherian]]></dc:creator>
		<pubDate>Wed, 24 Apr 2019 21:25:42 +0000</pubDate>
				<category><![CDATA[Tableau Prep]]></category>
		<guid isPermaLink="false">http://technowhisp.com/?p=872</guid>

					<description><![CDATA[<p>In the last post, I shared a tip to to ensure  guaranteed grouping on all existing data in a data set. But what if your flow is scheduled to run every week or every month? Will the new data break your carefully designed dashboard? To ensure that only grouped that goes to the final datasource/viz, [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/tableau-prep-future-proofing-group-and-replace/">Tableau Prep &#8211; Future Proofing Group and Replace</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In the last post, I shared a<a href="http://technowhisp.com/2019/04/20/tableau/tableau-prep-tip-getting-group-and-replace-right-at-one-go-for-enormous-data-sets/"> tip to to ensure  guaranteed grouping on all existing data in a data set</a>. But what if your flow is scheduled to run every week or every month? Will the new data break your carefully designed dashboard? To ensure that only grouped that goes to the final datasource/viz, we need to do a few things:</p>
<ol>
<li>Remove ungrouped(dirty) data from output</li>
<li><a href="http://technowhisp.com/2019/05/04/uncategorized/tableau-prep-email-alerts/">Generate an email trigger when ungrouped(dirty) data is detected</a></li>
<li><a href="http://technowhisp.com/tableau-prep-iterating-group-and-replace/">Modify the flow to handle the ungrouped(dirty) data</a></li>
</ol>
<p>We will address the first item in this post and  the remaining in near future. We will start with the same <a href="http://technowhisp.com/2019/04/20/tableau/tableau-prep-tip-getting-group-and-replace-right-at-one-go-for-enormous-data-sets/">flow</a> and <a href="http://technowhisp.com/wp-content/uploads/2019/04/Group_Replace.csv">data set</a> in last post.</p>
<figure id="attachment_878" aria-describedby="caption-attachment-878" style="width: 455px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="wp-image-878 size-full" src="http://technowhisp.com/wp-content/uploads/2019/04/Original_Clean.jpg" alt="" width="455" height="99" /><figcaption id="caption-attachment-878" class="wp-caption-text">Original Flow</figcaption></figure>
<p>&nbsp;</p>
<p><strong>Step 1</strong></p>
<p style="padding-left: 40px;">Create a list of master categories we want to maintain(Office Supplies, Furniture and Technology). You can use Excel to create this list or a flow like below will output only the master categories to the output csv file.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<figure id="attachment_877" aria-describedby="caption-attachment-877" style="width: 643px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-877" src="http://technowhisp.com/wp-content/uploads/2019/04/Saving_Masture_Category.jpg" alt="" width="643" height="258" srcset="https://technowhisp.com/wp-content/uploads/2019/04/Saving_Masture_Category.jpg 643w, https://technowhisp.com/wp-content/uploads/2019/04/Saving_Masture_Category-300x120.jpg 300w" sizes="(max-width: 643px) 100vw, 643px" /><figcaption id="caption-attachment-877" class="wp-caption-text">Saving MAster Categories</figcaption></figure>
<p>&nbsp;</p>
<p><strong>Step 2</strong></p>
<p style="padding-left: 40px;">Now bring in the master category in to the flow and insert a left join as shown below. All data in the join will mach now, but any future ungrouped/dirty category will have null values at the right side of this join and we can use this fact to filter them out.</p>
<figure id="attachment_883" aria-describedby="caption-attachment-883" style="width: 753px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-883" src="http://technowhisp.com/wp-content/uploads/2019/04/Added-Join.jpg" alt="" width="753" height="511" srcset="https://technowhisp.com/wp-content/uploads/2019/04/Added-Join.jpg 753w, https://technowhisp.com/wp-content/uploads/2019/04/Added-Join-300x204.jpg 300w" sizes="(max-width: 753px) 100vw, 753px" /><figcaption id="caption-attachment-883" class="wp-caption-text">Joining Master Categories</figcaption></figure>
<p>&nbsp;</p>
<p><strong>Step 3</strong></p>
<p style="padding-left: 40px;">Insert a clean step after the join and keep only &#8216;Non-null &#8216; values  in category-1(Master_Category) filter. You can also remove this field as we dont need it in the output.</p>
<figure id="attachment_886" aria-describedby="caption-attachment-886" style="width: 466px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="wp-image-886 size-full" src="http://technowhisp.com/wp-content/uploads/2019/04/Cat_Filter.png" alt="" width="466" height="321" srcset="https://technowhisp.com/wp-content/uploads/2019/04/Cat_Filter.png 466w, https://technowhisp.com/wp-content/uploads/2019/04/Cat_Filter-300x207.png 300w" sizes="(max-width: 466px) 100vw, 466px" /><figcaption id="caption-attachment-886" class="wp-caption-text">Keep Only Non Null Master Category</figcaption></figure>
<p>&nbsp;</p>
<figure id="attachment_887" aria-describedby="caption-attachment-887" style="width: 740px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-887" src="http://technowhisp.com/wp-content/uploads/2019/04/Cleaned_Simple.jpg" alt="" width="740" height="172" srcset="https://technowhisp.com/wp-content/uploads/2019/04/Cleaned_Simple.jpg 740w, https://technowhisp.com/wp-content/uploads/2019/04/Cleaned_Simple-300x70.jpg 300w" sizes="(max-width: 740px) 100vw, 740px" /><figcaption id="caption-attachment-887" class="wp-caption-text">Flow With Ungrouped Categories Removed</figcaption></figure>
<p>&nbsp;</p>
<p><strong>Step 4</strong></p>
<p style="padding-left: 40px;">Now, we need to identify the ungrouped/dirty categories. Insert a branch after join and keep only &#8216;Null&#8217; values in Category-1(Master Category). This will be empty for now as we dont have any ungrouped data, but we are future proofing our flow, remember?</p>
<p><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-889" src="http://technowhisp.com/wp-content/uploads/2019/04/Null_Cat.jpg" alt="" width="818" height="265" srcset="https://technowhisp.com/wp-content/uploads/2019/04/Null_Cat.jpg 818w, https://technowhisp.com/wp-content/uploads/2019/04/Null_Cat-300x97.jpg 300w, https://technowhisp.com/wp-content/uploads/2019/04/Null_Cat-768x249.jpg 768w" sizes="(max-width: 818px) 100vw, 818px" /></p>
<p><strong>Step 5</strong></p>
<p style="padding-left: 40px;">Our intention is to identify the ungrouped categories in our dataset. Add an aggregation after the clean step and group by categories and write it to an output file, we have our final flow.</p>
<figure id="attachment_890" aria-describedby="caption-attachment-890" style="width: 958px" class="wp-caption aligncenter"><a href="http://technowhisp.com/wp-content/uploads/2019/04/Final_Flow.jpg" target="_blank" rel="noopener noreferrer"><img decoding="async" loading="lazy" class="wp-image-890 size-full" src="http://technowhisp.com/wp-content/uploads/2019/04/Final_Flow.jpg" alt="" width="958" height="275" srcset="https://technowhisp.com/wp-content/uploads/2019/04/Final_Flow.jpg 958w, https://technowhisp.com/wp-content/uploads/2019/04/Final_Flow-300x86.jpg 300w, https://technowhisp.com/wp-content/uploads/2019/04/Final_Flow-768x220.jpg 768w" sizes="(max-width: 958px) 100vw, 958px" /></a><figcaption id="caption-attachment-890" class="wp-caption-text">Final Flow</figcaption></figure>
<p>&nbsp;</p>
<p><strong>Testing The Flow</strong></p>
<p>Add some additional rows to the input data with new categories and run the flow.(Alternatively you can use <a href="http://technowhisp.com/wp-content/uploads/2019/04/Group_Replace-1.csv">this file</a>). You can  see that the cleaned data output only  have 3 categories as expected. Additionally, ungrouped categories are added to Category_Ungroup.csv.</p>
<figure id="attachment_901" aria-describedby="caption-attachment-901" style="width: 565px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-901" src="http://technowhisp.com/wp-content/uploads/2019/04/output.jpg" alt="" width="565" height="327" srcset="https://technowhisp.com/wp-content/uploads/2019/04/output.jpg 565w, https://technowhisp.com/wp-content/uploads/2019/04/output-300x174.jpg 300w" sizes="(max-width: 565px) 100vw, 565px" /><figcaption id="caption-attachment-901" class="wp-caption-text">Output</figcaption></figure>
<p>&nbsp;</p>
<figure id="attachment_902" aria-describedby="caption-attachment-902" style="width: 274px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-902" src="http://technowhisp.com/wp-content/uploads/2019/04/Category_Ungrouped.jpg" alt="" width="274" height="138" /><figcaption id="caption-attachment-902" class="wp-caption-text">Ungrouped Categories</figcaption></figure>
<p>&nbsp;</p>
<p><strong>Next Steps</strong></p>
<ol>
<li><a href="http://technowhisp.com/tableau-prep-email-alerts/">Generate an email trigger when ungrouped(dirty) data is detected</a></li>
<li><a href="http://technowhisp.com/tableau-prep-iterating-group-and-replace/">Modify the flow to handle the ungrouped(dirty) data</a></li>
</ol>
<p>The post <a rel="nofollow" href="https://technowhisp.com/tableau-prep-future-proofing-group-and-replace/">Tableau Prep &#8211; Future Proofing Group and Replace</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://technowhisp.com/tableau-prep-future-proofing-group-and-replace/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Tableau Prep Tip &#8211; Getting Group And Replace Right At One Go For Enormous Data Sets</title>
		<link>https://technowhisp.com/tableau-prep-tip-getting-group-and-replace-right-at-one-go-for-enormous-data-sets/</link>
					<comments>https://technowhisp.com/tableau-prep-tip-getting-group-and-replace-right-at-one-go-for-enormous-data-sets/#comments</comments>
		
		<dc:creator><![CDATA[Jose Cherian]]></dc:creator>
		<pubDate>Sat, 20 Apr 2019 03:10:21 +0000</pubDate>
				<category><![CDATA[Tableau Prep]]></category>
		<guid isPermaLink="false">http://technowhisp.com/?p=841</guid>

					<description><![CDATA[<p>Group and Replace feature in Tableau Prep is  one of my favorite as it can standardize fields using many of the built-in algorithms.  But it has its caveats; Algorithms are applied only to the sampled data and not to the entire data set Prep flow stores a look up table of replacements  based on sampled [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/tableau-prep-tip-getting-group-and-replace-right-at-one-go-for-enormous-data-sets/">Tableau Prep Tip &#8211; Getting Group And Replace Right At One Go For Enormous Data Sets</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Group and Replace feature in Tableau Prep is  one of my favorite as it can standardize fields using many of the built-in algorithms.  But it has its caveats;</p>
<ol>
<li>Algorithms are applied only to the sampled data and not to the entire data set
<ul>
<li>Prep flow stores a look up table of replacements  based on sampled data and applies that look up table to the entire data set when running the flow</li>
<li>This is justifiable as  grouping  applied to unseen combinations can be a bad thing. For example,  we do not want  Prep&#8217;s common character grouping algorithm to group words with same characters like &#8216;God&#8217; and &#8216;Dog&#8217; together.</li>
</ul>
</li>
<li>It is extremely difficult to get the sampling right for huge data sets.
<ul>
<li>Default sampling limit in Prep is 1 million rows, but it may or may not be enough depending on the size and variety of  the  data set.</li>
<li>There is a <a href="https://www.tableau.com/about/blog/2018/6/understanding-and-adjusting-data-sampling-tableau-prep-90219">great post on Tableau&#8217;s blog</a> about improving the sampling efficiency</li>
</ul>
</li>
<li>Multiple iterations are required to get the group and replace right due to above issues</li>
</ol>
<p>But how can we do this effectively without sampling all data or performing multiple iterations?  I will provide the steps  below, but  <a href="http://technowhisp.com/wp-content/uploads/2019/04/Group_Replace.csv" target="_blank" rel="noopener noreferrer">here is the data set</a> to clean if you would like to attempt the challenge yourselves.</p>
<p>&nbsp;</p>

<table id="tablepress-1" class="tablepress tablepress-id-1">
<thead>
<tr class="row-1">
	<th class="column-1">Row ID</th><th class="column-2">Order ID</th><th class="column-3">Order Date</th><th class="column-4">Product ID</th><th class="column-5">Category</th><th class="column-6">Sales</th>
</tr>
</thead>
<tbody class="row-striping row-hover">
<tr class="row-2">
	<td class="column-1">1</td><td class="column-2">AB-123456</td><td class="column-3">24/7/2016</td><td class="column-4">SS -5489</td><td class="column-5">Office Supplies</td><td class="column-6">9134.00</td>
</tr>
<tr class="row-3">
	<td class="column-1">2</td><td class="column-2">AB-123457</td><td class="column-3">21/7/2016</td><td class="column-4">SS -3305</td><td class="column-5">Furniture</td><td class="column-6">9500.00</td>
</tr>
<tr class="row-4">
	<td class="column-1">3</td><td class="column-2">AB-123458</td><td class="column-3">8/7/2016</td><td class="column-4">SS -6994</td><td class="column-5">Technology</td><td class="column-6">9686.00</td>
</tr>
<tr class="row-5">
	<td class="column-1">4</td><td class="column-2">AB-123459</td><td class="column-3">30/7/2016</td><td class="column-4">SS -3707</td><td class="column-5">Furniture - Chairs</td><td class="column-6">3123.00</td>
</tr>
<tr class="row-6">
	<td class="column-1">5</td><td class="column-2">AB-123460</td><td class="column-3">7/7/2016</td><td class="column-4">SS -2278</td><td class="column-5">Office Supplies - Binders</td><td class="column-6">4452.00</td>
</tr>
<tr class="row-7">
	<td class="column-1">6</td><td class="column-2">AB-123461</td><td class="column-3">17/7/2016</td><td class="column-4">SS -1868</td><td class="column-5">Technology - Machine</td><td class="column-6">3735.00</td>
</tr>
<tr class="row-8">
	<td class="column-1">7</td><td class="column-2">AB-123462</td><td class="column-3">27/7/2016</td><td class="column-4">SS -8368</td><td class="column-5">Furniture-Book Cases</td><td class="column-6">5325.00</td>
</tr>
<tr class="row-9">
	<td class="column-1">8</td><td class="column-2">AB-123463</td><td class="column-3">6/7/2016</td><td class="column-4">SS -9690</td><td class="column-5">Technology-Copiers</td><td class="column-6">5544.00</td>
</tr>
<tr class="row-10">
	<td class="column-1">9</td><td class="column-2">AB-123464</td><td class="column-3">29/6/2016</td><td class="column-4">SS -1166</td><td class="column-5">Technology-Machines</td><td class="column-6">5812.00</td>
</tr>
<tr class="row-11">
	<td class="column-1">10</td><td class="column-2">AB-123465</td><td class="column-3">28/6/2016</td><td class="column-4">SS -1239</td><td class="column-5">Office Supplies - Paper</td><td class="column-6">2563.00</td>
</tr>
</tbody>
</table>
<!-- #tablepress-1 from cache -->
<p>&nbsp;</p>
<p><strong>Rules:</strong></p>
<ol>
<li>Final data set should group the existing categories in to 3 categories(Office Supplies, Furniture and Technology).</li>
<li>You are allowed to sample only up to 50% the data- up to 5 rows in this case  (This is to simulate real life scenarios where the data size does not allow to sample entire data set)</li>
<li>You are not allowed to manually add a category that doesn&#8217;t exists in the data sample. (This wont be practical in large data sets with millions of rows)</li>
</ol>
<p>Have you tried it? How did it go? Please share your solution in comments. I am sharing  the steps of my solution below:</p>
<ol>
<li> Open the data file and set the sampling size to one. (Yes, we only need one row)</li>
<li>Create an aggregate step and drag category to grouped fields.  Write it to a csv by creating an output step. This will create a file with all unique categories in the original file</li>
<li>Union the above category file with the flow and perform group and replace as normal for category field</li>
<li>Create an output step after group and replace and delete all unnecessary steps</li>
<li>Run the Flow</li>
</ol>
<p>Please refer to below screen grab for detailed illustration. (You can click on the image to open it in a new window).</p>
<figure id="attachment_848" aria-describedby="caption-attachment-848" style="width: 1202px" class="wp-caption aligncenter"><a href="http://technowhisp.com/wp-content/uploads/2019/04/Group-And-Replace-in-One-Go.gif" target="_blank" rel="noopener noreferrer"><img decoding="async" loading="lazy" class="wp-image-848 size-full" src="http://technowhisp.com/wp-content/uploads/2019/04/Group-And-Replace-in-One-Go.gif" alt="Group And Replace in One Go" width="1202" height="598" /></a><figcaption id="caption-attachment-848" class="wp-caption-text">Group And Replace in One Go</figcaption></figure>
<p>&nbsp;</p>
<p>Please note that multiple columns can be added to the aggregation in step 2 if you are planning to apply group and replace to multiple fields.</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/tableau-prep-tip-getting-group-and-replace-right-at-one-go-for-enormous-data-sets/">Tableau Prep Tip &#8211; Getting Group And Replace Right At One Go For Enormous Data Sets</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://technowhisp.com/tableau-prep-tip-getting-group-and-replace-right-at-one-go-for-enormous-data-sets/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Tableau Prep &#8211; Connecting to REST API</title>
		<link>https://technowhisp.com/tableau-prep-connecting-to-rest-api/</link>
					<comments>https://technowhisp.com/tableau-prep-connecting-to-rest-api/#respond</comments>
		
		<dc:creator><![CDATA[Jose Cherian]]></dc:creator>
		<pubDate>Fri, 05 Apr 2019 22:12:33 +0000</pubDate>
				<category><![CDATA[Tableau]]></category>
		<category><![CDATA[Tableau Prep]]></category>
		<guid isPermaLink="false">http://technowhisp.com/?p=830</guid>

					<description><![CDATA[<p>Tableau Prep or Tableau does not have A built in rest API connector, but we can download data from rest API using  Power Shell and pass it to  Tableau Prep Flow. We will be using  IEX Share price API for the purpose of this demonstration. Try the below one liner in your command tine and [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/tableau-prep-connecting-to-rest-api/">Tableau Prep &#8211; Connecting to REST API</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Tableau Prep or Tableau does not have A built in rest API connector, but we can download data from rest API using  Power Shell and pass it to  Tableau Prep Flow.</p>
<figure id="attachment_833" aria-describedby="caption-attachment-833" style="width: 628px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="wp-image-833 size-full" src="http://technowhisp.com/wp-content/uploads/2019/04/rest.gif" alt="" width="628" height="437" /><figcaption id="caption-attachment-833" class="wp-caption-text">Getting REST API Data</figcaption></figure>
<p>We will be using <a href="https://iextrading.com/developer/docs/"> IEX Share price API</a> for the purpose of this demonstration. Try the below one liner in your command tine and see the results. (This end point provides last 3 month share prices of Apple).</p>
<pre class="show-lang:2 lang:sh decode:true">powershell.exe "Invoke-RestMethod 'https://api.iextrading.com/1.0/stock/aapl/chart/3m'"</pre>
<figure id="attachment_831" aria-describedby="caption-attachment-831" style="width: 892px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-831" src="http://technowhisp.com/wp-content/uploads/2019/04/rest.png" alt="" width="892" height="482" srcset="https://technowhisp.com/wp-content/uploads/2019/04/rest.png 892w, https://technowhisp.com/wp-content/uploads/2019/04/rest-300x162.png 300w, https://technowhisp.com/wp-content/uploads/2019/04/rest-768x415.png 768w" sizes="(max-width: 892px) 100vw, 892px" /><figcaption id="caption-attachment-831" class="wp-caption-text">Rest API Data in Command-Line</figcaption></figure>
<p>If your rest endpoint requires authentication or custom headers, &#8216;Invoke-RestMethod&#8217;  cmdlet have options to handle that too.</p>
<p>Here is the complete script to download data, convert to csv and run the flow</p>
<pre class="show-lang:2 lang:sh decode:true " title="rest.BAT">@echo off
powershell.exe "(Invoke-RestMethod 'https://api.iextrading.com/1.0/stock/aapl/chart/3m')|Export-Csv -Path 'C:/Automation/rest_data.csv' -NoTypeInformation"
call  "C:\Program Files\Tableau\Tableau Prep 2019.1\scripts\tableau-prep-cli.bat" -t "C:\Automation\rest.tfl"
PAUSE
</pre>
<p>&nbsp;</p>
<p>The post <a rel="nofollow" href="https://technowhisp.com/tableau-prep-connecting-to-rest-api/">Tableau Prep &#8211; Connecting to REST API</a> appeared first on <a rel="nofollow" href="https://technowhisp.com">Techno Whisp</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://technowhisp.com/tableau-prep-connecting-to-rest-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/

Page Caching using Disk: Enhanced 

Served from: technowhisp.com @ 2026-04-23 09:00:07 by W3 Total Cache
-->