首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSRS轴名与图表数据无关

SSRS轴名与图表数据无关
EN

Stack Overflow用户
提问于 2014-02-10 16:54:58
回答 1查看 86关注 0票数 3

我有一张有两个轴的图表。一种是基于日期范围的,另一种是迄今为止的一年。我的问题是,请求图表的人希望我显示今年迄今的数据,以及选定的日期,但现在希望我显示数据的所有可用组,无论数据中是否存在。

为了更清晰一点。下面是我使用的查询:

代码语言:javascript
复制
SELECT     COUNT(AdDate) AS ErrorCountYTD, BusinessUnit, '' AS ErrorCountCur
FROM         MasterAnnotation
WHERE     (ActualAgencyError = 'Yes') AND (Client = @Client) AND (DATEPART(YY, AdDate) = DATEPART(YY, sysdatetime())) AND (BusinessUnit IS NOT NULL) AND 
                      (BusinessUnit <> '') AND (AnnotationDate = 'Final_Proof')
GROUP BY BusinessUnit
UNION ALL
SELECT     '' AS ErrorCount, BusinessUnit, COUNT(AdDate) AS ErrorCountCur
FROM         MasterAnnotation AS MasterAnnotation_1
WHERE     (ActualAgencyError = 'Yes') AND (Client = @Client) AND (AdDate IN (@ReleaseAD)) AND (BusinessUnit IS NOT NULL) AND (BusinessUnit <> '') AND 
                      (AnnotationDate = 'Final_Proof')
GROUP BY BusinessUnit

因此,如果客户有15个业务单元,但它们在2014年没有活动,我将不会显示任何数据。是否有一种方法可以编写查询的第一部分,使业务单元独立于数据?我有一些业务部门在2013年生效,但2014年没有任何问题要报告。

我不确定这在查询中是否可行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-10 19:41:35

如果我正确理解了您的问题,这在SQL中实际上是非常容易做到的。我无意冒犯,但听起来您可能没有多少SQL经验。如果是这样的话,我强烈建议阅读一些SQL基础知识,特别是JOIN语句。

要解决这个问题,您需要选择一组包含所有业务单元的数据,另一组包含这些业务单元的度量标准。然后,使用外部联接将集合连接到一起,以便持久化业务单元的完整列表,无论它们是否有相应的度量记录。

其中一个例子是,这令人难以置信的懒惰,而且很可能你在生产中并不想要这样的东西:

代码语言:javascript
复制
SELECT
    ma1.BusinessUnit
    ,ma2.ErrorCountCur
    ,ma2.ErrorCountYTD
FROM
(
SELECT DISTINCT
    BusinessUnit
FROM
    MasterAnnotation
) ma1
LEFT JOIN
( 
    SELECT
        BusinessUnit 
        ,'' AS ErrorCountCur
        ,COUNT(AdDate) AS ErrorCountYTD
    FROM
        MasterAnnotation
    WHERE
        ActualAgencyError = 'Yes'
        AND Client = @Client
        AND DATEPART(YY, AdDate) = DATEPART(YY, sysdatetime()) 
        AND BusinessUnit IS NOT NULL
        AND BusinessUnit <> ''
        AND AnnotationDate = 'Final_Proof'
    GROUP BY
        BusinessUnit
    UNION ALL
    SELECT 
        BusinessUnit
        ,COUNT(AdDate) AS ErrorCountCur
        ,'' AS ErrorCountYTD
    FROM
        MasterAnnotation AS MasterAnnotation_1
    WHERE
        ActualAgencyError = 'Yes' 
        AND Client = @Client
        AND AdDate IN (@ReleaseAD)
        AND BusinessUnit IS NOT NULL
        AND BusinessUnit <> '' 
        AND (AnnotationDate = 'Final_Proof')
    GROUP BY 
        BusinessUnit
) ma2
ON
    ma1.BusinessUnit = ma2.BusinessUnit

在这里,我将您的原始查询放入一个“子查询”中,别名为"ma2“。我创建了一个自己的新查询,其中我只选择不同的businessunit值(通常不是很好的实践,特别是如果这个表包含了很多记录)。

通过将它们连接在一起,我将从ma1 (我的完整业务单元列表)获得所有记录,以及它们的ErrorCounts的值(如果它们有任何的话)。如果给定业务在ma2中没有对应的记录,则ErrorCount字段将返回为"null“值,然后您可以根据需要处理这些值(用零替换、离开空等)。

您可以调整每个子查询的WHERE子句,以筛选到所需的数据。GROUP BY语句也可能不需要在子查询中。但实际上,上面的查询只是一个例子。

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

https://stackoverflow.com/questions/21683249

复制
相关文章

相似问题

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