我有一个 Microsoft Power BI (.pbix) 文件。我需要使用 DAX 语言开发一个计算表。
(我不想要基于 Power Query 的解决方案。)
场景:
我有一个名为“SourceInput”的简单表,其中包含 EmployeeId、DeviceId 和 OperationDate 的数据。
以上三个是 SQL 术语中正确的 GROUP BY 列。
该表还有一列,名为“OperationStartTime”。
现在,对于前 3 列(EmployeeId、DeviceId 和 OperationDate)的每个组合,我们需要导出最小操作开始时间,条件是:
仅当操作开始时间在 12:00 之后时,获取给定的 EmployeeId、DeviceId 和 OperationDate 组合的最小操作开始时间,即 获取给定的 EmployeeId、DeviceId 和 OperationDate 组合的最短操作开始时间(AT 或下午 12 点后)。
如果对于给定的 EmployeeId、DeviceId 和 OperationDate 组合,在中午 12 点或之后没有 OperationStartTime,则我们显示 BLANK()。
请注意,虽然OperationDate 列是日期,但OperationStartTime 列具有日期时间值。
请参阅下面的图像文件:
我开发了一个简单的基于 DAX 的计算表,如下所示,效果很好,您可以看到 .pbix 文件。
DesiredOuput_DAX_CalculatedTable
=
ADDCOLUMNS (
SUMMARIZE(
SourceInput,
SourceInput[EmployeeId],
SourceInput[DeviceId],
SourceInput[OperationDate],
SourceInput[OperationStartTime]
),
"EarliestOperationStartTimeAfter12PM", CALCULATE(
MIN(SourceInput[OperationStartTime]),
FILTER(
VALUES(SourceInput[OperationStartTime]),
HOUR(SourceInput[OperationStartTime]) >= 12
--i.e. after 12 PM OperationStartTime only--
)
)
)
但是,在我的实际项目中,“SourceInput”表的列太多,我们需要删除不需要的列,因此我必须在中间步骤中使用 DAX 变量。
我开发了一个等效的基于 DAX 的计算表,如下所示,使用另一个名为“SourceInputExpanded”的源表,其中包含变量来存储中间步骤的数据:
DesiredOuput_DAX_CalculatedTable_WithVariables
=
VAR SourceInput_CT_Variable = SELECTCOLUMNS(
SourceInputExpanded,
"EmployeeId1", SourceInputExpanded[EmployeeId],
"DeviceId1", SourceInputExpanded[DeviceId],
"OperationDate1", SourceInputExpanded[OperationDate],
"OperationStartTime1", SourceInputExpanded[OperationStartTime]
--remove undesired columns using this calculated table variable--
)
VAR Output_CT_Variable = ADDCOLUMNS (
SUMMARIZE(
SourceInput_CT_Variable,
[EmployeeId1],
[DeviceId1],
[OperationDate1],
[OperationStartTime1]
),
"EarliestOperationStartTimeAfter12PM", CALCULATE(
MINX(
SourceInput_CT_Variable,
[OperationStartTime1]
),
FILTER(
SUMMARIZE(
SourceInput_CT_Variable,
[OperationStartTime1]
),
HOUR([OperationStartTime1]) >= 12
--i.e. after 12 PM OperationStartTime only--
)
)
)
RETURN Output_CT_Variable
我没有得到所需的输出。
我的第二种变量方法哪里出错了?
有人可以纠正这个吗?
我还没有完全适应使用DAX计算表变量,它的列,有一些棘手的逻辑 在与其血统相关的语法中......
输出 DAX 计算表的 EarliestOperationStartTimeAfter12PM 列不正确,GROUP BY 部分在第二种情况下不起作用。
您的第一个计算表(DesiredOuput_DAX_CalculatedTable)也不正确。您按所有四列而不是前三列进行分组,这不是您的要求所规定的。即使您有想要忽略的列,除了简单的摘要之外,您也不需要任何其他内容。这不符合您的要求吗?
DesiredOuput_DAX_CalculatedTable =
ADDCOLUMNS (
SUMMARIZE(
SourceInputExpanded,
SourceInputExpanded[EmployeeId],
SourceInputExpanded[DeviceId],
SourceInputExpanded[OperationDate]
),
"EarliestOperationStartTimeAfter12PM", CALCULATE(
MIN(SourceInputExpanded[OperationStartTime]),
FILTER(
VALUES(SourceInputExpanded[OperationStartTime]),
HOUR(SourceInputExpanded[OperationStartTime]) >= 12
--i.e. after 12 PM OperationStartTime only--
)
)
)