DAX 在没有应用值过滤器的情况下计算每个子组的值
DAX calculate values for each subgroup without applied values filters
我有一个数据透视表 table,它有 2 个切片器来管理人口(Morning/Afternoon;访问类型),3 个子组,ID 和名称作为行,3 个计算的度量作为列:
1.基本计数公式:
=COUNTROWS(Visit)
2.长中位数公式:
=(MINX (FILTER (VALUES (Visit[Colum1]),
CALCULATE (COUNT (Visit[Colum1]), Visit[Colum1]
<= EARLIER (Visit[Colum1])) > COUNT ( Visit[Colum1]) / 2), Visit[Colum1]...
3。 Lookup/SUM公式:
=IF(CALCULATE(SUM(PE_new[DenominatorNBR2]), RELATEDTABLE(Visit)) < 30, BLANK(),
CALCULATE(SUM(PE_new[NumeratorNBR2]), RELATEDTABLE(Visit)) /
CALCULATE(SUM(PE_new[DenominatorNBR2]), RELATEDTABLE(Visit)))
我试图找到解决方案的问题是在列 C(度量 1(总和))中仅显示值等于或大于 10 的行。
我可以对 ID 或名称列使用 "values filters" 来做到这一点,但在这种情况下,小计也会发生变化(减少记录数),但我需要显示每个组的小计作为一个整体,而不仅仅是那些计算具有超过 10 个值的行。
有没有办法 write/change 小计的 DAX 公式计算整个组的值,而不考虑 "values filters"?
或者也许还有其他选项可以仅显示值等于或大于 10 的行,但在小计中计算整个组的值?
如有任何帮助,我们将不胜感激!
这是原创table:
这就是我现在得到的(小计基于 current/filtered 数据透视表记录:C 列(度量 1(总和))中等于或大于 10 的值:
寻找这个结果(小计显示每个组作为一个整体):
带有 "values filters" 过滤器的屏幕截图:
您可以使用 HASONEVALUE
或 ISFILTERED
之类的函数,根据是否为小计,将度量设置为不同的计算方式。因此,如果您使用 "values filters" 来限制您看到的行,您仍然可以通过使用适当的过滤器上下文来获得包括所有行的小计。
例如,对于基本计数,您可以这样写
CountMeasure =
IF(HASONEVALUE(Visit[ID]),
COUNT(Visit[Column1]),
CALCULATE(COUNT(Visit[Column1]), ALLEXCEPT(Visit, Visit[Group]))
)
ALLEXCEPT
函数删除除您指定的列之外的所有筛选上下文。同样的模式也适用于其他措施:
SubtotalMeasure =
IF(HASONEVALUE(Visit[ID]),
[Measure],
CALCULATE([Measure], ALLEXCEPT(Visit, Visit[Group]))
)
编辑: 根据您的评论,从值过滤中获取单独的切片器选择有点棘手,因为 DAX 度量对它们的处理方式相似。但是,如果它们 slicing/filtering 在不同的列上,那么应该是可以的。
例如,如果您在 ID
上有一个切片器,那么您可以将该列作为另一个参数传递给您的 ALLEXCEPT
函数:ALLEXCEPT(Visit, Visit[Group], Visit[ID])
。这将阻止它删除 ID
.
上的切片器过滤
在保留切片器选择的同时删除过滤器上下文的标准方法是使用 ALLSELECTED
。但是,这也会保留值过滤。
您可以使用这些类型的组合来获得您想要的特定过滤器上下文。例如,
SubtotalMeasure =
VAR CurrentGroup = MAX(Visit[Group])
RETURN
IF(HASONEVALUE(Visit[ID]),
[Measure],
CALCULATE([Measure],
ALLSELECTED(Visit),
ALL(Visit[Name]),
Visit[Group] = CurrentGroup
)
)
The 将以 AND
的方式组合所有这些参数。 ALLSELECTED(Visit)
将保留所有切片器和值过滤(但不包括枢轴 table 上下文),ALL(Visit[Name])
将删除 Name
列上的值过滤(但也包括任何该列上的切片器选择),并且 Visit[Group]
会将 Group
列的筛选器上下文设置为仅为当前 table 中当前行的 Group
值,即由上面的变量定义。
我不能保证这个特定的组合适用于你的特定设置,因为我不知道你有什么所有的列和切片器等等,但它应该让你知道你需要什么样的东西可以试试
我有一个数据透视表 table,它有 2 个切片器来管理人口(Morning/Afternoon;访问类型),3 个子组,ID 和名称作为行,3 个计算的度量作为列:
1.基本计数公式:
=COUNTROWS(Visit)
2.长中位数公式:
=(MINX (FILTER (VALUES (Visit[Colum1]),
CALCULATE (COUNT (Visit[Colum1]), Visit[Colum1]
<= EARLIER (Visit[Colum1])) > COUNT ( Visit[Colum1]) / 2), Visit[Colum1]...
3。 Lookup/SUM公式:
=IF(CALCULATE(SUM(PE_new[DenominatorNBR2]), RELATEDTABLE(Visit)) < 30, BLANK(),
CALCULATE(SUM(PE_new[NumeratorNBR2]), RELATEDTABLE(Visit)) /
CALCULATE(SUM(PE_new[DenominatorNBR2]), RELATEDTABLE(Visit)))
我试图找到解决方案的问题是在列 C(度量 1(总和))中仅显示值等于或大于 10 的行。 我可以对 ID 或名称列使用 "values filters" 来做到这一点,但在这种情况下,小计也会发生变化(减少记录数),但我需要显示每个组的小计作为一个整体,而不仅仅是那些计算具有超过 10 个值的行。
有没有办法 write/change 小计的 DAX 公式计算整个组的值,而不考虑 "values filters"? 或者也许还有其他选项可以仅显示值等于或大于 10 的行,但在小计中计算整个组的值?
如有任何帮助,我们将不胜感激!
这是原创table:
这就是我现在得到的(小计基于 current/filtered 数据透视表记录:C 列(度量 1(总和))中等于或大于 10 的值:
寻找这个结果(小计显示每个组作为一个整体):
带有 "values filters" 过滤器的屏幕截图:
您可以使用 HASONEVALUE
或 ISFILTERED
之类的函数,根据是否为小计,将度量设置为不同的计算方式。因此,如果您使用 "values filters" 来限制您看到的行,您仍然可以通过使用适当的过滤器上下文来获得包括所有行的小计。
例如,对于基本计数,您可以这样写
CountMeasure =
IF(HASONEVALUE(Visit[ID]),
COUNT(Visit[Column1]),
CALCULATE(COUNT(Visit[Column1]), ALLEXCEPT(Visit, Visit[Group]))
)
ALLEXCEPT
函数删除除您指定的列之外的所有筛选上下文。同样的模式也适用于其他措施:
SubtotalMeasure =
IF(HASONEVALUE(Visit[ID]),
[Measure],
CALCULATE([Measure], ALLEXCEPT(Visit, Visit[Group]))
)
编辑: 根据您的评论,从值过滤中获取单独的切片器选择有点棘手,因为 DAX 度量对它们的处理方式相似。但是,如果它们 slicing/filtering 在不同的列上,那么应该是可以的。
例如,如果您在 ID
上有一个切片器,那么您可以将该列作为另一个参数传递给您的 ALLEXCEPT
函数:ALLEXCEPT(Visit, Visit[Group], Visit[ID])
。这将阻止它删除 ID
.
在保留切片器选择的同时删除过滤器上下文的标准方法是使用 ALLSELECTED
。但是,这也会保留值过滤。
您可以使用这些类型的组合来获得您想要的特定过滤器上下文。例如,
SubtotalMeasure =
VAR CurrentGroup = MAX(Visit[Group])
RETURN
IF(HASONEVALUE(Visit[ID]),
[Measure],
CALCULATE([Measure],
ALLSELECTED(Visit),
ALL(Visit[Name]),
Visit[Group] = CurrentGroup
)
)
The 将以 AND
的方式组合所有这些参数。 ALLSELECTED(Visit)
将保留所有切片器和值过滤(但不包括枢轴 table 上下文),ALL(Visit[Name])
将删除 Name
列上的值过滤(但也包括任何该列上的切片器选择),并且 Visit[Group]
会将 Group
列的筛选器上下文设置为仅为当前 table 中当前行的 Group
值,即由上面的变量定义。
我不能保证这个特定的组合适用于你的特定设置,因为我不知道你有什么所有的列和切片器等等,但它应该让你知道你需要什么样的东西可以试试