【发布时间】:2016-04-10 09:30:21
【问题描述】:
【问题讨论】:
-
您要在 Tableau 还是 SQL 中使用这个?在 Tableau 中,我们可以轻松实现这一点。
-
请在 Tableau 中给我解决方案。
-
研究
group by rollup
标签: sql sql-server tableau-api
【问题讨论】:
group by rollup
标签: sql sql-server tableau-api
在 Oracle 中,您将使用以下语句,但在 case 语句中可能并不完全正确:
Select
Site,
sum(value * (case (date_transaction > trunc(sysdate, 'MM') then 1 else 0 end))
volume_current_month
from myTable
where date_transaction between add_months(trunc(sysdate,'MM'),-1) and sysdate
group by site
使用另一个case语句和ADD_MONTHS,上个月大致相同。
【讨论】:
CASE WHEN,但也许Oracle 接受这个?
在 Tableau 中有两种方法可以做到这一点:
第一种方式。
Under Analysis --> Total --> Add All SubTotals .
第二种方式:
创建一个计算字段Total_event 为:
WINDOW_SUM(SUM([Event Count]))
将 Window_sum 计算为 COMPUTE USING EVENT NAME 。
【讨论】:
如果您可以使用 sql 并且您实际上需要前一个月,而不仅仅是 EventName 汇总的所有月份,那么您可以使用 LAG。我假设您按 EventName 求和,并且您只想要当前 EventName 和以前的 EventNAme
WITH Summed
AS
(
SELECT * ,
LAG(EventCount) OVER (Partition BY EventName ORDER BY trialmonth) as PrevEvent
FROM dbo.Table1
)
SELECT *,
SUM(PrevEvent+EventCount) AS SummedCount
FROM summed
GROUP BY Site
,TrialMonth
,EventName
,EventCount
, PrevEvent
这将产生这样的输出
Site TrialMonth EventName EventCount PrevEvent SummedCount
12101 2001-10-15 Actual Count 4 NULL NULL
12101 2001-10-15 Projected Count 8 NULL NULL
12101 2001-11-15 Actual Count 6 4 10
12101 2001-11-15 Projected Count 9 8 17
12101 2001-12-15 Actual Count 0 6 6
12101 2001-12-15 Projected Count 10 9 19
【讨论】:
在tableau中->创建计算字段->
//这是上个月的
if [date] >= DATE("01" +"-" + (Month(TODAY())-1) +"-" + YEAR(TODAY()))
and [date] <= DATE("31" +"-" + (Month(TODAY())-1) +"-" + YEAR(TODAY()))
//if the month has 30 or 28 days it will check that there is no 31 and return null
then
sum([Value])
end
//当前月份->
if Month([date]) = Month(TODAY()) then
sum([Value])
end
您将 2 个字段返回上个月的总和和当前月份的总和,然后您可以随意使用它们。
在 sql 端你可以使用
上个月 ->
select sum(value) from table_name t where DATE_PART('month',t.date)=DATE_PART('month',TIMESTAMPADD(mm,-1,GETDATE()))
当前月份 ->
select sum(value) from table_name t where DATE_PART('month',t.date)=DATE_PART('month',GETDATE()))
【讨论】: