You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Power BI中使用DAX实现等效于指定TSQL查询的INNER JOIN逻辑并筛选消费超100欧元的客户?

将TSQL的INNER JOIN逻辑转换为Power BI的DAX查询

嘿,我来帮你搞定这个转换,顺便理清Power BI里怎么处理表关联的逻辑~

首先要明确:在Power BI的DAX世界里,你几乎不需要手动写类似TSQL的INNER JOIN语句。只要你在数据模型中已经建立了Sales表和Customers表之间基于CustomerKey的关系(对接SQL Server数据源后,Power BI通常会自动识别这种外键关联,或者你也可以手动拖曳字段完成关联),DAX会自动利用这个关系来关联两张表的数据,效果和TSQL里的INNER JOIN完全一致。

下面给你两种常用的实现方式:

方式1:直接编写DAX查询生成结果表

如果你需要生成一张新的计算表(比如在数据视图中新建表,或者用DAX Studio执行),可以用这段DAX:

CustomersWithHighSales = 
FILTER (
    SUMMARIZE (
        Sales,  -- 以Sales表为基础,利用模型关系关联Customers表
        Customers[CustomerName],  -- 按客户名称分组
        "SumOfSales", SUM ( Sales[SalesAmount] )  -- 计算每个客户的总销售额
    ),
    [SumOfSales] > 100  -- 筛选出总额超过100的记录
)

这里的SUMMARIZE函数已经通过模型关系自动关联了SalesCustomers表,替代了TSQL里的INNER JOIN逻辑。

方式2:用度量值+可视化筛选(更符合Power BI工作流)

如果是做报表可视化,更推荐这种方式,步骤如下:

  1. 新建一个度量值:
    Total Sales = SUM(Sales[SalesAmount])
    
  2. 在报表画布中添加一个表格视觉对象:
    • 拖入Customers[CustomerName]到表格的“行”区域
    • 拖入刚创建的Total Sales度量值到表格的“值”区域
  3. 在筛选器面板中,找到Total Sales,设置筛选条件为大于100
    这样就能得到和TSQL查询完全一致的结果,而且更灵活,方便后续调整可视化样式。

特殊情况:如果模型没有建立关系怎么办?

如果因为某些原因,你没有在模型中建立SalesCustomers的关系,也可以用SUMX+RELATED手动实现关联逻辑:

CustomersWithHighSales = 
FILTER (
    ADDCOLUMNS (
        VALUES ( Customers[CustomerName] ),
        "SumOfSales", 
        SUMX (
            FILTER ( Sales, Sales[CustomerKey] = RELATED(Customers[CustomerKey]) ),
            Sales[SalesAmount]
        )
    ),
    [SumOfSales] > 100
)

不过还是建议优先建立模型关系,这样DAX的计算效率更高,代码也更简洁。

内容的提问来源于stack exchange,提问作者Martin James

火山引擎 最新活动