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" 过滤器的屏幕截图:

您可以使用 HASONEVALUEISFILTERED 之类的函数,根据是否为小计,将度量设置为不同的计算方式。因此,如果您使用 "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 值,即由上面的变量定义。

我不能保证这个特定的组合适用于你的特定设置,因为我不知道你有什么所有的列和切片器等等,但它应该让你知道你需要什么样的东西可以试试