如何在表格模型中使用 DAX 制作小计和总计空白?
how to make sub total and grand total blank using DAX in tabular model?
12 Month Qty:=CALCULATE (
[Qty],
DATESINPERIOD (
Calendar[Date] ,
MAX(Calendar[Date]),
-12, Month
)
)
目前我有我的测量公式。
但是,我想让所有小计和毕业生总计为空白。因此我需要正确设置 ISFILTERED 函数。我用 if(ISFILTERED()) 包装了公式,但效果不佳。那么我怎样才能正确实现 ISFILTERED 功能呢?或者如果我必须使用不同的公式,我应该为这种情况使用什么公式?
根据您对原问题的评论:
ISFILTERED() 必须将列作为其参数,而不是度量。 ISFILTERED() 将告诉您是否已将过滤器(通过数据透视 table 行、列、过滤器或切片器)应用于模型中的特定列。因此,您可以使用它来抑制在层次结构的某些级别对度量的评估。
假设您有一个度量,当处于类别>子类别>项目的层次结构的子类别级别时,您希望将其显示为空白:
IF(
ISFILTERED(<table>[SubCategory])
,BLANK()
,[Measure]
)
这将 return 在 [SubCategory] 列应用了过滤器的任何地方留空。
编辑评论:
您要留空的层次结构的哪个级别是要在 ISFILTERED() 中引用的列。
我通常将此模式与日期层次结构一起使用以显示不同级别的聚合,并且我倾向于将 HASONEVALUE() 作为我的测试。我将在 SWITCH() 函数中应用一系列这些测试。 SWITCH() 只是嵌套 IF() 的语法糖 - 如果您需要参考,可以查找它。
因此:
MyConditionalMeasure:=
SWITCH( TRUE()
,HASONEVALUE(DimDate[Date]
// This means we're at the date level of the hierarchy
,[BaseMeasure] // The measure to evaluate at that first level
,HASONEVALUE(DimDate[Month])
// This is true for a month or a date only, but we've
// already captured the date possibility above
,[Month-appropriate Aggregation of BaseMeasure]
,HASONEVALUE(DimDate[Year])
// Again, true for a single date or a single month, but
// we've already covered those, so the year level is all
// that's left
,[Year-appropriate Aggregation of BaseMeasure]
,BLANK() // The last argument is taken as a final ELSE
// condition, capturing anything we didn't cover above,
// which would include the grand total - this will blank the
// grand total, or e.g. DimDate[Decade] since that is a
// coarser granularity than we covered with our tests above
12 Month Qty:=CALCULATE (
[Qty],
DATESINPERIOD (
Calendar[Date] ,
MAX(Calendar[Date]),
-12, Month
)
)
目前我有我的测量公式。 但是,我想让所有小计和毕业生总计为空白。因此我需要正确设置 ISFILTERED 函数。我用 if(ISFILTERED()) 包装了公式,但效果不佳。那么我怎样才能正确实现 ISFILTERED 功能呢?或者如果我必须使用不同的公式,我应该为这种情况使用什么公式?
根据您对原问题的评论:
ISFILTERED() 必须将列作为其参数,而不是度量。 ISFILTERED() 将告诉您是否已将过滤器(通过数据透视 table 行、列、过滤器或切片器)应用于模型中的特定列。因此,您可以使用它来抑制在层次结构的某些级别对度量的评估。
假设您有一个度量,当处于类别>子类别>项目的层次结构的子类别级别时,您希望将其显示为空白:
IF(
ISFILTERED(<table>[SubCategory])
,BLANK()
,[Measure]
)
这将 return 在 [SubCategory] 列应用了过滤器的任何地方留空。
编辑评论:
您要留空的层次结构的哪个级别是要在 ISFILTERED() 中引用的列。
我通常将此模式与日期层次结构一起使用以显示不同级别的聚合,并且我倾向于将 HASONEVALUE() 作为我的测试。我将在 SWITCH() 函数中应用一系列这些测试。 SWITCH() 只是嵌套 IF() 的语法糖 - 如果您需要参考,可以查找它。
因此:
MyConditionalMeasure:=
SWITCH( TRUE()
,HASONEVALUE(DimDate[Date]
// This means we're at the date level of the hierarchy
,[BaseMeasure] // The measure to evaluate at that first level
,HASONEVALUE(DimDate[Month])
// This is true for a month or a date only, but we've
// already captured the date possibility above
,[Month-appropriate Aggregation of BaseMeasure]
,HASONEVALUE(DimDate[Year])
// Again, true for a single date or a single month, but
// we've already covered those, so the year level is all
// that's left
,[Year-appropriate Aggregation of BaseMeasure]
,BLANK() // The last argument is taken as a final ELSE
// condition, capturing anything we didn't cover above,
// which would include the grand total - this will blank the
// grand total, or e.g. DimDate[Decade] since that is a
// coarser granularity than we covered with our tests above