【发布时间】:2021-07-01 07:20:46
【问题描述】:
我在 T-SQL 中有以下代码,它根据特定条件计算 [C-Services] 表的不同 [ClientID],并在多个字段上加入 [C_Episode] 表:
SELECT
cs.[ProgramName] AS [Program]
,COUNT(DISTINCT cs.[ClientID]) AS [# Clients Served]
FROM
[C_Services] cs
INNER JOIN [C_Episodes] epi ON (
(epi.[ProgramID] = cs.[ProgramID])
AND (epi.[ClientID] = cs.[ClientID])
AND (epi.[AdmissionDate] <= cs.[ServiceMonth])
AND (epi.[DischargeDate] >= cs.[ServiceMonth])
)
WHERE
(cs.[ClientID] > 0)
AND (cs.[IsNoShow] = 0)
AND (cs.[IsCancellation] = 0)
AND (cs.[IsNonClaimable] = 0)
GROUP BY
cs.[ProgramName]
另外,我也有与上述代码关联的 DAX Measure,但没有 INNER JOIN [C-Episodes] 表:
VAR countClients =
CALCULATE (
DISTINCTCOUNT ( 'C_Services'[ClientID] ),
FILTER (
'C_Services',
[ClientID] > 0
&& [Is Non-Claimable] = FALSE ()
&& [Is No-show] = FALSE ()
&& [Is Cancellation] = FALSE ()
)
)
RETURN
countClients
我的问题是—— 如何修改 DAX 度量以添加 INNER JOIN [C_Episodes] 表(在 T-SQL 代码中说明的三个条件下加入)?
我正在尝试为第一个 JOIN ON ProgramID 列添加
NATURALINNERJOIN('C_Services'[ProgramID], 'C_Episodes'[ProgramID])
但它给出了一个错误 - “需要分组”,并且在我尝试将我的计算更改为 Summarize 或 Summarizecolumns 之后 - 它仍然给出了一个错误。
【问题讨论】:
-
内部连接到
[C_Episodes]做什么?它会过滤数据吗?因为它与 select 子句或WHERE过滤器中的任何内容都没有任何关系 -
@Nick.McDermaid 是的,它过滤了某些剧集。 (数据)我需要内连接该表,但不知道如何在 DAX 中编写它!
-
使用过滤功能排除行
-
@Nick.McDermaid 但是 - 为了排除行,我需要那个 JOIN 。我需要通过 ProgramID、ClientID 和日期(根据我的 T_SQL 条件)将 C_Episodes 与 C_Services 匹配。我如何使用过滤器来做到这一点?
-
您能否通过 TSQL DDL 或在此处提供两个示例表来提供 [C_Services] 和 [C_Episodes] 的示例数据。