Bring your best ideas to the AI Use Case Contest! Enter to win 40 hours of expert engineering support and bring your vision to life using the powerful combination of Alteryx + AI. Learn more now, or go straight to the submission form.
Start Free Trial

Alteryx Designer Desktop Ideas

Share your Designer Desktop product ideas - we're listening!
Submitting an Idea?

Be sure to review our Idea Submission Guidelines for more information!

Submission Guidelines

Featured Ideas

We've got your metadata.  Suppose the "SELECT COLUMNT TO SPLIT" question is considered by Alteryx and this happens:

 

  • A field is selected because it contains similar \W (regex for non-word characters) patterns in the data (e.g. count of delimiters in the field are roughly equal).
  • The delimiter (MODE delimiter or BEST) is defaulted
  • Split # of columns = MODE count + 1

If a user updates the Field/Delimiter, the metadata could suggest the right Number of columns based upon the delimiter.

 

This all belongs in the automagically idea bank.  It saves me the time of counting delimiters or trial and error counts.

 

Cheers,

 

Mark

When copying and pasting the datetime tool, or disconnecting its input, it loses its configuration. This can be really frustrating if it has an unusual formula, and can result in looking up the datatime functions again: https://help.alteryx.com/current/designer/datetime-functions and working out how to reconfigure the tool.

Steps to reproduce this issue:

1.  Set up datetime tool

TheOC_0-1603807122550.png

2. Delete Input Connector:

TheOC_1-1603807199284.png


3. Reconnect and notice the formula is missing and it has been reset to a completely fresh DateTime Tool:

TheOC_2-1603807237747.png





Proposed solution:
The Datetime tool should remember the previous configuration, and go back to this when the input is deleted or it is copy pasted. It will then be able to be reconnected.



Steps in proposed solution:
1. Setup Datetime tool
TheOC_0-1603807122550.png

 

2. Delete input Connector (Note the DateTime Config and Annotation Remaining, but still being not editable)
proposed.png

3. Reconnect the tool for it to still be configured for the data
proposed2.png

I've been dealing with JSON since day one, and to be honest it isn't the best experience I've had.

Converting a hierarchical schema into a tabular one is't a straight forward process, but doing that everyday the old way is time and processing consuming.

 

What I'm proposing is a tool that can read JSON as input, then display a structural skeleton for the user, or the user can provide such skeleton for the tool, say let's say we have the following input:

 

 

{"menu": [{
  "id": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "action": "CreateNewDoc", "icons": ["SAVE", "FLOPPY"]},
      {"value": "Open", "action": "OpenDoc"},
      {"value": "Close", "action": "CloseDoc", "conditions": [11,8,4]}
    ]
  }
},
{
  "id": "Edit",
  "popup": {
    "menuitem": [
      {"value": "Cut", "action": "TextCut", icons: ["CUT", "SCISSORS"]},
      {"value": "Copy", "action": "OpenDoc"},
      {"value": "Paste", "action": "CloseDoc", "conditions": [5,17]}
    ]
  }
}
],
"error": false
}

 

 

 

now to parse this into a table of menuitems we need to use:

  • JSON Parse: convert JSON into one long key:value table
  • TextToColumns: split key into multiple columns
  • Filter: make sure we only get one level from the tree
  • CrossTab: Convert it back into a column based key values.

clipboard_image_0.png

All of this will give us the most primitive table we can have as:

25actionconditionsiconsvalue
00CreateNewDoc SAVE,FLOPPYNew
01OpenDoc  Open
02CloseDoc11,8,4 Close
10TextCut CUT,SCISSORSCut
11OpenDoc  Copy
12CloseDoc5,17 Paste

 

and now if we want to have the parent menu id along side with the menuitems, we will do that again as:

  • Filter: for parent values only
  • CrossTab: for parent values into a table
  • Join: to join Parents with Sub items and add the Parent.Id

 

clipboard_image_1.png

 

Now all of this is done with Concatenating of child items, as cross tab will allow us to only do Concat/First/Last for items with the same grouping values.


And now if we want to process children, count them, or extract their data into another table, we have to add more Filters, more CrossTab and more Joining to get parent IDs for future linking.

 

