dax - 如何创建单个度量,以 3 种不同的方式对相同的数据进行切片并将其合并?
问题描述
我已经尝试了一天半来弄清楚如何以两种不同的方式将相同的度量组合到同一个度量中。它被分成几部分,我尝试将它们联合起来,用 IF 语句计算,我什至认为我可以联合 3 个汇总表来获得正确的输出。我坚持使用 Excel 365 ProPlus(我相信这是 2016 年,因为内置了 Get and Transform 和 PowerPivot)。
目标:我需要这样做,以便我可以欺骗连接到数据模型的 PowerPivot 表来显示 a) 运行总计 b) 总行和 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 模式和术语来修复它。
解决方案
一种方法是设置一个未连接到模型的表,然后使用它来确定您返回的值。以下示例用于计量单位 (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]
)
推荐阅读
- c - 有人可以解释一下这个while循环是什么意思吗?
- javascript - 如何从特定来源渲染文章并防止意外请求过多?
- java - 是否有可能在运行时向 GraphQL 的响应中添加额外的模式字段?
- spring-boot - 无法从 spring-boot-starter-data-neo4j 连接到云托管的 neo4j 服务器
- python - 使用 Pycharm 连续重复的代码行
- reactjs - React Hooks / 不必要的组件渲染
- r - 如何针对第一列绘制数据框的 2 到 N 列?
- google-apps-script - 表格 IF 功能设置和/或格式错误
- django - Django管理面板中特定字段的权限
- php - Laravel,旋转图像期望参数是有效路径