我有一个零件,每个零件价格和月份的数据集。我正在通过与SQL Server数据库的实时连接访问此数据。该数据库每月更新,每个部分的新价格。我想做的是绘制价格在过去一个月中变化最大的十个部分的一年价格数据(以上个月价格的百分比或美元的总变化为单位)。
由于我的数据库连接处于活动状态,因此理想情况下,Tableau将每月获取新的价格数据,以更新价格在新期间变化的前十个零件。我不想手动更改月份或使用存储过程。
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
答案 0 :(得分:1)
if DateDiff(‘month’, [date], Today()) <= 1 then [price] end
。这将返回最近记录的价格,而对于较早的记录将返回null。您可能需要根据详细信息调整条件,或者使用LOD calc始终获取最后2个值,而与今天的日期无关。Max([Recent_Price]) - Min([Recent_Price])
的计算字段,请注意,您不能由此看出变化是正还是负,仅是其大小。不难将其扩展为在价格变化中包含符号,或将其转换为百分比。提示,您可能需要一对步骤1中的计算来选择特定月份的价格
答案 1 :(得分:0)
您尚未提供任何示例数据,但可以遵循以下步骤
;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]
答案 2 :(得分:0)
这样的事情只持续了一个月。如果您需要整个年度,则必须明确指定要查看的内容:
;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
答案 3 :(得分:0)
-- Input from user,you decide in which format last month date will be pass
-- In other words , @InputLastMonth is parameter of proc
--Suppose it pass in yyyy-MM-dd manner
Declare @InputLastMonth date='2018-12-31'
-- to get last one year data
--Declare local variable which is not pass
declare @From date= dateadd(day,1,dateadd(month,-12, @InputLastMonth))
Declare @TopN int=10-- requirement
-选择@ InputLastMonth,@ From
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
通过最大的变化,我了解到,假设有一个零件“ Part1”在第一个月的价格为100,而在最后一个月的价格为1000。 另一方面,Part2在同一时期内多次更改,但最终更改仅为12。
换句话说,Part1仅更改了两次,但更改差异很大,Part2更改了几次,但更改差异很小。
因此,首选Part1。
第二件事是变化既可以是积极的,也可以是消极的。
如果我不理解您的要求,请纠正我。