So what's I'm proposing?

 

I'm thinking of a Tool with an interface that give me the ability to choose:

  • Target Branch: which is the main table to be extracted from the branches, in this case it would be menu->popup->menuitem.
  • Parent Values: what values to be appended from parents of the previous table, just like menu->Id and others if exist.
  • Children Data types: selecting the proper and expected data type for children instead of using strings or the existing different columns way.
  • Children Arrays Process: what to do with children branches? either stopping their process and return them as is (Stringify), exclude or do other process like count.

 

the tool may extract the structure or let the user input such config as the following:

clipboard_image_3.png

 

Or Input the Structure as a YAML formatted config or any other way.

 

This will allow the user to have a quick native tool that does what he wants as it should, and user can use it as much as he want for children and nested values. you just Stringify and repeat and only parse what you need every time.

 

I hope you consider this for me to replace tens of macros and tools into single tools such so.

 

Thanks for your help and time and all the best!

 

Quick and (hopefully) simple one here.  Many times when I use the Text To Columns tool, there is still leading whitespace from comma separated lists with spaces.  It would save from the minor inconvenience of putting a Data Cleansing tool after each of these tools to include an Advanced Option to trim whitespace from the results.  I tried some workarounds using the empty fields and including spaces in the delimiters box, but this results in unwanted behavior.

 

Capture.PNG

A problem I'm currently trying to solve and feel like I'm spending way too much time on it..

 

I have a data set which has some data in it from multiple languages, and I only want English values.  I was able to get rid of the words with non English letters with a little regular expression and filtering.  However, there's some words that do contain all English letters but aren't English.  What I'm trying to do is bring in an English dictionary to compare words and see which rows have non English words according to the dictionary.  However, this is proving to be a bit harder than I thought.  I think I can do it, but it feels like this should be much simpler than it is.

 

It would be great to have a tool that would run a "spell check" on fields (almost all dictionaries for all languages are available free online).  This could also be useful also just for cleaning up open text types of data where people type stuff in quickly and don't re-read it! 🙂

We frequently report on our data by week. However, the DateTimeTrim function (in the Formula Tool and others) does not support this trim type.

 

Some workarounds have been posted that involve calculating the day of the week and then subtracting it out:

 

http://community.alteryx.com/t5/Data-Preparation-Blending/Summarize-data-by-the-week/td-p/6002

 

It would be very helpful to update DateTimeTrim as follows:

 

  • Add a <trim type> of 'week' 
  • Add an optional parameter for <start of week>
    • Default value: 0 (Week beginning Sunday)
    • Other values: 1 (Week beginning Monday), 2 (Week beginning Tuesday), etc.

 

 

 

It would be a handy feature if it were possible to choose a data type for an input tool to read the data in as. For example, if a dataset has multiple fields with different data types, it would be handy to be able to make the Input Tool read and output them all as a string, if needed. This would also make a handy tool, a sort of blanket data conversion to convert all fields to the specified type.

Hi there,
 
In working with dates in strings, we have an option to use the DateTime tool to convert from string to DateTime, or to use a formula with DateTimeParse.
The DateTime tool is limited in the number of formats possible - and even if you edit the XML directly, you often can't get exactly the format that you are looking for (e.g. 01-sep-1975 - dd/mmm/yyyy) because it's not in the predefined list of "Format of Input String".
 
The DateTimeParse is similarly painful because it requires you to go and look up a set of arcane %b or %y characters on the Alteryx Help screen.
 
Would it be possible to change the treatment of dates so that:
- DateTime tool can take any format that you need - and includes a simple format builder tool so that people don't need to remember the codes
- The DateTimeParse function also uses the same format codes as the DateTime tool, and also includes a simple formula/format builder so that people don't need to remember the codes.
- When you point a DateTime tool to a column in a data-stream - it can read the data to determine the best format to suggest
- Finally - if you could profile the data, and clean it up visually (like the new release of Tableau; or like Cognos) where you can see the values on screen and apply a transformation to them in-situ, which then translates into Alteryx Formulas - it would be even more useful and rapid.
 
