Power BI DAX:转置数据并填充1Months MaxQty空白值求助
问题描述
现有数据如下:
Product Date Age bucket Deliv_qty Max_qty_PerPeriod A 05/01/2024 3Months 100 200 B 05/02/2024 3Months 200 200 C 05/03/2024 3Months 150 200 A 08/04/2024 1Months 110 130 B 08/05/2024 1Months 130 130 A 02/10/2024 6Months 250 350 B 02/11/2024 6Months 350 350 C 01/01/2020 12Months 125 125
需将其转换为宽表格式,尝试以下DAX代码后,1-MonthMAX列始终显示空白:
JoinedT = ADDCOLUMNS ( CALCULATETABLE ( SUMMARIZE ( DailyMasterData, DailyMasterData[Symbol], DailyMasterData[Date], DailyMasterData[Age_bucket], DailyMasterData[DELIV_QTY] ) ), "1-MonthMAX", CALCULATE ( MAX ( DTable[Max_Qty_PerPeriod] ), ALLEXCEPT ( DTable, DTable[Symbol], DTable[Age_bucket] ), FILTER ( DTable, DTable[Age_bucket] = "1-month" ) ) )
问题分析与解决方案
核心问题
- 文本匹配错误:数据中年龄分段值为
1Months,但代码过滤条件写为"1-month",格式、大小写不匹配导致筛选无结果,返回空白。 - 表引用与上下文冲突:代码混用
DailyMasterData和DTable两个表名(若为同一表则无需区分),且ALLEXCEPT保留Age_bucket筛选上下文后,叠加Age_bucket = "1-month"的筛选会与当前行的Age_bucket(如3Months)冲突,无法获取有效数据。
修正后的DAX代码
假设DailyMasterData为包含所有数据的主表,修正代码如下:
JoinedT = ADDCOLUMNS ( SUMMARIZE ( DailyMasterData, DailyMasterData[Product], // 修正原代码中列名不匹配问题(原数据为Product,代码误写为Symbol) DailyMasterData[Date], DailyMasterData[Age bucket], DailyMasterData[Deliv_qty] ), "1-MonthMAX", CALCULATE ( MAX ( DailyMasterData[Max_qty_PerPeriod] ), // 清除无关筛选上下文,仅保留当前行的Product关联 ALL ( DailyMasterData[Date], DailyMasterData[Age bucket], DailyMasterData[Deliv_qty] ), DailyMasterData[Product] = EARLIER ( DailyMasterData[Product] ), DailyMasterData[Age bucket] = "1Months" // 匹配数据中的实际值 ) )
关键修正说明
- 统一列名:将代码中错误的
Symbol改为数据实际列名Product。 - 修正筛选值:把
"1-month"改为数据中存在的"1Months",确保能匹配到目标数据。 - 调整上下文逻辑:用
ALL清除日期、年龄分段、交付量的筛选,结合EARLIER锁定当前行的产品,确保仅提取同一产品下1Months分段的最大允许量。
预期输出示例
| Product | Date | Age bucket | Deliv_qty | 1-MonthMAX |
|---|---|---|---|---|
| A | 05/01/2024 | 3Months | 100 | 130 |
| B | 05/02/2024 | 3Months | 200 | 130 |
| C | 05/03/2024 | 3Months | 150 | (空白,C无1Months分段数据) |
| A | 08/04/2024 | 1Months | 110 | 130 |
内容的提问来源于stack exchange,提问作者Sailesh Nair
相关产品推荐
相关产品推荐

