1
votes

Filtrer par les N principales modifications du mois dernier à ce mois-ci

J'ai un ensemble de données sur les pièces, le prix par pièce et le mois. J'accède à ces données via une connexion en direct à une base de données SQL Server. Cette base de données est mise à jour mensuellement avec de nouveaux prix pour chaque pièce. Ce que je voudrais faire est de représenter graphiquement une année de données de prix pour les dix pièces dont les prix ont le plus changé au cours du dernier mois (soit en pourcentage du prix du mois dernier, soit en tant que variation totale en dollars).

Depuis ma base de données la connexion est en direct, idéalement, Tableau récupérerait les nouvelles données de prix chaque mois, mettant à jour les dix premières pièces dont les prix ont changé pour la nouvelle période. Je ne veux pas avoir à modifier manuellement les mois ou utiliser une procédure stockée si possible.

part   price      date
110    167.66     2018-12-01 00:00:00.000
113    157.82     2018-12-01 00:00:00.000
121    99.16      2018-12-01 00:00:00.000
133    109.82     2018-12-01 00:00:00.000
137    178.66     2018-12-01 00:00:00.000
138    154.99     2018-12-01 00:00:00.000
143    67.32      2018-12-01 00:00:00.000
149    103.82     2018-12-01 00:00:00.000
113    167.34     2018-11-01 00:00:00.000
121    88.37      2018-11-01 00:00:00.000
133    264.02     2018-11-01 00:00:00.000


4 commentaires

Question très intéressante sur la façon de déterminer le TOP 10 par prix et pourcentage. Je dirais que vous avez 20 articles. Le prix de 10 d'entre eux a augmenté de 100 $ à 110 $ (10%) et 10 autres articles ont augmenté de 1 $ à 2 $ (100%) - Quels articles montriez-vous?


@ slava-murygin Je suis curieux de savoir comment montrer les deux parce que je ne suis pas sûr de ce qui sera le plus bénéfique à long terme.


ahh nombres réels Pouvez-vous fournir une définition de table? Voulez-vous seulement le mois dernier?


Désolé ajouté un échantillon ci-dessus.


4 Réponses :


0
votes

Vous n'avez fourni aucun exemple de données, mais vous pouvez suivre quelque chose comme ceci,

;WITH top_parts AS (
    -- select the top 10 parts based on some criteria
    SELECT TOP 10 parts.[id], parts.[name] FROM parts
    ORDER BY <most changed>
)
SELECT price.[date], p.[name], price.[price] FROM top_parts p
INNER JOIN part_price price ON p.[id] = price.[part_id]
ORDER BY price.[date]
  1. Utilisez un CTE pour obtenir vos meilleures pièces.
  2. Sélectionnez dans le CTE, rejoignez le tableau des prix pour obtenir les prix de chaque pièce.
  3. Classez les prix ou divisez-les par mois.
  4. Intégrez-le à votre graphique.


0 commentaires

0
votes

Ce sera quelque chose comme ça pendant un mois seulement. Si vous avez besoin de toute l'année, vous devez spécifier clairement ce que vous voulez voir exactement:

;WITH cte as (
    SELECT TOP 10 m0.Part
        , Diff = ABS(m0.Price - m1.Price)
        , DiffPrc = ABS(m0.Price - m1.Price) / m1.Price
    FROM Parts as m0
    INNER JOIN (SELECT MaxDate = MAX([Date] FROM Parts) as md
        ON md.MaxDate = m0.[Date]
    INNER JOIN Parts as m1 ON m0.Part = m1.Part and DATEADD(MONTH,-1,md.MaxDate) = m1.[Date]
    ORDER BY ABS(m0.Price - m1.Price) DESC
    -- Top 10 by percentage:
    -- ORDER BY ABS(m0.Price - m1.Price) / m1.Price DESC
)
SELECT * FROM Parts as p
INNER JOIN cte ON cte.Part = p.Part


0 commentaires

1
votes
  1. Créez un champ calculé appelé Récent_Prix comme if DateDiff (‘month’, [date], Today ()) <= 1 then [price] end . Cela renvoie le prix des enregistrements récents et null pour les enregistrements plus anciens. Vous devrez peut-être modifier la condition en fonction des détails ou utiliser un calcul LOD pour toujours obtenir les deux dernières valeurs quelle que soit la date d'aujourd'hui.
  2. Créez un champ calculé appelé Price_Change comme Max ([Recent_Price]) - Min ([Recent_Price]) Notez que vous ne pouvez pas dire à partir de cela si le changement était positif ou négatif, juste son ampleur.
  3. Assurez-vous que la pièce est une cote discrète. Faites-le glisser vers l'étagère des filtres. Définissez le filtre pour afficher la partie Top N par Price_Change

Il n'est pas difficile d'étendre cela pour inclure le signe dans la modification de prix ou pour le convertir en pourcentage. Astuce, vous aurez probablement besoin d'une paire de calculs comme celui-ci à l'étape 1 pour sélectionner les prix pour des mois spécifiques


0 commentaires

0
votes
Select TOP (@TopN) parts,ChangePrice
(
select parts,ABS(max(price)-min(price)) as ChangePrice
from dbo.Table1
where dates>=@From and dates<=@InputLastMonth
group by parts
)t4
order by ChangePrice desc

0 commentaires