【问题标题】:Power BI - Count unique occurrence of an entire row ("Count(*)" equivalent in SQL)Power BI - 计算整行的唯一出现次数(SQL 中的“Count(*)”等效项)
【发布时间】:2021-11-17 19:24:58
【问题描述】:

我正在尝试在 Power BI 的表中添加一列,其中包含每个唯一行的总计数。我希望有一个公式可以检索满足我表中每一行的每一列值标准的每一行的总计数。

如果有意义的话,基本上我想在 SELECT 语句中执行相当于 Count(*) 的 SQL。

我有:

field_1 field_2 field_3  
client 1    US  Y    
client 1    US  Y    
client 2    CA  Y    
client 3    FR  N    
client 3    FR  N    
client 3    FR  N    

我想要:

field_1 field_2 field_3 Counts 
client 1    US  Y       2
client 1    US  Y       2
client 2    CA  Y       1
client 3    FR  N       3
client 3    FR  N       3
client 3    FR  N       3

【问题讨论】:

  • 您能否通过提供示例数据和预期输出来改进您的问题?
  • 抱歉,刚刚添加

标签: sql powerbi dax


【解决方案1】:

您可以在 DAX 中使用这样的度量

_uniqueRowCount = 
MAXX (
    ADDCOLUMNS (
        tbl2,
        "uniqueRowCount",
            COUNTX (
                FILTER (
                    tbl2,
                    tbl2[field_1] = EARLIER ( tbl2[field_1] )
                        && tbl2[field_2] = EARLIER ( tbl2[field_2] )
                        && tbl2[field_3] = EARLIER ( tbl2[field_3] )
                ),
                tbl2[field_1]
            )
    ),
    [uniqueRowCount]
)

如果您正在寻找专栏

Column = 
COUNTX (
    FILTER (
        tbl2,
        tbl2[field_1] = EARLIER ( tbl2[field_1] )
            && tbl2[field_2] = EARLIER ( tbl2[field_2] )
            && tbl2[field_3] = EARLIER ( tbl2[field_3] )
    ),
    tbl2[field_1]
)

【讨论】:

  • 如果我有 n 个字段并且我想对所有字段进行计数,该怎么办
  • 据我所知,无法在 DAX 中引用任意数量的列。必须明确引用每一列。也许首先在 Power Query 中添加一个连接所需列的列,之后所需的 DAX 公式应该很简单。
  • 如果要在SQL中达到同样的结果;等效的 SQL 是 select field_1,field_2, field_3 ,COUNT(field_1) over (partition by field_1,field_2,field_3) as count from @t1。执行COUNT(*) 不会帮助您在 SQL 中获得所需的结果。因此,在 SQL 中,您需要明确提及 over (partition by -----) 中的字段。对于 n 个字段,除非您明确提及,否则 SQL 无法返回计数。 DAX 也不例外。
  • 试试这个 SQL declare @t1 as table (field_1 varchar(max), field_2 varchar(max),field_3 varchar(max),ID int) insert into @t1 select * from (values('client 1','US','Y',1),('client 1','US','Y',2),('client 1','US','N',3), ('client 2','CA','Y',4),('client 3','FR','N',5),('client 3','FR','N',6),('client 3','FR','N',7)) t (a,b,c,d) select field_1,field_2, field_3,ID ,COUNT(field_1) over (partition by field_1,field_2,field_3) as count from @t1 order by ID
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 2019-08-19
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
相关资源
最近更新 更多