SSRS CountDistinct 函数

SSRS CountDistinct 函数是一个聚合函数,用于计算给定字段中不同或唯一的项目(记录)的数量并返回该数字。本文将通过一个示例,解释如何使用 CountDistinct 函数查找特定组或完整表中的唯一不同项目。

SSRS CountDistinct 函数在默认范围内查找不同项目数量的语法如下所示。

CountDistinct(Fields!SalesAmount.Value)
CountDistinct(Fields!EmployeeName.Value)

要为每个组、表或数据集查找不同计数的值,请将名称替换为组、Tablix 或数据集名称。

CountDistinct(Fields!EmployeeName.Value, "Name")
CountDistinct(Fields!EmployeeName.Value, "Name", Recursive)

为了演示 SSRS CountDistinct 函数,我们使用下面的员工表,该表有 15 条按职业分组的记录。图像显示了表格报告中的记录。

Aggregate Source

SSRS CountDistinct 函数示例

右键单击详细信息行中的任意字段,选择插入行,然后选择“组外 - 下方”选项以添加新行。接下来,合并前两列并将“组内不同计数”作为文本。为了理解报告,我建议您参考 SSRS 中的图表表格分组格式表格文章。

有多种方法可以编写 SSRS CountDistinct 函数。第一种方法是单击单元格并选择 YearlyIncome 字段。由于它是默认的聚合函数,它将 Sum 函数分配给它。因此,选择文本(Sum(YearlyIncome)),选择“按摘要”,然后单击 CountDistinct 函数。它在内部编写了以下表达式

=CountDistinct(Fields!YearlyIncome.Value)
Change the Summarized by option for distinct count

第二种方法是右键单击文本框并选择“表达式”选项。它会打开以下表达式窗口,用于编写更复杂的 SSRS CountDistinct 函数以及范围。下面的代码返回总销售项目(行)的不同计数。

=CountDistinct(Fields!Sales.Value)
SSRS CountDistinct Function to count distinct sales

类似地,让我添加下面的表达式来唯一地计算字符串列。

=CountDistinct(Fields!Education.Value)

请单击预览选项卡以获取员工教育、年收入和销售的不同计数。如果您观察报告,默认情况下,它会在每个职业组中显示唯一值的计数,因为这是默认范围。

SSRS CountDistinct Function for distinct count preview

SSRS CountDistinct 函数范围示例

为此,我将在销售的右侧添加一个新列,并将标题命名为 DCNT Sale。接下来,右键单击文本框并选择“表达式”。有关更多函数 >> 单击此处!

下面的 CountDistinct 函数表达式返回的结果与“组内不同计数”行显示的结果相同。但是,您拥有更多的控制权,因为我们手动更改了 CountDistinct 函数的范围。

=CountDistinct(Fields!Education.Value, "Occupation")

下面的表达式将每个员工的销售额乘以每个职业组中唯一(不同)教育记录的数量。请记住,“职业”是组名。

=CountDistinct(Fields!Education.Value, "Occupation") * Fields!Sales.Value
Complex Unique Count expression

从报告预览中,Christy Mehta 的 DCNT Sale:2(文书职业不同教育计数)* 24.99(销售额)= 49.98。

如前所述,您必须将组(“职业”)替换为表名才能找到表或所有员工的不同计数。让我添加一个组外的新行,并将其命名为“表内不同计数”。接下来,为名字、姓氏、教育、年收入和销售额添加以下五个 SSRS CountDistinct 函数表达式。

=CountDistinct(Fields!FirstName.Value, "Tablix1")
=CountDistinct(Fields!LastName.Value, "Tablix1")
=CountDistinct(Fields!Education.Value, "Tablix1")
=CountDistinct(Fields!YearlyIncome.Value, "Tablix1")
=CountDistinct(Fields!Sales.Value, "Tablix1")

下面的报告显示了每个组和整个表中项目或记录的总不同计数。请将 Tablix1 替换为数据集名称,以获取不考虑报表筛选器的不同销售计数。

SSRS CountDistinct Function for distinct count Preview