Be sure to review our Idea Submission Guidelines for more information!
Submission GuidelinesHello,
After used the new "Image Recognition Tool" a few days, I think you could improve it :
> by adding the dimensional constraints in front of each of the pre-trained models,
> by adding a true tool to divide the training data correctly (in order to have an equivalent number of images for each of the labels)
> at least, allow the tool to use black & white images (I wanted to test it on the MNIST, but the tool tells me that it necessarily needs RGB images) ?
Question : do you in the future allow the user to choose between CPU or GPU usage ?
In any case, thank you again for this new tool, it is certainly perfectible, but very simple to use, and I sincerely think that it will allow a greater number of people to understand the many use cases made possible thanks to image recognition.
Thank you again
Kévin VANCAPPEL (France ;-))
Thank you again.
Kévin VANCAPPEL
To increase Performance on some old Buissness Logic, i am trying to switch an existing system to In-DB tools. This has given me a lot of headache because there is no Multi-Field Formular Tool in the In-DB section. It is a very tedious job to run through every workflow to manually set the same regex for a table with more than 20 Fields.
I have had the idea to implement such a tool myself but i think this could be helpful for other developers in Alteryx Desktop too, so i am bringing this up here.
The Idea is to have a similar approach to the new Multi-Formular Tool like the other already existing Tool in Preperation.
Hello,
As of today, DCM is great to store credentials. But once we want to dive deeper in technicity, like using macros or Applications, it's really bad. One of the things I hate is that we can't retrieve any informations from the DCM connection, just the id. Not good for logs, really bad for understanding and have some conditional logic related to connection type or name.
Here an example
Nice, I managed to retrieve an id but I have no idea of what it means : what kind of connection? what's name?
Best regards,
Simon
Hi there,
When connecting to data sources using DCM - could we please add the ability to make JDBC connections?
see:
https://community.alteryx.com/t5/Engine-Works/JDBC-Connections-in-Alteryx/ba-p/968782
As mentioned in these threads - JDBC is very common in large enterprises - and in many cases is better supported by the technology teams / developer community and so is much easier to make a connection. Added to this - there are many databases (e.g. DB2) where JDBC connections are just much easier
Please could you add JDBC connections to the DCM tooling?
Thank you
Sean
cc: @wesley-siu @_PavelP
Often I need to add filters or other tools early on after the workflow is already been mostly built. If a tool connects to one tool I can drag the filter over the connecting line and add the filter seamlessly. However in large workflows there is often this situation:
The Filter will only connect to one of the lines I'm hovering over. If I could connect to all lines simultaneously and drop in the connection to achieve this (would be awesome):
Hello,
Unless you're lucky, your input dataset can have fields with the wrong types. That can lead to several issues such as :
-performance (a string is waaaaaaaay slower than let's say a boolean)
-compliance with master data management
-functional understanding (e.g : if i have a field called "modified" typed as string, I don't know if it contains the modification date, an information about the modification, etc... while if it's is typed as date, I already know it's a date)
-ability to do some type-specific operations (you can't multiply a string or extract a week from a string)
right now, the existing tools have been focused on strings but I think we can do better.
Here a proposition :
entry : a dataframe
configuration :
-selection of fields
or
-selection of field types
-ability to do it on a sample (optional)
Algo :
Alteryx | Byte | bool | only 2 values. 0 and 1 | to be done |
Alteryx | Int16 | bool | only 2 values. 0 and 1 | to be done |
Alteryx | Int16 | Byte | min=>0, max <=255 | to be done |
Alteryx | Int32 | bool | only 2 values. 0 and 1 | to be done |
Alteryx | Int32 | Byte | min>=0, max <=255 | to be done |
Alteryx | Int32 | Int16 | min>=-32,768, max <=32,767 | to be done |
Alteryx | Int64 | bool | only 2 values. 0 and 1 | to be done |
Alteryx | Int64 | Byte | min>=0, max <=255 | to be done |
Alteryx | Int64 | Int16 | min>=-32,768, max <=32,767 | to be done |
Alteryx | Int64 | Int32 | min>=-–2,147,483,648, max <=2,147,483,647 | to be done |
Alteryx | Fixed Decimal | bool | only 2 values. 0 and 1 | to be done |
Alteryx | Fixed Decimal | Byte | No decimal part, min>=0, max <=255 | to be done |
Alteryx | Fixed Decimal | Int16 | No decimal part, min>=-32,768, max <=32,767 | to be done |
Alteryx | Fixed Decimal | Int32 | No decimal part, min>=-–2,147,483,648, max <=2,147,483,647 | to be done |
Alteryx | Fixed Decimal | Int36 | No decimal part, min>=-––9,223,372,036,854,775,808, max <=9,223,372,036,854,775,807 | to be done |
Alteryx | Float | bool | only 2 values. 0 and 1 or 0,-1 | to be done |
Alteryx | Float | Byte | No decimal part, min>=0, max <=255 | to be done |
Alteryx | Float | Int16 | No decimal part, min>=-32,768, max <=32,767 | to be done |
Alteryx | Float | Int32 | No decimal part, min>=-–2,147,483,648, max <=2,147,483,647 | to be done |
Alteryx | Float | Int36 | No decimal part, min>=-––9,223,372,036,854,775,808, max <=9,223,372,036,854,775,807 | to be done |
Alteryx | Float | Fixed Decimal | to be done | to be done |
Alteryx | Double | bool | only 2 values. 0 and 1 or 0,-1 | to be done |
Alteryx | Double | Byte | No decimal part, min>=0, max <=255 | to be done |
Alteryx | Double | Int16 | No decimal part, min>=-32,768, max <=32,767 | to be done |
Alteryx | Double | Int32 | No decimal part, min>=-–2,147,483,648, max <=2,147,483,647 | to be done |
Alteryx | Double | Int36 | No decimal part, min>=-––9,223,372,036,854,775,808, max <=9,223,372,036,854,775,807 | to be done |
Alteryx | Double | Fixed Decimal | to be done | to be done |
Alteryx | Double | Float | when no need for doube precision | to be done |
Alteryx | DateTime | Date | no hours, minutes, seconds | to be done |
Alteryx | String | bool | only 2 values. 0 and 1 or 0,-1 or True/False or TRUE/FALSE or equivalent in some languages such as VRAI/FAUX, Vrai/Faux | to be done |
Alteryx | String | Byte | No decimal part, min>=0, max <=255 | to be done |
Alteryx | String | Int16 | No decimal part, min>=-32,768, max <=32,767 | to be done |
Alteryx | String | Int32 | No decimal part, min>=-–2,147,483,648, max <=2,147,483,647 | to be done |
Alteryx | String | Int36 | No decimal part, min>=-––9,223,372,036,854,775,808, max <=9,223,372,036,854,775,807 | to be done |
Alteryx | String | Fixed Decimal | to be done | to be done |
Alteryx | String | Float | when no need for doube precision | to be done |
Alteryx | String | Double | when need for double precision | to be done |
Alteryx | String | Date | test on several date formats | to be done |
Alteryx | String | Time | test on several time formats | to be done |
Alteryx | String | DateTime | test on several datetime formats | to be done |
Alteryx | WString | bool | only 2 values. 0 and 1 or 0,-1 or True/False or TRUE/FALSE or equivalent in some languages such as VRAI/FAUX, Vrai/Faux | to be done |
Alteryx | WString | Byte | No decimal part, min>=0, max <=255 | to be done |
Alteryx | WString | Int16 | No decimal part, min>=-32,768, max <=32,767 | to be done |
Alteryx | WString | Int32 | No decimal part, min>=-–2,147,483,648, max <=2,147,483,647 | to be done |
Alteryx | WString | Int36 | No decimal part, min>=-––9,223,372,036,854,775,808, max <=9,223,372,036,854,775,807 | to be done |
Alteryx | WString | Fixed Decimal | to be done | to be done |
Alteryx | WString | Float | when no need for doube precision | to be done |
Alteryx | WString | Double | when need for double precision | to be done |
Alteryx | WString | String | Latin-1 character only | to be done |
Alteryx | WString | Date | test on several date formats | to be done |
Alteryx | WString | Time | test on several time formats | to be done |
Alteryx | WString | DateTime | test on several datetime formats | to be done |
Alteryx | V_String | bool | only 2 values. 0 and 1 or 0,-1 or True/False or TRUE/FALSE or equivalent in some languages such as VRAI/FAUX, Vrai/Faux | to be done |
Alteryx | V_String | Byte | No decimal part, min>=0, max <=255 | to be done |
Alteryx | V_String | Int16 | No decimal part, min>=-32,768, max <=32,767 | to be done |
Alteryx | V_String | Int32 | No decimal part, min>=-–2,147,483,648, max <=2,147,483,647 | to be done |
Alteryx | V_String | Int36 | No decimal part, min>=-––9,223,372,036,854,775,808, max <=9,223,372,036,854,775,807 | to be done |
Alteryx | V_String | Fixed Decimal | to be done | to be done |
Alteryx | V_String | Float | when no need for doube precision | to be done |
Alteryx | V_String | Double | when need for double precision | to be done |
Alteryx | V_String | String | Same length | to be done |
Alteryx | V_String | Date | test on several date formats | to be done |
Alteryx | V_String | Time | test on several time formats | to be done |
Alteryx | V_String | DateTime | test on several datetime formats | to be done |
Alteryx | V_WString | bool | only 2 values. 0 and 1 or 0,-1 or True/False or TRUE/FALSE or equivalent in some languages such as VRAI/FAUX, Vrai/Faux | to be done |
Alteryx | V_WString | Byte | No decimal part, min>=0, max <=255 | to be done |
Alteryx | V_WString | Int16 | No decimal part, min>=-32,768, max <=32,767 | to be done |
Alteryx | V_WString | Int32 | No decimal part, min>=-–2,147,483,648, max <=2,147,483,647 | to be done |
Alteryx | V_WString | Int36 | No decimal part, min>=-––9,223,372,036,854,775,808, max <=9,223,372,036,854,775,807 | to be done |
Alteryx | V_WString | Fixed Decimal | to be done | to be done |
Alteryx | V_WString | Float | when no need for doube precision | to be done |
Alteryx | V_WString | Double | when need for double precision | to be done |
Alteryx | V_WString | String | Same length,latin- character only | to be done |
Alteryx | V_WString | WString | Same length | to be done |
Alteryx | V_WString | V_String | latin- character only | to be done |
Alteryx | V_WString | Date | test on several date formats | to be done |
Alteryx | V_WString | Time | test on several time formats | to be done |
Alteryx | V_WString | DateTime | test on several datetime formats | to be done |
The output would be something like that
Field | Input type | Proposition | Conversion |
toto | float | int | formula (with example)/native tool/datetime conversion tool… |
Best regards,
Simon
My idea is essentially to borrow the keybinding/command ethos of Vim for Alteryx. For those who are unfamiliar, Vim is a text editor from a time before the mouse and the GUI became dominant forms of interacting with PCs. I think the key ideas to take from Vim are the Modes, Commands, and Grammar.
Vim is mode based for its typing. You start out in Normal mode and enter other modes through key commands. For example, to enter Insert mode, you just type 'i'. This mode allows you to enter text into whatever file you have open at the moment. There's also the Visual mode which is for highlighting sections of text for processing with other commands. This means that key commands can take on a variety of meanings in different modes, adding depth in a limited key range.
The Grammar is another key aspect. Rather than hold an arcane combination of modifiers and letters, Vim uses an Operator-Count-Motion approach. The operator will be the primary action: y for yank/copy, d for delete, c for change, v for visual select. The Count is how many objects you want this operator to be applied to. The Motion is where and what you want to work with: w for a word, s for a sentence, p for a paragraph, ( for a set of parentheses, b for brackets. There are also options that extend this so you can have a series of commands like d2w (delete 2 words), di( (delete inside parentheses), yap (yank/copy all of a paragraph), etc. Below is a cheat sheet displaying a wider list of the possibilities with the motions.
The Command mode is the last piece of the puzzle. By typing ':' while in Normal mode, you bring up a command prompt. Here you can enter any of a number of commands including changing user settings via keywords. For example, :s/old/new/gc will search through my file and attempt to find and replace every old term with the new term, the c at the end means that Vim will ask for confirmation before each change. I could also do things like :set nohl which will turn off highlighting for items found during searches. It's easy to imagine using similar functionality to make configuration changes to a wide set of tools or simply to selectively delete tools without using the mouse or scrolling to them.
To take it a step further, current menu functions could be turned into commands, imagine typing v6t to select the next 6 tools on the canvas. You could follow this by typing :Contain %V to wrap the selected tools in a container, perhaps with extra arguments a specific color palette could be applied as well! I say all this to say that the way forward for shortcuts in Alteryx is to break away from the one-handed modifier heavy paradigm that so many programs follow today. By creating commands that can duplicate the actions found in drop down and right click menus, as well as providing a means of navigating the canvas without a mouse, Alteryx can go to the next level in terms of efficiency and ergonomics.
Let me know what you think, if you need more concrete ideas on what this might look like in practice, I can add that. Thanks!
P.S. If you work on side projects outside of Alteryx, consider giving NeoVim a try, it adds a lot of extensibility and customization to classic Vim
Hello
Cartesian product is a common issue when joining dataset with a bad key. What I suggest is an option to check if there will be a cartesian product on the join tool.
-there is a label "Cartesian product (non join key uniqueness) detection"
-under it a drop down menu with three choices
-do nothing
-fail
-warning
Algo :
if do nothing==> well... do nothing more than actual behaviour.
if "fail" or "warning" : count distinct of join key versus count row on each side of the join. If none is unique, display a warning or an error message.
Best regards,
Simon
At the moment, in order for users in our organisation to run apps, they need to be added to permissions for the data connection for the server/DB the app uses (as we use Gallery connections for ease of collaboration within the Analytics team).
This is fine provided users running the apps do not have Alteryx Designer, however, we have users across the business who do use Designer - we don't always want these users having direct access to query the server/DB through designer just because they have the connection in order to run workflows on the Gallery. It's my understanding that at the moment this is necessarily the case, which is not ideal.
Would be great if we could grant permissions for users to use the connection to run apps in the Gallery without that enabling them to use that connection in Designer to query the DB however they want.
The order of the join fields effects the ordering output
For more complex joins it would be nice to have up and down arrows much like the summarise tool:
The data view of any anchor is searchable. I want to search the metadata view please.
It would be really great to have Dynamic Detour tool where you could specify the detour direction as an input to the tool rather than an imbedded control.
This would allow workflow branching.
Using a filter for this passes a dataset with no rows in it which causes dynamic in-db or dynamic input tools to error.
Hello,
A lot of time, when you have a dataset, you want to know if there is a group of fields that works together. That can help to normalize (like de-joining) your data model for dataviz, performance issue or simplify your analysis.
Exemple
order_id item_id label model_id length color amount
1 | 1 | A | 10 | 15 | Blue | 101 |
2 | 1 | A | 10 | 15 | Blue | 101 |
3 | 2 | B | 10 | 15 | Blue | 101 |
4 | 2 | B | 10 | 15 | Blue | 101 |
5 | 2 | B | 10 | 15 | Blue | 101 |
6 | 3 | C | 20 | 25 | Red | 101 |
7 | 3 | C | 20 | 25 | Red | 101 |
8 | 3 | C | 20 | 25 | Red | 101 |
9 | 4 | D | 20 | 25 | Red | 101 |
10 | 4 | D | 20 | 25 | Red | 101 |
11 | 4 | D | 20 | 25 | Red | 101 |
Here, we could split the table in three :
-order
order_id item_id model_id amount
1 | 1 | 10 | 101,2 |
2 | 1 | 10 | 103 |
3 | 2 | 10 | 104,8 |
4 | 2 | 10 | 106,6 |
5 | 2 | 10 | 108,4 |
6 | 3 | 20 | 110,2 |
7 | 3 | 20 | 112 |
8 | 3 | 20 | 113,8 |
9 | 4 | 20 | 115,6 |
10 | 4 | 20 | 117,4 |
11 | 4 | 20 | 119,2 |
-model
model_id length color
10 | 15 | Blue |
20 | 25 | Red |
-item
item_id label
1 | A |
2 | B |
3 | C |
4 | D |
The tool would take :
-a dataframe in entry
-configuration : ability to select fields.
-output : a table with the recap of groups
<style> </style>
field group field remaining fields
1 | item_id | False |
1 | label | False |
2 | model_id | False |
2 | color | False |
3 | order_id | True |
3 | link to group 1 | True |
3 | link to group 2 | True |
3 | amount | True |
Very important : the non-selected fields (like here, amount), are in the result but all in the "remaining" group.
Algo steps:
1/pre-groups : count distinct of each fields. goal : optimization of algo, to avoid to calculate all pairs
fields that has the same count distinct than the number of rows are automatically excluded and sent to the remaining group
fields that have have the same count distinct are set in the same pre-group
2/ for each group, for each pair of fields,
let's do a distinct of value of the pair
like here
item_id label
1 | A |
2 | B |
3 | C |
4 | D |
if in this table, the count distinct of each field is equal to the number of rows, it's a "pair-group"
here, for the model, you will have
-model_id,length
-model_id,color
-length,color
3/Since a field can only belong to one group, it means model_id,length,color which would first (or second) group, then item_id and label
If a field does not belong to a group, he goes to "remaining group" at the end
in the remaining group, you can add a link to the other group since you don't know which field is the key.
<style> </style>
field group field remaining fields
1 | item_id | False |
1 | label | False |
2 | model_id | False |
2 | length | False |
2 | color | False |
3 | order_id | True |
3 | link to group 1 | True |
3 | link to group 2 | True |
3 | amount | True |
Best regards,
Simon
PS : I have in mind an evolution with links between non-remaining table (like here, the model could be linked to the item as an option)
Whenever I overwrite an Excel sheet with data of the same format just different values (e.g. Q2 data versus Q1 data) all of my Pivot Tables break and I have to manually recreate them even though the schema didn't change. Somehow the Table is being deleted/removed and replaced with a completely different Table which is what causes the Pivot Tables to break. The only way to avoid this is to manually set the Cell Range, but who has time for that? The only solution I have found is to manually copy all values and paste them over the existing data which is very inefficient the more sheets you are working with.
The basic premise is this:
Phantom spacing. Basically something that looks like it has spaces on Excel but is actually formatted as an indentation.
Unfortunately, to read the indentation we will need either a VBA prep or read the XML inside. The latter of which is difficult.
As to VBA, the general steps are to create an indentation formula in order to see the numbers, then go from there. The idea is credited to @clmc9601 as we discussed privately.
As of now, I do not see anyway to do this on Alteryx as a function or even expression. It would be very helpful especially reading trial balances or even Bloomberg outputs as they are formatted with indentation.
Reading indentation from Excel or any other file within Alteryx will be much appreciated, especially in actuarial and finance spaces.
It would be great if you could include a new Parse tool to process Data Sets description (Meta data) formatted using the DCAT (W3C) standard in the next version of Alteryx.
DCAT is a standard for the description of data sets. It provides a comprehensive set of metadata that can be used to describe the content, structure, and lineage of a data set.
We believe that supporting DCAT in Alteryx would be a valuable addition to the product. It would allow us to:
We understand that implementing support for this standards requires some development effort (eventually done in stages, building from a minimal viable support to a full-blown support). However, we believe that the benefits to the Alteryx Community worldwide and Alteryx as a top-quality data preparation tool outweigh the cost.
I also expect the effort to be manageable (perhaps a macro will do as a start) when you see the standard RDF syntax being used, which is similar to JSON.
DCAT, which stands for Data Catalog Vocabulary, is a W3C Recommendation for describing data catalogs in RDF. It provides a set of classes and properties for describing datasets, their distributions, and their relationships to other datasets and data catalogs. This allows data catalogs to be discovered and searched more easily, and it also makes it possible to integrate data catalogs with other Semantic Web applications.
DCAT is designed to be flexible and extensible, so they can be used to describe a wide variety. They are both also designed to be interoperable, so they can be used together to create rich and interconnected descriptions of data and knowledge.
Here are some of the benefits of using DCAT:
Here are some examples of how DCAT is being used:
As the Semantic Web continues to grow, DCAT is likely to become even more widely used.
DCAT
RDF
Can we have an option to disable all tool containers at once? Similar to disable all browse tools or tools that write output.
Hello All,
I am not sure whether my idea makes sense or not.
In today's advanced analytics world, we used RPA for various automation, process simplification, etc. There are CO-BOTs that are designed to run the Alteryx flow as well. Through RPA we are able to log in to the system and tools like Cognos, Oracle, TM1, and so on.
So, I am thinking, if Alteryx developed RPA as a tool in the Alteryx Designer like other tools such as Join, Transform, ML, Computer Vision, Interface, etc.
I believe the implementation of RPA in Alteryx will prove an Asset, and make Alteryx.com more powerful.
Thanks,
Mayank
Once I've built a workflow I often have to go through the process of removing and combining tools such as selects and formula tools which could be simplified to just one tool. It would be great to have an automated feature which could detect groups of tools which could be simplified and then automatically combined them into one step, improving/simplifying my workflow.
Most people who have been around for more than one version change of Alteryx will be familiar with the standard dreaded error pop-up box:
"There was an error opening [workflow X]. This workflow was created by a more recent version of Alteryx..."
The pop up box is generated as many times as there are assets potentially affected. You click once to acknowledge you're aware there is a problem with asset 1A, then you click again when the 1B pop up appears, then you keep clicking until you reach W76. Or that's what the software expects you to do and seem to figure is the graceful way to handle potential problems associated with missing assets (it's far from certain there are even any problems with running the specific code referred to on the older version, this is a warning-level notification where stuff might not work which has been 'promoted' to a full-fledged error that you are requested to address at the asset level).
If you work somewhere where there is a large community of Alteryx users sharing assets widely with each other (all making use of large shared macro repositories) the software's choice of notifying you at the asset level is, not to mince words, completely insane. You could do everything right, have exactly the recommended version from the perspective of Alteryx sys-management, the one that corresponds to the corporate server version executing the scheduled workflows, and still be bombarded with 15 notifications at start-up if you're away for a few days and in the time you were away one or two new guys at the (very large) company decided to create a few new assets with the latest version of the software and share them with their colleagues (the latest version was not yet implemented server-side, so some of those tools might fail for those users - but the tools become everybody's problem the second they're stored in the shared location).
The notifications at startup make no distinction between relevant and irrelevant messages, you can start an empty new workflow and still get messages related to macros you don't care about, because they're located somewhere where Alteryx has been told to look for them even if they're not loaded/included in the workflow.
Every single asset Alteryx might in theory make use of during the session that is starting up will spark an individual message that cannot be ignored or skipped without acknowledging its existence, even if many of the assets will work just fine with an older version. This setup scales ...badly.
I can think of at least two solutions which would in many ways be preferable to the current structure. One would be to 'batch' the notifications prior to creating the pop-up box (one pop-up per start-up, not per asset). What might be included in such a pop-up could for instance be a grouped output with the Alteryx versions that did not match the active version ('workflows developed in version 'XX56' and 'XX57' were identified and these may fail to load', or whatever). Another option would be to have a setting in Designer where you tell Alteryx you don't want to see these notifications at start-up.
It would be nice to have an option to distribute tools with the fixed default space of three in between each tool. Now it just distributes based on the available space, which can be inconsistent throughout the workflow.
User | Likes Count |
---|---|
31 | |
7 | |
3 | |
3 | |
3 |