【问题标题】:Power Bi : Filter a SQL Server table which contains a stringPower Bi:过滤包含字符串的 SQL Server 表
【发布时间】:2021-04-13 13:01:13
【问题描述】:

我在 SQL Server 中有 2 个表:

包含国家名称的表Country:

Table Society 其中的社团名称以及该社团工作所在国家的名称:

在 Power Bi 中,我必须创建一个过滤器国家(美国、德国、法国、英国……)来过滤表社会:

例如,如果我在过滤器国家/地区中输入“美国”,则在我的矩阵中,我将拥有社会 A 和社会 B。 如果我在过滤器国家中输入“法国”,我将拥有社会 B 和社会 C。

(我的第一个想法是在 SQL Server 中添加一些二进制字段“IsInThisCountry”,然后将这些字段用作过滤器) 像这样的东西: CASE WHEN country LIKE '%US%' THEN 1 ELSE 0 END 'IsUS'

但问题是如果我有 50 个国家/地区,我将不得不创建 50 个过滤器

【问题讨论】:

  • 修正你的设计,不要在数据库中存储分隔数据。
  • 我第二个@Larnu,像这样的单元格中的分隔数据是一种已知的SQL反模式,应该避免,当你有匹配条件时会发生什么?搜索“%US%”,美国和俄罗斯都匹配!
  • 我同意你的观点,但我不能复制他们的行,因为他们已经使用这些表格创建了一些报告(和度量)。

标签: sql-server tsql filter powerbi dax


【解决方案1】:

如果您有兼容 130 或更高版本(带有 string_split)的 SQL Server,您可以在您的数据模型中尝试这样的方法来拆分您的社团表中的分隔国家:

;with countries as (
select 'germany' as country
union all
select 'sweden'
),
socities as (
select 'A' as society, 'germany-sweden' as countries
union all
select 'B', 'sweden'
),
societyByCountry as (
select c.society, value as Country  from socities c
cross apply string_split(c.countries, '-') s
)

select c.country, s.society from countries c
inner join societyByCountry s on s.Country = c.country

【讨论】:

  • 感谢您的提示。不幸的是,我无法复制我的行。 (已经创建了一些度量)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
  • 2020-06-14
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多