两个不同表上的 PowerBI 切片器/过滤器

标签 powerbi powerquery

在 PowerBI 中,是否可以在两个不同的表上使用两个过滤器或切片器,以便我可以过滤其中一个表或两个表并在显示中连接数据?

 create table person(
    id int not null,
    name char(30) not null,
    grp char(1) not null)
 create table time(
    person_id int not null,
    state char(10) not null,
    date datetime not null,
    hours int not null)
go
  insert person values (1,'PersonA1','A')
  insert person values (2,'PersonA2','A')
  insert person values (3,'PersonA3','A')
  insert person values (4,'PersonB1','B')
  insert person values (5,'PersonB2','B')
  insert person values (6,'PersonB3','B')
  insert time values(1,'Work','2020-02-01',8)
  insert time values(2,'Work','2020-02-02',8)
  insert time values(1,'Vacation','2020-03-01',8)
  insert time values(1,'Sick','2020-03-02',8)
  insert time values(3,'Work','2020-03-04',8)
  insert time values(4,'Work','2020-02-01',8)
  insert time values(2,'Sick','2020-02-02',8)
  insert time values(1,'Vacation','2020-03-01',8)
  insert time values(2,'Sick','2020-03-02',8)
  insert time values(2,'Work','2020-03-04',8)
  insert time values(4,'Vacation','2020-02-01',8)
  insert time values(5,'Work','2020-02-02',8)
  insert time values(1,'Vacation','2020-03-01',8)
  insert time values(2,'Sick','2020-03-02',8)
  insert time values(3,'Work','2020-03-04',8)

在 PowerBI 中,我想显示以下版本的表格。在这里,我在时间表上使用 Pivoted Column 并使用托管关系将输出连接成表格格式:

没有过滤器

|   person_id |   id | name     | grp   |   Sick |   Vacation |   Work |
|-------------|------|----------|-------|--------|------------|--------|
|           0 |    1 | PersonA1 | A     |      0 |          0 |      0 |
|           1 |    2 | PersonA2 | A     |      8 |         24 |      8 |
|           2 |    3 | PersonA3 | A     |     24 |          0 |     16 |
|           3 |    4 | PersonB1 | B     |      0 |          0 |     16 |
|           4 |    5 | PersonB2 | B     |      0 |          8 |      8 |
|           5 |    6 | PersonB3 | B     |      0 |          0 |      8 |

date less than 2020-03-01 添加时间片或过滤器

|   person_id |   id | name     | grp   |   Sick |   Vacation |   Work |
|-------------|------|----------|-------|--------|------------|--------|
|           0 |    1 | PersonA1 | A     |      0 |          0 |      0 |
|           1 |    2 | PersonA2 | A     |      0 |          0 |      8 |
|           2 |    3 | PersonA3 | A     |      8 |          0 |      8 |
|           3 |    4 | PersonB1 | B     |      0 |          0 |      0 |
|           4 |    5 | PersonB2 | B     |      0 |          8 |      8 |
|           5 |    6 | PersonB3 | B     |      0 |          0 |      8 |

添加时间片或过滤器 date for greater than 2020-03-01

|   person_id |   id | name     | grp   |   Sick |   Vacation |   Work |
|-------------|------|----------|-------|--------|------------|--------|
|           0 |    1 | PersonA1 | A     |      0 |          0 |      0 |
|           1 |    2 | PersonA2 | A     |      8 |         24 |      0 |
|           2 |    3 | PersonA3 | A     |     16 |          0 |      8 |
|           3 |    4 | PersonB1 | B     |      0 |          0 |     16 |
|           4 |    5 | PersonB2 | B     |      0 |          0 |      0 |
|           5 |    6 | PersonB3 | B     |      0 |          0 |      0 |

与 grp 上的过滤器一起显示 A 和 B 的组合或仅显示 A 或 B。

使用两个过滤器,例如 Grp = A and date < 2020-03-01过滤器

|   person_id |   id | name     | grp   |   Sick |   Vacation |   Work |
|-------------|------|----------|-------|--------|------------|--------|
|           0 |    1 | PersonA1 | A     |      0 |          0 |      0 |
|           1 |    2 | PersonA2 | A     |      0 |          0 |      8 |
|           2 |    3 | PersonA3 | A     |      8 |          0 |      8 |

或者,Grp = B and date > 2020-03-1过滤器

|   person_id |   id | name     | grp   |   Sick |   Vacation |   Work |
|-------------|------|----------|-------|--------|------------|--------|
|           3 |    4 | PersonB1 | B     |      0 |          0 |     16 |
|           4 |    5 | PersonB2 | B     |      0 |          0 |      0 |
|           5 |    6 | PersonB3 | B     |      0 |          0 |      0 |

或者两个过滤器的任意组合?

最佳答案

它看起来是 Power BI 的基础知识。创建关系

Relationship

这会让一切如您所愿。

没有过滤器

Visual 1

按日期和组使用切片器

Visual 2

将空白显示为零

*根据 OP 的评论添加

在上面的示例中,矩阵可视化中缺少没有值的数据(例如第二个图中的“PersonA3”和“Vacation”)。

这是因为,默认的“Sum”汇总对于没有数据返回 BLANK,而“Matrix”视觉对象对于 BLANK 不显示任何内容。

如果您想要“零”而不是空白,则需要显式定义一个 DAX 度量,该度量在没有数据时返回零。

有很多方法可以做到这一点,但这里可能是最简单的方法。

1。为切片器创建单独的表。

将 States 维度分解为单独的维度表,然后与原始 Times 表建立关系。

Relationship 2

这是确保矩阵视觉显示所有状态所必需的,无论该状态是否存在于受过滤器/切片器影响的时间表中。

2。定义 DAX 度量。

如果没有数据落入当前过滤器上下文,则默认总和度量返回空白。您需要定义一个在没有数据时返回零的新度量。这可能是最简单的公式。

Total Hours = SUM ( Times[Hour] ) + 0

矩阵用零填充,“PersonA3”和“Vacation”回来了。

Result

关于两个不同表上的 PowerBI 切片器/过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62226311/

相关文章:

c# - PowerBI Embedded - 无法删除数据集

postgresql - 将 Power BI 服务连接到 Azure 上的 PostgreSQL 数据库

excel - 工厂每天只能处理 10 个订单。如何在 10 个订单后将日期提前?

如果当前月份值不可用,PowerBi 将卡值更改为上个月值

excel - Power Query 在每一列上应用函数

c# - Json文件请求产生“(413)请求实体太大”。

powerbi - 如何在Power BI中生成带有 Action 的GIF图像?

powerbi - Power Query 在左连接上创建重复项

Powerquery:展开其中有记录的所有列

powerpivot - 计算 Power Pivot 中两个日期之间的工作日数