PowerBI技术需求:按注册日期筛选并展示含无日期表的供应商全量数据
解决PowerBI表格可视化需求的步骤
1. 创建符合条件的供应商列表(DAX计算表)
先提取用户所选注册日期范围内的供应商ID,生成动态筛选的供应商列表:
Qualified_Providers = CALCULATETABLE( VALUES(Provider_info[ProviderID]), Sign_up_dates[SignUpDate] IN ALLSELECTED(Calendar[Date]) )
2. 创建日期与供应商的交叉表(DAX计算表)
将所选日期范围的每个日期,与符合条件的供应商做笛卡尔积,确保每个日期都对应所有目标供应商:
Date_Provider_Cross = GENERATE( ALLSELECTED(Calendar[Date]), Qualified_Providers )
3. 配置数据模型关系
在数据视图中,给新建的交叉表配置关联:
- 将
Date_Provider_Cross[ProviderID]与Provider_info[ProviderID]建立双向筛选关系 - 将
Date_Provider_Cross[Date]与Calendar[Date]建立单向筛选关系
4. 编写度量值获取业务数据
针对无日期字段的Sales、Discount、Offer表,用度量值处理无数据时的显示逻辑:
Sales度量值
Sales_Value = VAR CurrentProvider = SELECTEDVALUE(Date_Provider_Cross[ProviderID]) RETURN IF( ISBLANK(CurrentProvider), BLANK(), CALCULATE( SUM(Sales[Amount]), Sales[ProviderID] = CurrentProvider ) )
Discount度量值
Discount_Value = VAR CurrentProvider = SELECTEDVALUE(Date_Provider_Cross[ProviderID]) RETURN IF( ISBLANK(CurrentProvider), BLANK(), CALCULATE( SUM(Discount[Value]), Discount[ProviderID] = CurrentProvider ) )
Offer度量值
Offer_Status = VAR CurrentProvider = SELECTEDVALUE(Date_Provider_Cross[ProviderID]) RETURN IF( ISBLANK(CurrentProvider), BLANK(), LOOKUPVALUE( Offer[Status], Offer[ProviderID], CurrentProvider ) )
如果需要无数据时显示自定义文本(如"无数据"),可将BLANK()替换为对应文本
5. 配置表格可视化组件
在表格中添加以下字段:
Date_Provider_Cross[Date](日期列)Provider_info[ProviderName](供应商名称,从Provider_info表选取)- 上述三个自定义度量值:
Sales_Value、Discount_Value、Offer_Status
配置完成后,选择注册日期范围时,表格会自动展示该时段内每日的所有合格供应商,无业务数据的供应商对应列会显示空值(或自定义文本),且每个日期都会重复显示供应商信息。
可选优化:限定上周数据
如果Sales/Discount/Offer表存储的是固定上周数据,可在度量值中加入时间判断(假设表中隐含日期字段):
Sales_Value_LastWeek = VAR CurrentProvider = SELECTEDVALUE(Date_Provider_Cross[ProviderID]) VAR LastWeekStart = TODAY() - WEEKDAY(TODAY(), 2) - 6 VAR LastWeekEnd = TODAY() - WEEKDAY(TODAY(), 2) RETURN IF( ISBLANK(CurrentProvider), BLANK(), CALCULATE( SUM(Sales[Amount]), Sales[ProviderID] = CurrentProvider, Sales[Date] >= LastWeekStart && Sales[Date] <= LastWeekEnd ) )
内容的提问来源于stack exchange,提问作者Nikol
相关产品推荐
相关产品推荐

