首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Tableau -计算日期小于来自另一个数据源的值的平均值

Tableau -计算日期小于来自另一个数据源的值的平均值
EN

Stack Overflow用户
提问于 2016-01-13 04:20:57
回答 2查看 1.1K关注 0票数 3

我正在尝试计算Tableau中列的平均值,但问题是我尝试使用来自另一个数据源的单个日期值(基于筛选器)来仅计算检查日期为<=来自另一个数据源的过滤日期值的平均值。

注意:这里的参数对我不起作用,因为新的日期值不断地添加到集合中。

我尝试了许多不同的方法,但最简单的方法是尝试使用一个计算字段,该字段从其他数据源中拉入过滤后的检查日期。

可以成功拉取过滤后的日期,但公式不能正常工作。计算的两个版本如下:

代码语言:javascript
运行
复制
IF DATE(ATTR([Exam Date])) <= DATE(ATTR([Averages (Tableau Test Scores)].[Updated])) THEN AVG([Raw Score]) END

IF DATEDIFF('day', DATE(ATTR([Exam Date])), DATE(ATTR([Averages (Tableau Test Scores)].[Updated]))) > 1 THEN AVG([Raw Score]) END

基本上,我正在寻找SQL Server中的等价物:

代码语言:javascript
运行
复制
SELECT AVG([Raw Score]) WHERE ExamDate <= (Filtered Exam Date)

下面是一个工作簿,它显示了我正在尝试完成的一个示例。目前它返回所有空格,可能是因为我试图在计算中使用多对一比较。

任何反馈都是非常感谢的!

Tableau Test Exam Workbook

EN

回答 2

Stack Overflow用户

发布于 2016-02-25 23:12:02

我能够解决这个问题,方法是使用Custom SQL将表连接在一起,并根据我的条件计算平均值,以获得我想要的列结果。

直接在Tableau中拥有这个能力还是很棒的,但无论什么都可以完成工作。

编辑:

代码语言:javascript
运行
复制
SELECT 
[AcademicYear]
,[Discipline]
--Get the number of student takers
,COUNT([Id]) AS [Students (N)]
--Get the average of the Raw Score
,CAST(AVG(RawScore) AS DECIMAL(10,2)) AS [School Mean]
--Get the number of failures based on an "adjusted score" column
,COUNT([AdjustedScore] < 70 THEN 1 END) AS [School Failures]
--This is the column used as the cutoff point for including scores
,[Average_Update].[Updated]
FROM [dbo].[Average] [Average]

FULL OUTER JOIN [dbo].[Average_Update] [Average_Update] ON ([Average_Update].[Id] = [Average].UpdateDateId)

--The meat of joining data for accurate calculations
FULL OUTER JOIN (
SELECT DISTINCT S.[Id], S.[LastName], S.[FirstName], S.[ExamDate], S.[RawScoreStandard], S.[RawScorePercent], S.[AdjustedScore], S.[Subject], P.[Id] AS PeriodId
FROM [StudentScore] S
FULL OUTER JOIN
(
--Get only the 1st attempt
SELECT DISTINCT [NBOMEId], S2.[Subject], MIN([ExamDate]) AS ExamDate
FROM [StudentScore] S2
GROUP BY [NBOMEId],S2.[Subject]
) B
ON S.[NBOMEId] = B.[NBOMEId] AND S.[Subject] = B.[Subject] AND S.[ExamDate] = B.[ExamDate]
--Group in "Exam Periods" based on the list of periods w/ start & end dates in another table.
FULL OUTER JOIN [ExamPeriod] P 
ON  S.[ExamDate] = P.PeriodStart AND S.[ExamDate] <= P.PeriodEnd
WHERE S.[Subject] = B.[Subject]
GROUP BY P.[Id], S.[Subject], S.[ExamDate], S.[RawScoreStandard], S.[RawScorePercent], S.[AdjustedScore], S.[NBOMEId], S.[NBOMELastName], S.[NBOMEFirstName], S.[SecondYrTake]) [StudentScore]  
ON 
([StudentScore].PeriodId = [Average_Update].ExamPeriodId 
AND [StudentScore].Subject = [Average].Subject 
AND [StudentScore].[ExamDate] <= [Average_Update].[Updated])
--End meat


--Joins to pull in relevant data for normalized tables
FULL OUTER JOIN [dbo].[Student] [Student] ON ([StudentScore].[NBOMEId] = [Student].[NBOMEId])
INNER JOIN [dbo].[ExamPeriod] [ExamPeriod] ON ([Average_Update].ExamPeriodId = [ExamPeriod].[Id])
INNER JOIN [dbo].[AcademicYear] [AcademicYear] ON ([ExamPeriod].[AcademicYearId] = [AcademicYear].[Id])

--This will pull only the latest update entry for every academic year.
WHERE [Updated] IN (
SELECT DISTINCT MAX([Updated]) AS MaxDate
FROM [Average_Update]
GROUP BY[ExamPeriodId])

GROUP BY [AcademicYear].[AcademicYearText], [Average].[Subject], [Average_Update].[Updated], 
ORDER BY [AcademicYear].[AcademicYearText], [Average_Update].[Updated], [Average].[Subject]
票数 1
EN

Stack Overflow用户

发布于 2016-01-14 05:08:21

我无法下载你的文件来测试你的数据,但尝试颠倒取平均值的顺序。

average(IF DATE(ATTR(考试日期)) <= DATE(ATTR(Averages (Tableau Test Score) .Updated) then原始分数)结束)

正如所写的,我相信在从if语句返回数据之前,您将对数据求平均,而您想要返回数据,然后对其求平均。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34753054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档