Cleaning up date handling would speed up date processing tremendously. 

If Alteryx encounters an error in a RegEx tool - it throws an error:

 RegEx (9) The field "Field1_Matched" is not contained in the record.

 

This is a somewhat confusing and misleading error message because the input data and the regex configuration have no "Field1" at all, so the error message does not assist with resolving the issue.

 

Could you please re-look at the error messaging on the RegExt tool to see if we can make RegEx errors easier to resolve by giving a self-descriptive error message?

 

Example below:

Here I was trying to tokenize by using the . to represent any character - however Alteryx is struggling with this.

Annotation 2019-05-20 223352.png

Hi, I've noted that there is not url-decode function in Alteryx. I guess I'm the first one to need that, so I'm posting this idea here. I think it would not be a big deal to do so if there's a url-encode function. 

 

Thanks. 

It would be great if there was a way for the Text to Columns tool did not drop the last empty when using Split to Rows.

 

For example, if I had the data:

RecordIDString
11,2,3
21,2,
31,,

 

Notice that each value has two commas (representing three values per cell), and If I configure to split into rows on the comma character, what would you expect the result to be:

 

Result A:

RecordIDString
11
12
13
21
22
31
3 


OR

 

Result B:

RecordIDString
11
12
13
21
22
2 
31
3 
3 


OR

 

Result C:

RecordIDString
11
12
13
21
22
31



I would expect Result C if I selected "Skip Empty Fileds", and that is what happens if I select that option.

 

But If I do not want to skip empty fields, I would expect Result B, but what I get is Result A where the last value/field is dropped/skipped.

 

What would it take to Result B as the output from the Text to Columns tool?

Add ability to name the columns for the text to column fields tool. 

Hello

 

My problem: I've used the download-tool to download a 40mb XML. Parsing the DonwloadData-field containing this XML results in about 6600 records. The XML-Parse Tool passes the orginal DownloadData field to each record, resulting in quite a bit of memory usage:

 

 

XML-Parsing ProblemXML-Parsing Problem

 

Suggestion: An option in the XML-parse Tool to not pass the parsed field in its output. 

 

Marco

Hi all,

Just to give you some context, we have a customer that requires that for every Tableau workbook we deliver, we must add extra documentation, as for instance, for every calculated field, in which views it's used, and the formula of that field (yes, I know exactly what you're thinking right now :P)

So I decided to take a shortcut and do a workflow that extracts the basic (I mean VERY basic) data from the .twb file, so I can save a lot of time. 

 

Then I came with this idea...

 

Having a lot of Tableau's under the hood experts in this Community, It would be great to gather some of them and create a Tableau Documenter Macro.

 

I'd love tho hear what you think, and who's being able to help.

 

Hi there,

Could we please add a simple date function which allows you to construct a date from the basic inputs (rather than having to go through date-time-parse).

Example:

Function CreateDate(Year as integer; optional month as integer; optional day as integer; optional hour as integer; optional minute as optional; optional second as integer) as DateTime

 

 

Examples:

  • CreateDate(2017) = 2017-01-01 00:00:00
  • CreateDate(2017, 4) = 2017-04-01 00:00:00
  • CreateDate(2017,04,05) = 2017-04-05 00:00:00

 

 

I suppose I could just bookmark this page, but that wouldn't help others.  I frequently forget (I'm getting old) the format strings while creating custom datetime formulas.  Is there a quick way to get to these format strings when in the context of creating a datetimeparse/datetimeformat formula?

 

Cheers,

Mark

Access to only MD5 hashes via MD5_ASCII(String) and MD5_UNICODE(String) found under string functions is limiting.  Is there a way to access other hashing algorithms, ideally via the crypto algorithms from OpenSSL or the .NET framework? 

 

  - https://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm(v=vs.110).aspx
  - https://wiki.openssl.org/index.php/Command_Line_Utilities#Signing_.2F_Digest 

 

Hashing functions are a very useful tool to have. There are many different types of hashes and each one has tradeoffs for different uses. This can range from error checking, privacy shielding, password protection, forensic analysis, message authentication (HMAC) and much more. See: http://stackoverflow.com/questions/800685/which-cryptographic-hash-function-should-i-choose 

 

- For workflows with data containing existing hashes, being able to consistently create hashes from non-hashed data for comparison is useful.
- Hashes are also useful because they are the same outside the Alteryx environment. They can be used to confirm correct operation of a production system or a third party's external process.

 

Access to only MD5 hashes via MD5_ASCII(String) and MD5_UNICODE(String) found under string functions in the formula tool is a start, but quite limiting. 

 

Further, the ability to use non-cryptographic hashes and checksums would be useful, such as MurmurHash or CRC.  https://en.wikipedia.org/wiki/List_of_hash_functions

Having the implementation benefit from hardware acceleration (AES-NI / CUDA) would be a great plus for high volume applications. 

 

For reference, these are some hash algorithms that could be useful in workflows:

SHA-1

SHA-256

Whirlpool

xxHash

MurmurHash
SpookyHash
CityHash

Checksum
CRC-16
CRC-32
CRC-32 MPEG-2
CRC-64

BLAKE-256
BLAKE-512
BLAKE2s
BLAKE2b
ECOH
FSB
GOST
Grøstl
HAS-160
HAVAL
JH
MD2
MD4
MD6
RadioGatún
RIPEMD
RIPEMD-128
RIPEMD-160
RIPEMD-320
SHA-224
SHA-256
SHA-384
SHA-512
SHA-3 (originally known as Keccak)
Skein
Snefru
Spectral Hash
Streebog
SWIFFT
Tiger

*This is an idea from @fmvizcaino  from the Portuguese Community*

 

  • Global DateTime support

Idea removed, regex will do the job. 

How about turning this;

SELECT * 
FROM Employee
ORDER BY First_name ASC

into this automatically

Picture1.png

and a more complex one

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID; 

into this

Picture2.png

basically it's a parser;

 

1) First check if it's a MS SQL, PL/SQL or T/SQL

2) Then figure out join relationships

3) Convert each subset SQL into function nodes

4) Convert function nodes to Alteryx yxmd (xml)

 

Creates the following for the first workflow

