我的数据模型比这里显示的要复杂一些。在我的实际方案表中,预算不存在,目标值必须从粒度不同的其他表中计算得出。假设我们不能使用预算表上的计算列。
此处的绿色表格是一列所有值的维桥。红色表格是产品和品牌的笛卡尔乘积,具有计算得出的目标。
这是我煮过的红色餐桌的DAX代码,可以解决此问题。
#Brand x Region =
ADDCOLUMNS (
CROSSJOIN ( '#product', '#region' ),
"Target", CALCULATE ( SUM ( Budget[target] ) ),
"IsTarget", IF ( CALCULATE ( SUM ( Budget[target] ) ) > 0, "Yes", "No" )
)
但是,如此巧妙地获得的列IsTarget不会通过切片器影响我的视觉效果。如何解决。
文件PBIX在这里。
答案 0 :(得分:1)
这就是我的建议,最下面的关系在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
和Budget
:
Index =
LOOKUPVALUE (
'#Brand x Region'[Index],
'#Brand x Region'[product], [product],
'#Brand x Region'[region], [region]
)
请注意,在索引编辑器中创建索引列通常比在DAX中尝试创建索引列更容易,但是您无法在查询编辑器中修改计算表。