Graph Builder Balkendiagramm-Filter nach Top-10-SummenIch habe ein horizontal gestapeltes Balkendiagramm und möchte es auf die Top-10-Summen nach Y-Achsen-Kategorie beschränken.
Die Daten umfassen die Kundenbestellungen eines Jahres.Jede Zeile ist ein Auftragsposten, der einen Kunden, einen Wert und ein Kundenland (neben anderen Daten) enthält.Die x-Achse ist die zusammenfassende statistische Summe des Bestellwerts.Die y-Achse ist der Kundenname.Und das Stapeln (Overlay) erfolgt nach Kundenland.
Mein Ziel ist es, nicht alle 1.000 Kunden anzuzeigen, sondern nur die Top 10 nach Summe ihrer Bestellwerte.
Das Skript sieht im Moment so aus, wobei sales org. ist das Land des Kunden
Graph Builder(
Size( 905, 603 ),
Variables(
X( :Total Dollars Ordered ),
Y(
:Customer,
Order By( :Total Dollars Ordered, Ascending, Order Statistic( "Sum" ) )
),
Overlay( :Sales Organization Code )
),
Elements(
Bar( X, Y, Legend( 4 ), Bar Style( "Stacked" ), Summary Statistic( "Sum" ) )
),
SendToReport(
Dispatch(
{},
"graph title",
TextEditBox,
{Set Text( "Total Dollars Ordered by Customer" )}
)
)
)Betreff: Graph Builder Balkendiagrammfilter nach Top-10-SummenHier ist, was ich am Ende gemacht habe.Danke für Ihre Hilfe.
Top 20 sah schöner aus.
names default to here(1);
dt=current data table();
//Summarize the Total Dollars Ordered by Customer
dtSum = dt << Summary(
Group( :Customer ),
Sum( :Total Dollars Ordered ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "column" ),
Link to original data table( 0 )
);
//Sort the new data table
dtSum << sort( by(:Total Dollars Ordered), order(descending),replace table(1));
//Add Customer Sales Rank
//because the data is sorted the rank is the row number
dtSum << New Column("Customer Sales Rank", formula(Row()));
dtSum:Customer Sales Rank << delete property("formula");
dtSum << delete columns({"Total Dollars Ordered", "N Rows"});
//add the Customer Sales Rank back to the original data table
dt << Update(
With( dtSum ) ,
Match Columns( :Customer == :Customer )
);
//close the helper table
close(dtSum);
//Create the graph, horizontal bar graph, highest sales at the top,
dt << Graph Builder(
Size( 966, 804 ),
//hide the control panel
Show Control Panel( 0 ),
Variables(
X( :Total Dollars Ordered ),
Y(
:Customer,
Order By( :Total Dollars Ordered, Ascending, Order Statistic( "Sum" ) )
),
Overlay( :Sales Organization Code )
),
Elements(
Bar(
X,
Y,
Legend( 4 ),
Bar Style( "Stacked" ),
Summary Statistic( "Sum" ),
Label( "Label by Percent of Total Values" )
)
),
Local Data Filter(
//hide the local filer
Close Outline(1),
Add Filter(
columns( :Customer Sales Rank ),
Where( :Customer Sales Rank >= 1 & :Customer Sales Rank <= 20 )
)
),
SendToReport(
Dispatch(
{},
"graph title",
TextEditBox,
{Set Text( "Total Dollars Ordered by Customer" )}
)
)
)Betreff: Graph Builder Balkendiagrammfilter nach Top-10-SummenUps .... mein Fehler .... froh, dass Sie es bemerkt haben!
Betreff: Graph Builder Balkendiagrammfilter nach Top-10-SummenOkay, das Problem ist "==", ich brauche nur ein "="Betreff: Graph Builder Balkendiagrammfilter nach Top-10-SummenIch mag den 2. Ansatz.Das Skript scheint direkt nach dem ersten Codeabschnitt anzuhalten.
dtSum == dt << Summary(
Group( :Customer ),
Sum( :Total Dollars Ordered ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "column" ),
Link to original data table( 0 )
);
Weil ich eine neue Datentabelle bekomme, aber sie ist nicht sortiert und hat keinen Rang. Welches ist der nächste Satz von JSL.
Betreff: Graph Builder Balkendiagrammfilter nach Top-10-SummenIch schlage vor, dass Sie eine neue Datentabelle erstellen, die nur die Kunden enthält, die zu den Top 10 gehören.Das folgende Skript generiert die Teilmenge und zeichnet dann die Daten.
names default to here(1);
dt=current data table();
dtSum == dt << Summary(
Group( :Customer ),
Sum( :Total Dollars Ordered ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "column" )
);
dtSum << sort( by(:Total Dollars Ordered), order(descending),replace table(1));
dtSum << select where(Row()>10);
dtSum << delete rows;
dtFinal = dt<< Join(
With( dtSum ),
By Matching Columns( :Customer = :Customer ),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 )
);
dtFinal << Graph Builder(
Size( 905, 603 ),
Variables(
X( :Total Dollars Ordered ),
Y(
:Customer,
Order By( :Total Dollars Ordered, Ascending, Order Statistic( "Sum" ) )
),
Overlay( :Sales Organization Code )
),
Elements(
Bar( X, Y, Legend( 4 ), Bar Style( "Stacked" ), Summary Statistic( "Sum" ) )
),
SendToReport(
Dispatch(
{},
"graph title",
TextEditBox,
{Set Text( "Total Dollars Ordered by Customer" )}
)
)
);
Ich hatte keine Kopie Ihrer Daten, also habe ich das Skript nicht vollständig getestet, aber ich denke, es sollte funktionieren.
Sie können das Skript auch ändern, um die Bestellnummer der Übersichtstabelle zu erstellen, und diese dann wieder mit der ursprünglichen Datentabelle verknüpfen und diese in einem lokalen Datenfilter verwenden, um eine Auswahl für die Bestellung zu ermöglichen.
Hier ist ein Skript, das eine Annäherung an die Erstellung des Diagramms mit einem lokalen Datenfilter darstellt
names default to here(1);
dt=current data table();
dtSum == dt << Summary(
Group( :Customer ),
Sum( :Total Dollars Ordered ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "column" ),
Link to original data table( 0 )
);
dtSum << sort( by(:Total Dollars Ordered), order(descending),replace table(1));
dtSum << New Column("Rank", formula(Row()));
dtSum:Rank << delete property("formula");
dtSum << delete columns({"Total Dollars Ordered", "N Rows"})
dt<< Update(
With( dtSum ) ,
Match Columns( :Customer == :Customer )
);
dt << Graph Builder(
Size( 905, 603 ),
Variables(
X( :Total Dollars Ordered ),
Y(
:Customer,
Order By( :Total Dollars Ordered, Ascending, Order Statistic( "Sum" ) )
),
Overlay( :Sales Organization Code )
),
Elements(
Bar( X, Y, Legend( 4 ), Bar Style( "Stacked" ), Summary Statistic( "Sum" ) )
),
SendToReport(
Dispatch(
{},
"graph title",
TextEditBox,
{Set Text( "Total Dollars Ordered by Customer" )}
)
),
Local Data Filter(
Add Filter( columns( :Rank ), Where( :Rank >= 1 & :Rank <= 11 ) )
);