Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSRS轴名称独立于图表数据_Sql Server_Reporting Services - Fatal编程技术网

Sql server SSRS轴名称独立于图表数据

Sql server SSRS轴名称独立于图表数据,sql-server,reporting-services,Sql Server,Reporting Services,我有一张有两个轴的图表。一个是基于一系列日期,另一个是一年到目前为止的日期。我的问题是,请求图表的人希望我显示今年迄今为止的数据以及所选日期,但现在希望我显示数据的所有可用组,无论它们是否存在于数据中 为了更清楚一点。以下是我正在使用的查询: SELECT COUNT(AdDate) AS ErrorCountYTD, BusinessUnit, '' AS ErrorCountCur FROM MasterAnnotation WHERE (ActualAgen

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

为了更清楚一点。以下是我正在使用的查询:

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年没有任何问题需要报告


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

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

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

举个这样的例子,它令人难以置信地懒惰,而且可能不是您在生产中想要的:

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中获得所有记录—我的完整业务单元列表,以及它们的错误计数值—如果它们有。如果给定业务的ma2中没有相应的记录,ErrorCount字段将返回空值,然后您可以根据需要处理这些值,并将其替换为零、保留空值等

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