<?xml version="1.0"?>
<AlteryxDocument yxmdVer="10.5">
  <Nodes>
    <Node ToolID="1">
      <GuiSettings Plugin="AlteryxBasePluginsGui.AlteryxSelect.AlteryxSelect">
        <Position x="174" y="90" />
      </GuiSettings>
      <Properties>
        <Configuration>
          <OrderChanged value="False" />
          <SelectFields>
            <SelectField field="*Unknown" selected="True" />
          </SelectFields>
        </Configuration>
        <Annotation DisplayMode="0">
          <Name />
          <DefaultAnnotationText />
          <Left value="False" />
        </Annotation>
      </Properties>
      <EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxSelect" />
    </Node>
    <Node ToolID="2">
      <GuiSettings Plugin="AlteryxBasePluginsGui.Sort.Sort">
        <Position x="246" y="90" />
      </GuiSettings>
      <Properties>
        <Configuration>
          <SortInfo locale="0">
            <Field field="FIRST_NAME" order="Ascending" />
          </SortInfo>
        </Configuration>
        <Annotation DisplayMode="0">
          <Name />
          <DefaultAnnotationText>FIRST_NAME - Ascending</DefaultAnnotationText>
          <Left value="False" />
        </Annotation>
      </Properties>
      <EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxSort" />
    </Node>
    <Node ToolID="4">
      <GuiSettings Plugin="AlteryxBasePluginsGui.TextInput.TextInput">
        <Position x="90" y="90" />
      </GuiSettings>
      <Properties>
        <Configuration>
          <NumRows value="0" />
          <Fields>
            <Field name="FIRST_NAME" />
          </Fields>
          <Data />
        </Configuration>
        <Annotation DisplayMode="0">
          <Name />
          <DefaultAnnotationText />
          <Left value="False" />
        </Annotation>
      </Properties>
      <EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxTextInput" />
    </Node>
    <Node ToolID="13">
      <GuiSettings Plugin="AlteryxBasePluginsGui.BrowseV2.BrowseV2">
        <Position x="330" y="90" />
      </GuiSettings>
      <Properties>
        <Configuration>
          <Layout>
            <View1>
              <Hints>
                <Table />
              </Hints>
            </View1>
          </Layout>
        </Configuration>
        <Annotation DisplayMode="0">
          <Name />
          <DefaultAnnotationText />
          <Left value="False" />
        </Annotation>
      </Properties>
      <EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxBrowseV2" />
    </Node>
  </Nodes>
  <Connections>
    <Connection>
      <Origin ToolID="1" Connection="Output" />
      <Destination ToolID="2" Connection="Input" />
    </Connection>
    <Connection>
      <Origin ToolID="2" Connection="Output" />
      <Destination ToolID="13" Connection="Input" />
    </Connection>
    <Connection>
      <Origin ToolID="4" Connection="Output" />
      <Destination ToolID="1" Connection="Input" />
    </Connection>
  </Connections>
  <Properties>
    <Memory default="True" />
    <GlobalRecordLimit value="0" />
    <TempFiles default="True" />
    <Annotation on="True" includeToolName="False" />
    <ConvErrorLimit value="10" />
    <ConvErrorLimit_Stop value="False" />
    <CancelOnError value="False" />
    <DisableBrowse value="False" />
    <EnablePerformanceProfiling value="False" />
    <DisableAllOutput value="False" />
    <ShowAllMacroMessages value="False" />
    <ShowConnectionStatusIsOn value="True" />
    <ShowConnectionStatusOnlyWhenRunning value="True" />
    <ZoomLevel value="0" />
    <LayoutType>Horizontal</LayoutType>
    <MetaInfo>
      <NameIsFileName value="True" />
      <Name>New Workflow1</Name>
      <Description />
      <RootToolName />
      <ToolVersion />
      <ToolInDb value="False" />
      <CategoryName />
      <SearchTags />
      <Author />
      <Company />
      <Copyright />
      <DescriptionLink actual="" displayed="" />
    </MetaInfo>
    <Events>
      <Enabled value="True" />
    </Events>
  </Properties>
</AlteryxDocument>

and for the second example with joins...

