DAX Studio 中的 YTD Measure 不显示多个日期的任何值
YTD Measure in DAX Studio doesn't show any value for several dates
尝试根据 https://www.daxpatterns.com/time-patterns/ 指南
在 DAX STUDIO 中计算多个日期的 YTD
我在我的模型中创建了一个度量,当我使用 Date Dimension 并为每个日期计算 YTD 时它完成了工作
CALCULATE (
[Sales Amt],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
但是当我尝试使用 DAX Studio 重现相同的结果时,只有当我过滤特定日期的 CALCULATETABLE 时我才能得到正确的结果
此代码完美运行:
EVALUATE
CALCULATETABLE(
ADDCOLUMNS (
VALUES ( 'Date'[Date] ),
"YTD", CALCULATE (
[Sales Amt],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
)
,
'Date'[Date] = DATE(2018,5,1)
)
对于行中的每个日期,此代码预计 return YTD,但不幸的是它没有。我做错了什么?:
EVALUATE
CALCULATETABLE(
ADDCOLUMNS (
VALUES ( 'Date'[Date] ),
"YTD", CALCULATE (
[Sales Amt],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
)
,
'Date'[Date] >= DATE(2018,5,1)
)
唯一的区别是 = 与 >=,但我得到所有行的空结果
您定义度量的方式没有问题。
但是,在测试度量值时,您应该尝试以类似于 Power BI 等客户端工具的方式编写 DAX 查询:
EVALUATE
SUMMARIZECOLUMNS(
'Date'[Date],
FILTER('Date', 'Date'[Date] >= DATE(2018,5,1)),
"YTD", CALCULATE (
[Sales Amt],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
)
甚至更好:
DEFINE MEASURE 'Sales'[Sales Amt YTD] = CALCULATE (
[Sales Amt],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
EVALUATE
SUMMARIZECOLUMNS(
'Date'[Date],
FILTER('Date', 'Date'[Date] >= DATE(2018,5,1)),
"YTD", [Sales Amt YTD]
)
您使用 CALCULATETABLE 编写它的方式的问题在于,您在 'Date'[Date] 列上创建了一个外部过滤器上下文,其中包含从 2018-05-01 开始的所有日期。在 FILTER 语句中评估 YTD 逻辑时,MAX('Date'[Year])
使用此过滤器上下文,因此 returns 整个 'Date' table 中最大的年份(例如 2025 ).
请记住,CALCULATE
函数仅在计算第一个参数时应用上下文转换(行上下文到过滤器上下文)。过滤器参数在原始过滤器上下文中计算。
如果你想坚持你的语法,你可以写一个额外的 CALCULATE
来强制上下文转换也适用于内部 CALCULATE
调用的第二个参数:
EVALUATE
CALCULATETABLE(
ADDCOLUMNS (
VALUES ( 'Date'[Date] ),
"YTD",
CALCULATE( // Additional CALCULATE to force context transition on filter arguments
CALCULATE (
[Sales Amt],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
)
),
'Date'[Date] >= DATE(2018,5,1)
)
这与直接引用度量相同,因为引用度量总是进行隐式计算:
EVALUATE
CALCULATETABLE(
ADDCOLUMNS (
VALUES ( 'Date'[Date] ),
"YTD", [Sales Amt YTD]
),
'Date'[Date] >= DATE(2018,5,1)
)
尝试根据 https://www.daxpatterns.com/time-patterns/ 指南
在 DAX STUDIO 中计算多个日期的 YTD我在我的模型中创建了一个度量,当我使用 Date Dimension 并为每个日期计算 YTD 时它完成了工作
CALCULATE (
[Sales Amt],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
但是当我尝试使用 DAX Studio 重现相同的结果时,只有当我过滤特定日期的 CALCULATETABLE 时我才能得到正确的结果
此代码完美运行:
EVALUATE
CALCULATETABLE(
ADDCOLUMNS (
VALUES ( 'Date'[Date] ),
"YTD", CALCULATE (
[Sales Amt],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
)
,
'Date'[Date] = DATE(2018,5,1)
)
对于行中的每个日期,此代码预计 return YTD,但不幸的是它没有。我做错了什么?:
EVALUATE
CALCULATETABLE(
ADDCOLUMNS (
VALUES ( 'Date'[Date] ),
"YTD", CALCULATE (
[Sales Amt],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
)
,
'Date'[Date] >= DATE(2018,5,1)
)
唯一的区别是 = 与 >=,但我得到所有行的空结果
您定义度量的方式没有问题。
但是,在测试度量值时,您应该尝试以类似于 Power BI 等客户端工具的方式编写 DAX 查询:
EVALUATE
SUMMARIZECOLUMNS(
'Date'[Date],
FILTER('Date', 'Date'[Date] >= DATE(2018,5,1)),
"YTD", CALCULATE (
[Sales Amt],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
)
甚至更好:
DEFINE MEASURE 'Sales'[Sales Amt YTD] = CALCULATE (
[Sales Amt],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
EVALUATE
SUMMARIZECOLUMNS(
'Date'[Date],
FILTER('Date', 'Date'[Date] >= DATE(2018,5,1)),
"YTD", [Sales Amt YTD]
)
您使用 CALCULATETABLE 编写它的方式的问题在于,您在 'Date'[Date] 列上创建了一个外部过滤器上下文,其中包含从 2018-05-01 开始的所有日期。在 FILTER 语句中评估 YTD 逻辑时,MAX('Date'[Year])
使用此过滤器上下文,因此 returns 整个 'Date' table 中最大的年份(例如 2025 ).
请记住,CALCULATE
函数仅在计算第一个参数时应用上下文转换(行上下文到过滤器上下文)。过滤器参数在原始过滤器上下文中计算。
如果你想坚持你的语法,你可以写一个额外的 CALCULATE
来强制上下文转换也适用于内部 CALCULATE
调用的第二个参数:
EVALUATE
CALCULATETABLE(
ADDCOLUMNS (
VALUES ( 'Date'[Date] ),
"YTD",
CALCULATE( // Additional CALCULATE to force context transition on filter arguments
CALCULATE (
[Sales Amt],
FILTER (
ALL ( 'Date' ),
'Date'[Year] = MAX ( 'Date'[Year] )
&& 'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
)
),
'Date'[Date] >= DATE(2018,5,1)
)
这与直接引用度量相同,因为引用度量总是进行隐式计算:
EVALUATE
CALCULATETABLE(
ADDCOLUMNS (
VALUES ( 'Date'[Date] ),
"YTD", [Sales Amt YTD]
),
'Date'[Date] >= DATE(2018,5,1)
)