我已经尝试了一天半的时间来弄清楚如何以两种不同的方式以相同的方式组合相同的方式。它被分解成几部分,我尝试将它们联合起来,使用IF语句进行计算,我什至以为我可以UNION 3摘要表来获得正确的输出。我一直使用Excel 365 ProPlus(由于内置了Get and Transform和PowerPivot,我相信应该是2016年)。
目标:我需要执行此操作,以便可以欺骗连接到数据模型的PowerPivot表显示a)a的运行总计b)c的总行c)平坦的非运行目标/目标行以相同的方式。我已经可以做a和b了,但是c难以捉摸。
我尝试分阶段计算数据,此处的前两个步骤是,无论我如何尝试,我似乎都无法同时使用两个过滤器:
Occbase:=CALCULATE([Occurrences],
FILTER('Final Dataset',
'Final Dataset'[MainFilter] = ""))
CumOcc:=CALCULATE([Occbase],
FILTER(ALL(DimDate[DateValue]),
DimDate[DateValue] <= MAX(DimDate[DateValue])))
这两个度量将执行第1部分:过滤数据集,然后从该过滤器计算出简单的运行总计。我已经尝试过一步,但是如果过滤器正常运行,则运行总计将无法工作:
CombinedMakesRunningTotolStopWorking:=CALCULATE(SUM('Final Dataset'[xOccurrences]), FILTER(
ALL(Dimdate[DateValue]),
DimDate[DateValue] <= MAX(DimDate[DateValue]))
,FILTER(
'Final Dataset',
'Final Dataset'[MainFilter] = ""
|| 'Final Dataset'[Region] = "Ttl Occ MPR" //I couldn't figure out how to calculate on the fly
) //so I generated this total in PowerQuery
)
我内部的SQL开发人员决定尝试分别拉出上述所有三个内容,然后使用UNION和SUMMARIZE作为日期值和区域值,但结果却更糟...
TryHarder:=SUMX(UNION(
SUMMARIZE(FILTER('Final Dataset',
'Final Dataset'[Region] = "Ttl Occ MPR"),
[Region],
[DateValue],
"OccurrencesXXX", CALCULATE([Occbase],
FILTER(ALL(DimDate[DateValue]),
DimDate[DateValue] <= MAX(DimDate[DateValue]))))
,
SUMMARIZE(FILTER(ALL('Final Dataset'),
'Final Dataset'[Region] = "PR Occ Goal"),
[Region],
[DateValue],
"OccurrencesXXX", [Occurrences])
,
SUMMARIZE(FILTER('Final Dataset',
'Final Dataset'[MainFilter] = ""),
[Region],
[DateValue],
"OccurrencesXXX", CALCULATE([Occbase],
FILTER(ALL(DimDate[DateValue]),
DimDate[DateValue] <= MAX(DimDate[DateValue]))))
), [OccurrencesXXX])
具有以下可笑的失败结果:
我可以放弃,只为PowerQuery中的每个图表生成一个表格...但是必须生成大量表格。我必须假设我在范围/上下文方面做错了,我有一种C#/ SQL思维方式使我在学习DAX方面处于极大的劣势。我想了解自己在做错什么,并学习DAX模式和修复它的术语。
答案 0 :(得分:0)
执行此操作的一种方法是设置未连接到模型的表,然后使用该表确定您返回的值。以下示例是度量单位(UOM)。想法是返回的度量取决于度量单位字段,因此将其添加到数据透视图的图例部分将返回单位,案例和ESU量。这也意味着您可以使用切片器来切换图表中返回的字段。
Volume:=IF( HASONEVALUE( 'Unit of Measure'[UOM] ),
SWITCH(TRUE(),
VALUES('Unit of Measure'[Order]) = 1, [Unit Volume],
VALUES('Unit of Measure'[Order]) = 2, [Case Volume],
VALUES('Unit of Measure'[Order]) = 3, [ESU Volume]
),
[ESU Volume]
)