<?xml version="1.0"?>
<AlteryxDocument yxmdVer="10.5">
  <Nodes>
    <Node ToolID="1">
      <GuiSettings Plugin="AlteryxBasePluginsGui.AlteryxSelect.AlteryxSelect">
        <Position x="126" y="54" />
      </GuiSettings>
      <Properties>
        <Configuration>
          <OrderChanged value="False" />
          <SelectFields>
            <SelectField field="*Unknown" selected="True" />
          </SelectFields>
        </Configuration>
        <Annotation DisplayMode="0">
          <Name />
          <DefaultAnnotationText />
          <Left value="False" />
        </Annotation>
      </Properties>
      <EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxSelect" />
    </Node>
    <Node ToolID="2">
      <GuiSettings Plugin="AlteryxBasePluginsGui.TextInput.TextInput">
        <Position x="54" y="54" />
      </GuiSettings>
      <Properties>
        <Configuration>
          <NumRows value="0" />
          <Fields>
            <Field name="CustomerID" />
            <Field name="OrderID" />
            <Field name="CustomerName" />
            <Field name="OrderDate" />
          </Fields>
          <Data />
        </Configuration>
        <Annotation DisplayMode="0">
          <Name />
          <DefaultAnnotationText />
          <Left value="False" />
        </Annotation>
      </Properties>
      <EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxTextInput" />
    </Node>
    <Node ToolID="3">
      <GuiSettings Plugin="AlteryxBasePluginsGui.AlteryxSelect.AlteryxSelect">
        <Position x="126" y="198" />
      </GuiSettings>
      <Properties>
        <Configuration>
          <OrderChanged value="False" />
          <SelectFields>
            <SelectField field="*Unknown" selected="True" />
          </SelectFields>
        </Configuration>
        <Annotation DisplayMode="0">
          <Name />
          <DefaultAnnotationText />
          <Left value="False" />
        </Annotation>
      </Properties>
      <EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxSelect" />
    </Node>
    <Node ToolID="4">
      <GuiSettings Plugin="AlteryxBasePluginsGui.TextInput.TextInput">
        <Position x="54" y="198" />
      </GuiSettings>
      <Properties>
        <Configuration>
          <NumRows value="0" />
          <Fields>
            <Field name="CustomerID" />
          </Fields>
          <Data />
        </Configuration>
        <Annotation DisplayMode="0">
          <Name />
          <DefaultAnnotationText />
          <Left value="False" />
        </Annotation>
      </Properties>
      <EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxTextInput" />
    </Node>
    <Node ToolID="5">
      <GuiSettings Plugin="AlteryxBasePluginsGui.Join.Join">
        <Position x="222" y="126" />
      </GuiSettings>
      <Properties>
        <Configuration joinByRecordPos="False">
          <JoinInfo connection="Left">
            <Field field="CustomerID" />
          </JoinInfo>
          <JoinInfo connection="Right">
            <Field field="CustomerID" />
          </JoinInfo>
          <SelectConfiguration>
            <Configuration outputConnection="Join">
              <OrderChanged value="False" />
              <SelectFields>
                <SelectField field="Right_CustomerID" selected="True" rename="Right_CustomerID" />
                <SelectField field="*Unknown" selected="True" />
              </SelectFields>
            </Configuration>
          </SelectConfiguration>
        </Configuration>
        <Annotation DisplayMode="0">
          <Name />
          <DefaultAnnotationText />
          <Left value="False" />
        </Annotation>
      </Properties>
      <EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxJoin" />
    </Node>
    <Node ToolID="6">
      <GuiSettings Plugin="AlteryxBasePluginsGui.BrowseV2.BrowseV2">
        <Position x="294" y="126" />
      </GuiSettings>
      <Properties>
        <Configuration>
          <Layout>
            <View1>
              <Hints>
                <Table />
              </Hints>
            </View1>
          </Layout>
        </Configuration>
        <Annotation DisplayMode="0">
          <Name />
          <DefaultAnnotationText />
          <Left value="False" />
        </Annotation>
      </Properties>
      <EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxBrowseV2" />
    </Node>
  </Nodes>
  <Connections>
    <Connection>
      <Origin ToolID="1" Connection="Output" />
      <Destination ToolID="5" Connection="Left" />
    </Connection>
    <Connection>
      <Origin ToolID="3" Connection="Output" />
      <Destination ToolID="5" Connection="Right" />
    </Connection>
    <Connection>
      <Origin ToolID="2" Connection="Output" />
      <Destination ToolID="1" Connection="Input" />
    </Connection>
    <Connection>
      <Origin ToolID="4" Connection="Output" />
      <Destination ToolID="3" Connection="Input" />
    </Connection>
    <Connection>
      <Origin ToolID="5" Connection="Join" />
      <Destination ToolID="6" Connection="Input" />
    </Connection>
  </Connections>
  <Properties>
    <Memory default="True" />
    <GlobalRecordLimit value="0" />
    <TempFiles default="True" />
    <Annotation on="True" includeToolName="False" />
    <ConvErrorLimit value="10" />
    <ConvErrorLimit_Stop value="False" />
    <CancelOnError value="False" />
    <DisableBrowse value="False" />
    <EnablePerformanceProfiling value="False" />
    <DisableAllOutput value="False" />
    <ShowAllMacroMessages value="False" />
    <ShowConnectionStatusIsOn value="True" />
    <ShowConnectionStatusOnlyWhenRunning value="True" />
    <ZoomLevel value="0" />
    <LayoutType>Horizontal</LayoutType>
    <MetaInfo>
      <NameIsFileName value="True" />
      <Name>New Workflow1</Name>
      <Description />
      <RootToolName />
      <ToolVersion />
      <ToolInDb value="False" />
      <CategoryName />
      <SearchTags />
      <Author />
      <Company />
      <Copyright />
      <DescriptionLink actual="" displayed="" />
    </MetaInfo>
    <Events>
      <Enabled value="True" />
    </Events>
  </Properties>
</AlteryxDocument>
Top Liked Authors