PowerBI中创建不受行筛选影响的总计度量值求助
需求:创建不受行级筛选影响的PowerBI度量值
需要实现一个PowerBI度量值,要求在可视化表格中,该度量值计算的每种产品销售总量不受每行的客户、发票等筛选条件影响。举个实际场景:某公司向两位客户销售桌子和椅子,需要在表格中展示每种产品的总销量(如8把椅子、3张桌子),无论表格中是否按客户或发票拆分显示,产品总量始终保持正确。注:可视化用到的列来自多个关联表。
当前使用的DAX代码
CountOfPurchasetimes3 = VAR TblSummary = ADDCOLUMNS( SUMMARIZE( fact_sale_invoice_line, fact_sale_invoice_line[product_id], fact_sale_invoice_line[customer_id] ), "TotalPurchase", CALCULATE( COUNT(fact_sale_invoice_line[product_id]), ALLEXCEPT(fact_sale_invoice_line,fact_sale_invoice_line[product_id],fact_sale_invoice_line[customer_id]) ) ) VAR count_times = IF( CALCULATE( SUM('fact_sale_invoice_line'[product_quantity])>0, AND( fact_sale_invoice_line[invoice_date_id]>=20220101, fact_sale_invoice_line[invoice_date_id]<=20220131 ) ), CALCULATE( SUMX(TblSummary,[TotalPurchase]), AND( fact_sale_invoice_line[invoice_date_id]>=20220101, fact_sale_invoice_line[invoice_date_id]<=20220131 ) ), BLANK() ) RETURN count_times
优化后的度量值方案
要实现“不受客户、发票筛选影响,仅保留产品维度计算总量”的需求,核心是精准移除不需要的筛选上下文,同时保留产品维度的筛选。以下是更简洁高效的实现:
产品总销量 = CALCULATE( SUM(fact_sale_invoice_line[product_quantity]), -- 仅保留产品ID和日期筛选,移除客户、发票等其他筛选器 ALLEXCEPT( fact_sale_invoice_line, fact_sale_invoice_line[product_id], fact_sale_invoice_line[invoice_date_id] ), -- 限定统计2022年1月的销售数据 fact_sale_invoice_line[invoice_date_id] >= 20220101, fact_sale_invoice_line[invoice_date_id] <= 20220131 )
关键说明
ALLEXCEPT函数精准保留了产品ID和日期的筛选逻辑,自动移除客户、发票等其他无关筛选器,确保每个产品的总量是指定日期范围内的全局销量。- 直接使用
SUM计算销量,相比原代码的SUMMARIZE+SUMX组合,避免了不必要的中间表生成,计算效率更高。 - 若不需要保留日期筛选,可从
ALLEXCEPT参数中移除invoice_date_id,或改用ALL(fact_sale_invoice_line[customer_id], fact_sale_invoice_line[invoice_id])来精准移除指定筛选项。
内容的提问来源于stack exchange,提问作者CLT
相关产品推荐
相关产品推荐

