Graph Builder Bar Graph filter by top 10 SumsJ'ai un graphique à barres horizontales empilées et je souhaite le limiter aux 10 premières sommes par catégorie de l'axe Y.
Les données correspondent à une année de commandes clients.Chaque ligne est un élément de ligne de commande qui a un client, une valeur et un pays client (entre autres données).L'axe des x est la somme statistique récapitulative de la valeur de la commande.L'axe des ordonnées est le nom du client.Et l'empilement (superposition) se fait par pays client.
Mon objectif n'est pas de montrer tous les 1 000 clients, mais plutôt les 10 premiers par le total de leurs valeurs de commande.
Le script pour le moment ressemble à ceci, où sales org. est le pays du client
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" )}
)
)
)Re : Graph Builder Bar Graph filter by top 10 SumsVoici ce que j'ai fini par faire.Merci de votre aide.
Le top 20 avait l'air plus sympa.
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" )}
)
)
)Re : Graph Builder Bar Graph filter by top 10 SumsOups... mon erreur... content que vous l'ayez compris !
Re : Graph Builder Bar Graph filter by top 10 SumsD'accord, le problème est "==", juste besoin d'un "="Re : Graph Builder Bar Graph filter by top 10 SumsJ'aime la 2ème approche.Le script semble s'arrêter juste après la première section de code.
dtSum == dt << Summary(
Group( :Customer ),
Sum( :Total Dollars Ordered ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "column" ),
Link to original data table( 0 )
);
Parce que je reçois une nouvelle table de données mais elle n'est pas triée et n'a pas de rang. Quel est le prochain ensemble de JSL.
Re : Graph Builder Bar Graph filter by top 10 SumsJe vous suggère de créer une nouvelle table de données contenant uniquement les clients figurant dans le top 10.Le script ci-dessous génère le sous-ensemble, puis trace les données.
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" )}
)
)
);
Je n'avais pas de copie de vos données, donc je n'ai pas complètement testé le script, mais je pense que cela devrait fonctionner.
Vous pouvez également modifier le script pour créer le numéro de commande du tableau récapitulatif, puis le réintégrer dans le tableau de données d'origine et l'utiliser dans un filtre de données local pour permettre la sélection sur la commande.
Voici un script qui est une approximation de la façon de créer le graphique à l'aide d'un filtre de données local
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 ) )
);