powerbi - 在 DAX 中过滤笛卡尔积的计算列
问题描述
我的数据模型比我在这里展示的要复杂一些。在我的真实场景表中,预算不存在,目标值必须从其他不同粒度的表中计算出来。假设我们不能在预算表上使用计算列。
这里的绿色表格是一列全值维度的桥梁。红色表格是具有计算目标的产品和品牌的笛卡尔积。
这是我为解决问题而制作的红色表格的 DAX 代码。
#Brand x Region =
ADDCOLUMNS (
CROSSJOIN ( '#product', '#region' ),
"Target", CALCULATE ( SUM ( Budget[target] ) ),
"IsTarget", IF ( CALCULATE ( SUM ( Budget[target] ) ) > 0, "Yes", "No" )
)
但是这种巧妙获得的列 IsTarget 并不会影响我通过切片器的视觉效果。如何修复它。
在此处归档PBIX。
解决方案
这就是我的建议,底部关系位于Index
列上。
为了做到这一点,我的#Brand x Region
桌子是这样的:
#Brand x Region =
VAR CrossProduct =
ADDCOLUMNS (
CROSSJOIN ( '#product', '#region' ),
"Target",
CALCULATE (
SUM ( Budget[target] ),
FILTER (
Budget,
Budget[product] = EARLIER ( '#product'[product] ) &&
Budget[region] = EARLIER ( '#region'[region] )
)
)
)
RETURN
ADDCOLUMNS(
CrossProduct,
"IsTarget", IF ( [Target] > 0, "Yes", "No" ),
"Index", RANKX(CrossProduct, '#product'[product] & '#region'[region])
)
(注意:过滤必须是明确的,因为我没有使用您最初拥有的关系。)
从那里我将索引拉到FactTableSales
andBudget
并进行查找:
Index =
LOOKUPVALUE (
'#Brand x Region'[Index],
'#Brand x Region'[product], [product],
'#Brand x Region'[region], [region]
)
请注意,在查询编辑器中创建索引列通常比尝试在 DAX 中更容易,但您无法在查询编辑器中修改计算表。
推荐阅读
- nrf52 - OpenThread API:未定义对 otThreadGetMaxAllowedChildren() 的引用
- javascript - Javascript - 从对象数组中读取值的复选框
- sql-server - 我无法从 sql server 2014 连接到我的数据库或主机
- html - 有没有办法让 3 个表单元素排成一行?
- javascript - 带有分页的下一个和上一个按钮功能
- python - 如何在当前选项卡的文本小部件中插入文本?
- jquery - 无法重新加载数据表
- variables - 如何从 terraform variable.tf 文件中的另一个变量创建一个变量?
- python - 如何在django中获取登录用户的数据
- angular - 将角度组件添加到非角度第三方组件