使用 SQL 函数排除帐户段

问题描述 投票:0回答:1

我正在 Power BI 中构建一个视觉效果,以可视化不同的业务线。我正在使用的帐户是在数据库中的不同段中构建的(c_Seg1、c_Seg2、c_Seg3..等),我试图排除特定段的值(c_Seg7,在这些帐户之一中也称为 Dim7)。 Seg7 是我正在使用的数据库中的一列。我还有 3 个详细信息组来过滤帐户 c_detailgroup = 'Group 1' 'Group 2', 'Group 3'。

这是我的 SQL 查询,它没有提取应有的值:

SELECT CASE
           WHEN gl.Scenario = 1 THEN 'Actuals'
           WHEN gl.Scenario = 6 THEN 'Budget'
           ELSE 'UNKNOWN'
       END AS Scenario ,
       *
FROM [database].[dbo].[f_Trans_GL] gl
LEFT JOIN database.dbo.d_Dim0 d0 ON gl.Dim0 = d0.CustomerId
LEFT JOIN database.dbo.d_Dim8 d8 ON gl.Dim8 = d8.CustomerId
WHERE c_Seg7 NOT IN ('001','002','003','004')
   AND gl.Scenario IN (1,
                       6)
   AND gl.Entity = 1
   AND c_detail group = 'Group 1'
   OR c_detail group = 'Group 2'
   OR c_detail group = 'Group 3'

这并没有拉入正确的信息,我尝试在Power BI中过滤Seg7,但仍然没有返回正确的值。

我尝试了排除段金额的不同变体,包括:

SELECT CASE
           WHEN gl.Scenario = 1 THEN 'Actuals'
           WHEN gl.Scenario = 6 THEN 'Budget'
           ELSE 'UNKNOWN'
       END AS Scenario ,
       *
FROM [database].[dbo].[f_Trans_GL] gl
LEFT JOIN database.dbo.d_Dim0 d0 ON gl.Dim0 = d0.CustomerId
LEFT JOIN database.dbo.d_Dim8 d8 ON gl.Dim8 = d8.CustomerId
   AND gl.Scenario IN (1,
                       6)
   AND gl.Entity = 1
   AND c_detail group = 'Group 1'
   OR c_detail group = 'Group 2'
   OR c_detail group = 'Group 3'
   AND NOT c_Seg7 = '001'
   AND NOT c_Seg7 = '002'
   AND NOT c_Seg7 = '003'

我也尝试过在 Power BI 中过滤数据以获得正确的值,但没有成功。

sql database powerbi finance accounting
1个回答
0
投票

您应该将 AND 条件放在括号内,以确保正确的逻辑分组。您还需要对 c_detail 组条件使用 AND 而不是 OR 来过滤“组 1”、“组 2”或“组 3”的记录。

SELECT CASE
           WHEN gl.Scenario = 1 THEN 'Actuals'
           WHEN gl.Scenario = 6 THEN 'Budget'
           ELSE 'UNKNOWN'
       END AS Scenario ,
       *
FROM [database].[dbo].[f_Trans_GL] gl
LEFT JOIN database.dbo.d_Dim0 d0 ON gl.Dim0 = d0.CustomerId
LEFT JOIN database.dbo.d_Dim8 d8 ON gl.Dim8 = d8.CustomerId
WHERE gl.Scenario IN (1, 6)
   AND gl.Entity = 1
   AND (c_detail group = 'Group 1'
        OR c_detail group = 'Group 2'
        OR c_detail group = 'Group 3')
   AND c_Seg7 NOT IN ('001', '002', '003', '004');
© www.soinside.com 2019 - 2024. All rights reserved.