added sum functions and fixed rounding
parent
4c51ed6b9d
commit
e10e5da9f2
|
|
@ -0,0 +1,6 @@
|
|||
Product_Category,Min_Product_Cost,Max_Product_Cost
|
||||
Art & Crafts,1.99,20.99
|
||||
Electronics,6.99,20.99
|
||||
Games,2.99,17.99
|
||||
Sports & Outdoors,6.99,14.99
|
||||
Toys,3.99,34.99
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
Product_Category,Min_Product_Cost,Max_Product_Cost
|
||||
Art & Crafts,1.99,20.99
|
||||
Electronics,6.99,20.99
|
||||
Games,2.99,17.99
|
||||
Sports & Outdoors,6.99,14.99
|
||||
Toys,3.99,34.99
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
Product_Category,Count,Sum_Product_Cost
|
||||
Art & Crafts,8,71.92
|
||||
Electronics,3,42.97
|
||||
Games,8,66.92
|
||||
Sports & Outdoors,7,71.93
|
||||
Toys,9,104.91
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
Product_Category,Last_Product_Cost,Last_Product_Name
|
||||
Art & Crafts,20.99,PlayDoh Playset
|
||||
Electronics,20.99,Toy Robot
|
||||
Games,17.99,Rubik's Cube
|
||||
Sports & Outdoors,14.99,Nerf Gun
|
||||
Toys,34.99,Lego Bricks
|
||||
|
|
|
@ -0,0 +1,422 @@
|
|||
<?xml version="1.0"?>
|
||||
<AlteryxDocument yxmdVer="2022.3">
|
||||
<Nodes>
|
||||
<Node ToolID="2">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.DbFileInput.DbFileInput">
|
||||
<Position x="102" y="162" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<Passwords />
|
||||
<File RecordLimit="" SearchSubDirs="False" FileFormat="0" OutputFileName="">Z:\Pyteryx\Alteryx_TestWorkflows\Maven Toys Data\products.csv</File>
|
||||
<FormatSpecificOptions>
|
||||
<HeaderRow>True</HeaderRow>
|
||||
<IgnoreErrors>False</IgnoreErrors>
|
||||
<AllowShareWrite>False</AllowShareWrite>
|
||||
<ImportLine>1</ImportLine>
|
||||
<FieldLen>254</FieldLen>
|
||||
<SingleThreadRead>False</SingleThreadRead>
|
||||
<IgnoreQuotes>DoubleQuotes</IgnoreQuotes>
|
||||
<Delimeter>,</Delimeter>
|
||||
<QuoteRecordBreak>False</QuoteRecordBreak>
|
||||
<CodePage>28591</CodePage>
|
||||
</FormatSpecificOptions>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText>products.csv</DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
<Dependencies>
|
||||
<Implicit />
|
||||
</Dependencies>
|
||||
<MetaInfo connection="Output">
|
||||
<RecordInfo>
|
||||
<Field name="Product_ID" size="254" source="File: Z:\Pyteryx\Alteryx_TestWorkflows\Maven Toys Data\products.csv" type="V_String" />
|
||||
<Field name="Product_Name" size="254" source="File: Z:\Pyteryx\Alteryx_TestWorkflows\Maven Toys Data\products.csv" type="V_String" />
|
||||
<Field name="Product_Category" size="254" source="File: Z:\Pyteryx\Alteryx_TestWorkflows\Maven Toys Data\products.csv" type="V_String" />
|
||||
<Field name="Product_Cost" size="254" source="File: Z:\Pyteryx\Alteryx_TestWorkflows\Maven Toys Data\products.csv" type="V_String" />
|
||||
<Field name="Product_Price" size="254" source="File: Z:\Pyteryx\Alteryx_TestWorkflows\Maven Toys Data\products.csv" type="V_String" />
|
||||
</RecordInfo>
|
||||
</MetaInfo>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxDbFileInput" />
|
||||
</Node>
|
||||
<Node ToolID="3">
|
||||
<GuiSettings Plugin="AlteryxSpatialPluginsGui.Summarize.Summarize">
|
||||
<Position x="570" y="162" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<SummarizeFields>
|
||||
<SummarizeField field="Product_Category" action="GroupBy" rename="Product_Category" />
|
||||
<SummarizeField field="Product_Category" action="Count" rename="Count" />
|
||||
<SummarizeField field="Product_Cost" action="Sum" rename="Sum_Product_Cost" />
|
||||
</SummarizeFields>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText />
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxSpatialPluginsEngine.dll" EngineDllEntryPoint="AlteryxSummarize" />
|
||||
</Node>
|
||||
<Node ToolID="4">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.AlteryxSelect.AlteryxSelect">
|
||||
<Position x="342" y="162" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<OrderChanged value="False" />
|
||||
<CommaDecimal value="False" />
|
||||
<SelectFields>
|
||||
<SelectField field="Product_Cost" selected="True" type="Float" size="4" />
|
||||
<SelectField field="Product_Price" selected="True" type="Float" size="4" />
|
||||
<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="5">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.DbFileOutput.DbFileOutput">
|
||||
<Position x="798" y="162" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<File MaxRecords="" FileFormat="0">Z:\Pyteryx\Alteryx_TestWorkflows\TransformTesting\Output\expected\ProductCountSumCost.csv</File>
|
||||
<Passwords />
|
||||
<Disable>False</Disable>
|
||||
<FormatSpecificOptions>
|
||||
<LineEndStyle>CRLF</LineEndStyle>
|
||||
<Delimeter>,</Delimeter>
|
||||
<ForceQuotes>False</ForceQuotes>
|
||||
<HeaderRow>True</HeaderRow>
|
||||
<CodePage>28591</CodePage>
|
||||
<WriteBOM>True</WriteBOM>
|
||||
</FormatSpecificOptions>
|
||||
<MultiFile value="False" />
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText>ProductCountSumCost.csv</DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
<Dependencies>
|
||||
<Implicit />
|
||||
</Dependencies>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxDbFileOutput" />
|
||||
</Node>
|
||||
<Node ToolID="6">
|
||||
<GuiSettings Plugin="AlteryxSpatialPluginsGui.Summarize.Summarize">
|
||||
<Position x="570" y="306" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<SummarizeFields>
|
||||
<SummarizeField field="Product_Category" action="GroupBy" rename="Product_Category" />
|
||||
<SummarizeField field="Product_Cost" action="Min" rename="Min_Product_Cost" />
|
||||
<SummarizeField field="Product_Cost" action="Max" rename="Max_Product_Cost" />
|
||||
</SummarizeFields>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText />
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxSpatialPluginsEngine.dll" EngineDllEntryPoint="AlteryxSummarize" />
|
||||
</Node>
|
||||
<Node ToolID="7">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.DbFileOutput.DbFileOutput">
|
||||
<Position x="798" y="306" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<File MaxRecords="" FileFormat="0">Z:\Pyteryx\Alteryx_TestWorkflows\TransformTesting\Output\expected\ProductCountMinMax.csv</File>
|
||||
<Passwords />
|
||||
<Disable>False</Disable>
|
||||
<FormatSpecificOptions>
|
||||
<LineEndStyle>CRLF</LineEndStyle>
|
||||
<Delimeter>,</Delimeter>
|
||||
<ForceQuotes>False</ForceQuotes>
|
||||
<HeaderRow>True</HeaderRow>
|
||||
<CodePage>28591</CodePage>
|
||||
<WriteBOM>True</WriteBOM>
|
||||
</FormatSpecificOptions>
|
||||
<MultiFile value="False" />
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText>ProductCountMinMax.csv</DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
<Dependencies>
|
||||
<Implicit />
|
||||
</Dependencies>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxDbFileOutput" />
|
||||
</Node>
|
||||
<Node ToolID="8">
|
||||
<GuiSettings Plugin="AlteryxSpatialPluginsGui.Summarize.Summarize">
|
||||
<Position x="570" y="426" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<SummarizeFields>
|
||||
<SummarizeField field="Product_Category" action="GroupBy" rename="Product_Category" />
|
||||
<SummarizeField field="Product_Cost" action="Min" rename="Min_Product_Cost" />
|
||||
<SummarizeField field="Product_Cost" action="Max" rename="Max_Product_Cost" />
|
||||
</SummarizeFields>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText />
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxSpatialPluginsEngine.dll" EngineDllEntryPoint="AlteryxSummarize" />
|
||||
</Node>
|
||||
<Node ToolID="9">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.Sort.Sort">
|
||||
<Position x="438" y="426" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<SortInfo locale="1033">
|
||||
<Field field="Product_Category" order="Ascending" />
|
||||
<Field field="Product_Cost" order="Ascending" />
|
||||
</SortInfo>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText>Product_Category - Ascending
|
||||
Product_Cost - Ascending</DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxSort" />
|
||||
</Node>
|
||||
<Node ToolID="10">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.Formula.Formula">
|
||||
<Position x="234" y="162" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<FormulaFields>
|
||||
<FormulaField expression="ReplaceChar([Product_Cost], "$", "")" field="Product_Cost" size="254" type="V_String" />
|
||||
<FormulaField expression="ReplaceChar([Product_Price], "$", "")" field="Product_Price" size="254" type="V_String" />
|
||||
</FormulaFields>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText>Product_Cost = ReplaceChar([Product_Cost], "$", "")
|
||||
Product_Price = ReplaceChar(...</DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxFormula" />
|
||||
</Node>
|
||||
<Node ToolID="11">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.Formula.Formula">
|
||||
<Position x="678" y="162" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<FormulaFields>
|
||||
<FormulaField expression="Round([Sum_Product_Cost], 0.01)" field="Sum_Product_Cost" size="8" type="Double" />
|
||||
</FormulaFields>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText><![CDATA[Sum_Product_Cost = Round([Sum_Product_Cost], 0.01)
|
||||
]]></DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxFormula" />
|
||||
</Node>
|
||||
<Node ToolID="12">
|
||||
<GuiSettings Plugin="AlteryxSpatialPluginsGui.Summarize.Summarize">
|
||||
<Position x="570" y="534" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<SummarizeFields>
|
||||
<SummarizeField field="Product_Category" action="GroupBy" rename="Product_Category" />
|
||||
<SummarizeField field="Product_Cost" action="Last" rename="Last_Product_Cost" />
|
||||
<SummarizeField field="Product_Name" action="Last" rename="Last_Product_Name" />
|
||||
</SummarizeFields>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText />
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxSpatialPluginsEngine.dll" EngineDllEntryPoint="AlteryxSummarize" />
|
||||
</Node>
|
||||
<Node ToolID="13">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.DbFileOutput.DbFileOutput">
|
||||
<Position x="798" y="426" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<File MaxRecords="" FileFormat="0">Z:\Pyteryx\Alteryx_TestWorkflows\TransformTesting\Output\expected\ProductCostMinMax.csv</File>
|
||||
<Passwords />
|
||||
<Disable>False</Disable>
|
||||
<FormatSpecificOptions>
|
||||
<LineEndStyle>CRLF</LineEndStyle>
|
||||
<Delimeter>,</Delimeter>
|
||||
<ForceQuotes>False</ForceQuotes>
|
||||
<HeaderRow>True</HeaderRow>
|
||||
<CodePage>28591</CodePage>
|
||||
<WriteBOM>True</WriteBOM>
|
||||
</FormatSpecificOptions>
|
||||
<MultiFile value="False" />
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText>ProductCostMinMax.csv</DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
<Dependencies>
|
||||
<Implicit />
|
||||
</Dependencies>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxDbFileOutput" />
|
||||
</Node>
|
||||
<Node ToolID="14">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.DbFileOutput.DbFileOutput">
|
||||
<Position x="798" y="534" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<File MaxRecords="" FileFormat="0">Z:\Pyteryx\Alteryx_TestWorkflows\TransformTesting\Output\expected\ProductMostExpensive.csv</File>
|
||||
<Passwords />
|
||||
<Disable>False</Disable>
|
||||
<FormatSpecificOptions>
|
||||
<LineEndStyle>CRLF</LineEndStyle>
|
||||
<Delimeter>,</Delimeter>
|
||||
<ForceQuotes>False</ForceQuotes>
|
||||
<HeaderRow>True</HeaderRow>
|
||||
<CodePage>28591</CodePage>
|
||||
<WriteBOM>True</WriteBOM>
|
||||
</FormatSpecificOptions>
|
||||
<MultiFile value="False" />
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText>ProductMostExpensive.csv</DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
<Dependencies>
|
||||
<Implicit />
|
||||
</Dependencies>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxDbFileOutput" />
|
||||
</Node>
|
||||
</Nodes>
|
||||
<Connections>
|
||||
<Connection>
|
||||
<Origin ToolID="2" Connection="Output" />
|
||||
<Destination ToolID="10" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="3" Connection="Output" />
|
||||
<Destination ToolID="11" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="4" Connection="Output" />
|
||||
<Destination ToolID="3" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="4" Connection="Output" />
|
||||
<Destination ToolID="6" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="4" Connection="Output" />
|
||||
<Destination ToolID="9" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="6" Connection="Output" />
|
||||
<Destination ToolID="7" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="8" Connection="Output" />
|
||||
<Destination ToolID="13" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="9" Connection="Output" />
|
||||
<Destination ToolID="8" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="9" Connection="Output" />
|
||||
<Destination ToolID="12" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="10" Connection="Output" />
|
||||
<Destination ToolID="4" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="11" Connection="Output" />
|
||||
<Destination ToolID="5" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="12" Connection="Output" />
|
||||
<Destination ToolID="14" 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" />
|
||||
<RunWithE2 value="True" />
|
||||
<PredictiveToolsCodePage value="1252" />
|
||||
<DisableAllOutput value="False" />
|
||||
<ShowAllMacroMessages value="False" />
|
||||
<ShowConnectionStatusIsOn value="True" />
|
||||
<ShowConnectionStatusOnlyWhenRunning value="True" />
|
||||
<ZoomLevel value="0" />
|
||||
<LayoutType>Horizontal</LayoutType>
|
||||
<MetaInfo>
|
||||
<NameIsFileName value="True" />
|
||||
<Name>SumToolTesting</Name>
|
||||
<Description />
|
||||
<RootToolName />
|
||||
<ToolVersion />
|
||||
<ToolInDb value="False" />
|
||||
<CategoryName />
|
||||
<SearchTags />
|
||||
<Author />
|
||||
<Company />
|
||||
<Copyright />
|
||||
<DescriptionLink actual="" displayed="" />
|
||||
<Example>
|
||||
<Description />
|
||||
<File />
|
||||
</Example>
|
||||
<WorkflowId value="bd9c622e-55b5-45d9-b957-9f04f79ca6e4" />
|
||||
<Telemetry>
|
||||
<PreviousWorkflowId value="af561ec6-d0f5-46ba-a79a-ac40ca762cb9" />
|
||||
<OriginWorkflowId value="af561ec6-d0f5-46ba-a79a-ac40ca762cb9" />
|
||||
</Telemetry>
|
||||
</MetaInfo>
|
||||
<Events>
|
||||
<Enabled value="True" />
|
||||
</Events>
|
||||
</Properties>
|
||||
</AlteryxDocument>
|
||||
|
|
@ -0,0 +1,422 @@
|
|||
<?xml version="1.0"?>
|
||||
<AlteryxDocument yxmdVer="2022.3">
|
||||
<Nodes>
|
||||
<Node ToolID="2">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.DbFileInput.DbFileInput">
|
||||
<Position x="102" y="162" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<Passwords />
|
||||
<File RecordLimit="" SearchSubDirs="False" FileFormat="0" OutputFileName="">..\Maven Toys Data\products.csv</File>
|
||||
<FormatSpecificOptions>
|
||||
<HeaderRow>True</HeaderRow>
|
||||
<IgnoreErrors>False</IgnoreErrors>
|
||||
<AllowShareWrite>False</AllowShareWrite>
|
||||
<ImportLine>1</ImportLine>
|
||||
<FieldLen>254</FieldLen>
|
||||
<SingleThreadRead>False</SingleThreadRead>
|
||||
<IgnoreQuotes>DoubleQuotes</IgnoreQuotes>
|
||||
<Delimeter>,</Delimeter>
|
||||
<QuoteRecordBreak>False</QuoteRecordBreak>
|
||||
<CodePage>28591</CodePage>
|
||||
</FormatSpecificOptions>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText>products.csv</DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
<Dependencies>
|
||||
<Implicit />
|
||||
</Dependencies>
|
||||
<MetaInfo connection="Output">
|
||||
<RecordInfo>
|
||||
<Field name="Product_ID" size="254" source="File: Z:\Pyteryx\Alteryx_TestWorkflows\Maven Toys Data\products.csv" type="V_String" />
|
||||
<Field name="Product_Name" size="254" source="File: Z:\Pyteryx\Alteryx_TestWorkflows\Maven Toys Data\products.csv" type="V_String" />
|
||||
<Field name="Product_Category" size="254" source="File: Z:\Pyteryx\Alteryx_TestWorkflows\Maven Toys Data\products.csv" type="V_String" />
|
||||
<Field name="Product_Cost" size="254" source="File: Z:\Pyteryx\Alteryx_TestWorkflows\Maven Toys Data\products.csv" type="V_String" />
|
||||
<Field name="Product_Price" size="254" source="File: Z:\Pyteryx\Alteryx_TestWorkflows\Maven Toys Data\products.csv" type="V_String" />
|
||||
</RecordInfo>
|
||||
</MetaInfo>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxDbFileInput" />
|
||||
</Node>
|
||||
<Node ToolID="3">
|
||||
<GuiSettings Plugin="AlteryxSpatialPluginsGui.Summarize.Summarize">
|
||||
<Position x="570" y="162" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<SummarizeFields>
|
||||
<SummarizeField field="Product_Category" action="GroupBy" rename="Product_Category" />
|
||||
<SummarizeField field="Product_Category" action="Count" rename="Count" />
|
||||
<SummarizeField field="Product_Cost" action="Sum" rename="Sum_Product_Cost" />
|
||||
</SummarizeFields>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText />
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxSpatialPluginsEngine.dll" EngineDllEntryPoint="AlteryxSummarize" />
|
||||
</Node>
|
||||
<Node ToolID="4">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.AlteryxSelect.AlteryxSelect">
|
||||
<Position x="342" y="162" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<OrderChanged value="False" />
|
||||
<CommaDecimal value="False" />
|
||||
<SelectFields>
|
||||
<SelectField field="Product_Cost" selected="True" type="Float" size="4" />
|
||||
<SelectField field="Product_Price" selected="True" type="Float" size="4" />
|
||||
<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="5">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.DbFileOutput.DbFileOutput">
|
||||
<Position x="798" y="162" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<File MaxRecords="" FileFormat="0">.\Output\expected\ProductCountSumCost.csv</File>
|
||||
<Passwords />
|
||||
<Disable>False</Disable>
|
||||
<FormatSpecificOptions>
|
||||
<LineEndStyle>CRLF</LineEndStyle>
|
||||
<Delimeter>,</Delimeter>
|
||||
<ForceQuotes>False</ForceQuotes>
|
||||
<HeaderRow>True</HeaderRow>
|
||||
<CodePage>28591</CodePage>
|
||||
<WriteBOM>True</WriteBOM>
|
||||
</FormatSpecificOptions>
|
||||
<MultiFile value="False" />
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText>ProductCountSumCost.csv</DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
<Dependencies>
|
||||
<Implicit />
|
||||
</Dependencies>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxDbFileOutput" />
|
||||
</Node>
|
||||
<Node ToolID="6">
|
||||
<GuiSettings Plugin="AlteryxSpatialPluginsGui.Summarize.Summarize">
|
||||
<Position x="570" y="306" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<SummarizeFields>
|
||||
<SummarizeField field="Product_Category" action="GroupBy" rename="Product_Category" />
|
||||
<SummarizeField field="Product_Cost" action="Min" rename="Min_Product_Cost" />
|
||||
<SummarizeField field="Product_Cost" action="Max" rename="Max_Product_Cost" />
|
||||
</SummarizeFields>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText />
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxSpatialPluginsEngine.dll" EngineDllEntryPoint="AlteryxSummarize" />
|
||||
</Node>
|
||||
<Node ToolID="7">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.DbFileOutput.DbFileOutput">
|
||||
<Position x="798" y="306" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<File MaxRecords="" FileFormat="0">.\Output\expected\ProductCountMinMax.csv</File>
|
||||
<Passwords />
|
||||
<Disable>False</Disable>
|
||||
<FormatSpecificOptions>
|
||||
<LineEndStyle>CRLF</LineEndStyle>
|
||||
<Delimeter>,</Delimeter>
|
||||
<ForceQuotes>False</ForceQuotes>
|
||||
<HeaderRow>True</HeaderRow>
|
||||
<CodePage>28591</CodePage>
|
||||
<WriteBOM>True</WriteBOM>
|
||||
</FormatSpecificOptions>
|
||||
<MultiFile value="False" />
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText>ProductCountMinMax.csv</DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
<Dependencies>
|
||||
<Implicit />
|
||||
</Dependencies>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxDbFileOutput" />
|
||||
</Node>
|
||||
<Node ToolID="8">
|
||||
<GuiSettings Plugin="AlteryxSpatialPluginsGui.Summarize.Summarize">
|
||||
<Position x="570" y="426" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<SummarizeFields>
|
||||
<SummarizeField field="Product_Category" action="GroupBy" rename="Product_Category" />
|
||||
<SummarizeField field="Product_Cost" action="Min" rename="Min_Product_Cost" />
|
||||
<SummarizeField field="Product_Cost" action="Max" rename="Max_Product_Cost" />
|
||||
</SummarizeFields>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText />
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxSpatialPluginsEngine.dll" EngineDllEntryPoint="AlteryxSummarize" />
|
||||
</Node>
|
||||
<Node ToolID="9">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.Sort.Sort">
|
||||
<Position x="438" y="426" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<SortInfo locale="1033">
|
||||
<Field field="Product_Category" order="Ascending" />
|
||||
<Field field="Product_Cost" order="Ascending" />
|
||||
</SortInfo>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText>Product_Category - Ascending
|
||||
Product_Cost - Ascending</DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxSort" />
|
||||
</Node>
|
||||
<Node ToolID="10">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.Formula.Formula">
|
||||
<Position x="234" y="162" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<FormulaFields>
|
||||
<FormulaField expression="ReplaceChar([Product_Cost], "$", "")" field="Product_Cost" size="254" type="V_String" />
|
||||
<FormulaField expression="ReplaceChar([Product_Price], "$", "")" field="Product_Price" size="254" type="V_String" />
|
||||
</FormulaFields>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText>Product_Cost = ReplaceChar([Product_Cost], "$", "")
|
||||
Product_Price = ReplaceChar(...</DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxFormula" />
|
||||
</Node>
|
||||
<Node ToolID="11">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.Formula.Formula">
|
||||
<Position x="678" y="162" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<FormulaFields>
|
||||
<FormulaField expression="Round([Sum_Product_Cost], 0.01)" field="Sum_Product_Cost" size="8" type="Double" />
|
||||
</FormulaFields>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText><![CDATA[Sum_Product_Cost = Round([Sum_Product_Cost], 0.01)
|
||||
]]></DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxFormula" />
|
||||
</Node>
|
||||
<Node ToolID="12">
|
||||
<GuiSettings Plugin="AlteryxSpatialPluginsGui.Summarize.Summarize">
|
||||
<Position x="570" y="534" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<SummarizeFields>
|
||||
<SummarizeField field="Product_Category" action="GroupBy" rename="Product_Category" />
|
||||
<SummarizeField field="Product_Cost" action="Last" rename="Last_Product_Cost" />
|
||||
<SummarizeField field="Product_Name" action="Last" rename="Last_Product_Name" />
|
||||
</SummarizeFields>
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText />
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxSpatialPluginsEngine.dll" EngineDllEntryPoint="AlteryxSummarize" />
|
||||
</Node>
|
||||
<Node ToolID="13">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.DbFileOutput.DbFileOutput">
|
||||
<Position x="798" y="426" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<File MaxRecords="" FileFormat="0">.\Output\expected\ProductCostMinMax.csv</File>
|
||||
<Passwords />
|
||||
<Disable>False</Disable>
|
||||
<FormatSpecificOptions>
|
||||
<LineEndStyle>CRLF</LineEndStyle>
|
||||
<Delimeter>,</Delimeter>
|
||||
<ForceQuotes>False</ForceQuotes>
|
||||
<HeaderRow>True</HeaderRow>
|
||||
<CodePage>28591</CodePage>
|
||||
<WriteBOM>True</WriteBOM>
|
||||
</FormatSpecificOptions>
|
||||
<MultiFile value="False" />
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText>ProductCostMinMax.csv</DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
<Dependencies>
|
||||
<Implicit />
|
||||
</Dependencies>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxDbFileOutput" />
|
||||
</Node>
|
||||
<Node ToolID="14">
|
||||
<GuiSettings Plugin="AlteryxBasePluginsGui.DbFileOutput.DbFileOutput">
|
||||
<Position x="798" y="534" />
|
||||
</GuiSettings>
|
||||
<Properties>
|
||||
<Configuration>
|
||||
<File MaxRecords="" FileFormat="0">.\Output\expected\ProductMostExpensive.csv</File>
|
||||
<Passwords />
|
||||
<Disable>False</Disable>
|
||||
<FormatSpecificOptions>
|
||||
<LineEndStyle>CRLF</LineEndStyle>
|
||||
<Delimeter>,</Delimeter>
|
||||
<ForceQuotes>False</ForceQuotes>
|
||||
<HeaderRow>True</HeaderRow>
|
||||
<CodePage>28591</CodePage>
|
||||
<WriteBOM>True</WriteBOM>
|
||||
</FormatSpecificOptions>
|
||||
<MultiFile value="False" />
|
||||
</Configuration>
|
||||
<Annotation DisplayMode="0">
|
||||
<Name />
|
||||
<DefaultAnnotationText>ProductMostExpensive.csv</DefaultAnnotationText>
|
||||
<Left value="False" />
|
||||
</Annotation>
|
||||
<Dependencies>
|
||||
<Implicit />
|
||||
</Dependencies>
|
||||
</Properties>
|
||||
<EngineSettings EngineDll="AlteryxBasePluginsEngine.dll" EngineDllEntryPoint="AlteryxDbFileOutput" />
|
||||
</Node>
|
||||
</Nodes>
|
||||
<Connections>
|
||||
<Connection>
|
||||
<Origin ToolID="2" Connection="Output" />
|
||||
<Destination ToolID="10" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="3" Connection="Output" />
|
||||
<Destination ToolID="11" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="4" Connection="Output" />
|
||||
<Destination ToolID="3" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="4" Connection="Output" />
|
||||
<Destination ToolID="6" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="4" Connection="Output" />
|
||||
<Destination ToolID="9" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="6" Connection="Output" />
|
||||
<Destination ToolID="7" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="8" Connection="Output" />
|
||||
<Destination ToolID="13" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="9" Connection="Output" />
|
||||
<Destination ToolID="8" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="9" Connection="Output" />
|
||||
<Destination ToolID="12" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="10" Connection="Output" />
|
||||
<Destination ToolID="4" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="11" Connection="Output" />
|
||||
<Destination ToolID="5" Connection="Input" />
|
||||
</Connection>
|
||||
<Connection>
|
||||
<Origin ToolID="12" Connection="Output" />
|
||||
<Destination ToolID="14" 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" />
|
||||
<RunWithE2 value="True" />
|
||||
<PredictiveToolsCodePage value="1252" />
|
||||
<DisableAllOutput value="False" />
|
||||
<ShowAllMacroMessages value="False" />
|
||||
<ShowConnectionStatusIsOn value="True" />
|
||||
<ShowConnectionStatusOnlyWhenRunning value="True" />
|
||||
<ZoomLevel value="0" />
|
||||
<LayoutType>Horizontal</LayoutType>
|
||||
<MetaInfo>
|
||||
<NameIsFileName value="True" />
|
||||
<Name>SumToolTesting</Name>
|
||||
<Description />
|
||||
<RootToolName />
|
||||
<ToolVersion />
|
||||
<ToolInDb value="False" />
|
||||
<CategoryName />
|
||||
<SearchTags />
|
||||
<Author />
|
||||
<Company />
|
||||
<Copyright />
|
||||
<DescriptionLink actual="" displayed="" />
|
||||
<Example>
|
||||
<Description />
|
||||
<File />
|
||||
</Example>
|
||||
<WorkflowId value="bd9c622e-55b5-45d9-b957-9f04f79ca6e4" />
|
||||
<Telemetry>
|
||||
<PreviousWorkflowId value="af561ec6-d0f5-46ba-a79a-ac40ca762cb9" />
|
||||
<OriginWorkflowId value="af561ec6-d0f5-46ba-a79a-ac40ca762cb9" />
|
||||
</Telemetry>
|
||||
</MetaInfo>
|
||||
<Events>
|
||||
<Enabled value="True" />
|
||||
</Events>
|
||||
</Properties>
|
||||
</AlteryxDocument>
|
||||
|
|
@ -12,7 +12,7 @@ class TypeMapper:
|
|||
"Int16": pl.Int16,
|
||||
"Int32": pl.Int32,
|
||||
"Int64": pl.Int64,
|
||||
"Float": pl.Float32,
|
||||
"Float": pl.Float64,
|
||||
"Double": pl.Float64,
|
||||
"String": pl.String,
|
||||
"V_String": pl.String,
|
||||
|
|
@ -31,7 +31,7 @@ class TypeMapper:
|
|||
"Int16": "SMALLINT",
|
||||
"Int32": "INTEGER",
|
||||
"Int64": "BIGINT",
|
||||
"Float": "FLOAT",
|
||||
"Float": "DOUBLE",
|
||||
"Double": "DOUBLE",
|
||||
"String": "VARCHAR",
|
||||
"V_String": "VARCHAR",
|
||||
|
|
|
|||
|
|
@ -38,8 +38,8 @@ FUNCTION_MAP: dict[str, str] = {
|
|||
"Ceil": "CEIL({0})",
|
||||
"FLOOR": "FLOOR({0})",
|
||||
"Floor": "FLOOR({0})",
|
||||
"ROUND": "ROUND({0}, {1})",
|
||||
"Round": "ROUND({0}, {1})",
|
||||
"ROUND": None, # handled in get_function_sql
|
||||
"Round": None, # handled in get_function_sql
|
||||
"SQRT": "SQRT({0})",
|
||||
"Sqrt": "SQRT({0})",
|
||||
"POW": "POWER({0}, {1})",
|
||||
|
|
@ -113,6 +113,12 @@ def get_function_sql(name: str, args: list[str]) -> str:
|
|||
break
|
||||
|
||||
if template is None:
|
||||
# Check for specially-handled functions
|
||||
upper = name.upper()
|
||||
if upper == "ROUND":
|
||||
return _render_round(args)
|
||||
if upper == "SWITCH":
|
||||
return _render_switch(args)
|
||||
# Unknown function — pass through as-is (may work in DuckDB natively)
|
||||
args_joined = ", ".join(args)
|
||||
return f"{name}({args_joined})"
|
||||
|
|
@ -130,6 +136,25 @@ def get_function_sql(name: str, args: list[str]) -> str:
|
|||
return f"{name}({args_joined})"
|
||||
|
||||
|
||||
def _render_round(args: list[str]) -> str:
|
||||
"""Alteryx Round(value, multiple).
|
||||
|
||||
Round(x, 0.01) → round to 2 decimal places
|
||||
Round(x, 1) → round to 0 decimal places
|
||||
Round(x, 100) → round to nearest 100
|
||||
Round(x) → round to 0 decimal places
|
||||
"""
|
||||
if len(args) == 0:
|
||||
return "NULL"
|
||||
if len(args) == 1:
|
||||
return f"ROUND({args[0]}, 0)"
|
||||
# Second arg is the rounding multiple as a decimal literal.
|
||||
# Convert to number of decimal places: n = -log10(multiple)
|
||||
# e.g. 0.01 → 2, 1 → 0, 100 → -2
|
||||
# Use CAST to INTEGER because DuckDB ROUND requires an int precision.
|
||||
return f"ROUND({args[0]}, CAST(-LOG10({args[1]}) AS INTEGER))"
|
||||
|
||||
|
||||
def _render_switch(args: list[str]) -> str:
|
||||
"""Switch(val, default, v1, r1, v2, r2, ...) → CASE val WHEN v1 THEN r1 ... ELSE default END"""
|
||||
if len(args) < 2:
|
||||
|
|
|
|||
|
|
@ -37,12 +37,26 @@ class SummarizeTool(BaseTool):
|
|||
return {"Output": df.select(group_fields).unique(maintain_order=True)}
|
||||
return {"Output": pl.DataFrame()}
|
||||
|
||||
# Upcast Float32 columns to Float64 before aggregation to avoid
|
||||
# floating-point precision noise (matches Alteryx behaviour).
|
||||
float32_cols = [
|
||||
c for c in df.columns
|
||||
if df[c].dtype == pl.Float32
|
||||
]
|
||||
if float32_cols:
|
||||
df = df.with_columns(
|
||||
[pl.col(c).cast(pl.Float64) for c in float32_cols]
|
||||
)
|
||||
|
||||
if group_fields:
|
||||
result = df.group_by(group_fields, maintain_order=True).agg(agg_exprs)
|
||||
# Restore group column order
|
||||
all_cols = group_fields + [e.meta.output_name() for e in agg_exprs]
|
||||
existing = [c for c in all_cols if c in result.columns]
|
||||
result = result.select(existing)
|
||||
# Sort by group columns for deterministic output
|
||||
# (Alteryx Summarize sorts groups alphabetically)
|
||||
result = result.sort(group_fields)
|
||||
else:
|
||||
result = df.select(agg_exprs)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue