> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 使用 ClickHouse 官方连接器时的 Tableau 分析技巧。

# 分析技巧

<div id="median-and-percentile-functions">
  ## MEDIAN() 和 PERCENTILE() 函数
</div>

* 在 Live 模式下，MEDIAN() 和 PERCENTILE() 函数 (自 connector v0.1.3 版本起) 使用 [ClickHouse quantile()() 函数](/zh/reference/functions/aggregate-functions/quantile)，可显著提升计算速度，但会采用采样。如果你需要获得精确的计算结果，请使用 `MEDIAN_EXACT()` 和 `PERCENTILE_EXACT()` 函数 (基于 [quantileExact()()](/zh/reference/functions/aggregate-functions/quantileExact)) 。
* 在 Extract 模式下，不能使用 MEDIAN\_EXACT() 和 PERCENTILE\_EXACT()，因为 MEDIAN() 和 PERCENTILE() 始终是精确的 (但速度较慢) 。

<div id="additional-functions-for-calculated-fields-in-live-mode">
  ## Live 模式下计算字段的附加函数
</div>

ClickHouse 提供了大量可用于数据分析的函数——远超 Tableau 支持的数量。为方便用户，我们新增了一些函数，供在 Live 模式下创建计算字段时使用。遗憾的是，Tableau 界面无法为这些函数添加说明，因此我们会在这里对它们进行介绍。

* **[`-If` 聚合组合器](/zh/reference/functions/aggregate-functions/combinators#-if)** *(于 v0.2.3 新增)* - 可在聚合计算中直接使用行级过滤器。新增了 `SUM_IF(), AVG_IF(), COUNT_IF(), MIN_IF() & MAX_IF()` 函数。
* **`BAR([my_int], [min_val_int], [max_val_int], [bar_string_length_int])`** *(在 v0.2.1 中添加)* — 别再用乏味的柱状图了！改用 `BAR()` 函数 (相当于 ClickHouse 中的 [`bar()`](/zh/reference/functions/regular-functions/other-functions#bar)) 。例如，这个计算字段会以 String 形式返回美观的条形：
  ```text theme={null}
  BAR([my_int], [min_val_int], [max_val_int], [bar_string_length_int]) + "  " + FORMAT_READABLE_QUANTITY([my_int])
  ```
  ```text theme={null}
  == BAR() ==
  ██████████████████▊  327.06 million
  █████  88.02 million
  ███████████████  259.37 million
  ```
* **`COUNTD_UNIQ([my_field])`** *(在 v0.2.0 中新增)* — 计算参数中不同值的近似个数。相当于 [uniq()](/zh/reference/functions/aggregate-functions/uniq)。比 `COUNTD()` 快得多。
* **`DATE_BIN('day', 10, [my_datetime_or_date])`** *(在 v0.2.1 中新增)* — 相当于 ClickHouse 中的 [`toStartOfInterval()`](/zh/reference/functions/regular-functions/date-time-functions#toStartOfInterval)。将 Date 或 Date & Time 按给定的时间间隔向下取整，例如：
  ```text theme={null}
   == my_datetime_or_date == | == DATE_BIN('day', 10, [my_datetime_or_date]) ==
      28.07.2004 06:54:50    |              21.07.2004 00:00:00
      17.07.2004 14:01:56    |              11.07.2004 00:00:00
      14.07.2004 07:43:00    |              11.07.2004 00:00:00
  ```
* **`FORMAT_READABLE_QUANTITY([my_integer])`** *(在 v0.2.1 中添加)* — 返回一个带后缀 (千、百万、十亿等) 的四舍五入数字字符串。它有助于人们读取大数字。等同于 [`formatReadableQuantity()`](/zh/reference/functions/regular-functions/other-functions#formatReadableQuantity)。
* **`FORMAT_READABLE_TIMEDELTA([my_integer_timedelta_sec], [optional_max_unit])`** *(于 v0.2.1 中新增)* — 接受以秒为单位的时间间隔。返回一个表示时间间隔的字符串，包含 (年、月、日、小时、分钟、秒) 。`optional_max_unit` 为要显示的最大单位。可接受的值：`seconds`、`minutes`、`hours`、`days`、`months`、`years`。等同于 [`formatReadableTimeDelta()`](/zh/reference/functions/regular-functions/other-functions#formatReadableTimeDelta)。
* **`GET_SETTING([my_setting_name])`** *(于 v0.2.1 中新增)* — 返回自定义设置的当前值。相当于 [`getSetting()`](/zh/reference/functions/regular-functions/other-functions#getSetting)。
* **`HEX([my_string])`** *(于 v0.2.1 中新增)* — 返回一个包含该参数十六进制表示的字符串。等同于 [`hex()`](/zh/reference/functions/regular-functions/encoding-functions#hex)。
* **`KURTOSIS([my_number])`** — 计算一个序列的样本峰度。相当于 [`kurtSamp()`](/zh/reference/functions/aggregate-functions/kurtSamp)。
* **`KURTOSISP([my_number])`** — 计算数列的峰度。等同于 [`kurtPop()`](/zh/reference/functions/aggregate-functions/kurtPop)。
* **`MEDIAN_EXACT([my_number])`** *(在 v0.1.3 中新增)* — 精确计算数值型数据序列的中位数。等同于 [`quantileExact(0.5)(...)`](/zh/reference/functions/aggregate-functions/quantileExact)。
* **`MOD([my_number_1], [my_number_2])`** — 计算除法的余数。如果参数是浮点数，会先截去小数部分并转换为整数。等同于 [`modulo()`](/zh/reference/functions/regular-functions/arithmetic-functions#modulo)。
* **`PERCENTILE_EXACT([my_number], [level_float])`** *(于 v0.1.3 新增)* — 精确计算数值数据序列的百分位。推荐的 level 取值范围为 \[0.01, 0.99]。等价于 [`quantileExact()()`](/zh/reference/functions/aggregate-functions/quantileExact)。
* **`PROPER([my_string])`** *(于 v0.2.5 新增)* - 将文本字符串转换为每个单词首字母大写、其余字母小写。空格以及标点等非字母数字字符也会被视为分隔符。例如：
  ```text theme={null}
  PROPER("PRODUCT name") => "Product Name"
  ```
  ```text theme={null}
  PROPER("darcy-mae") => "Darcy-Mae"
  ```
* **`RAND()`** *(于 v0.2.1 中新增)* — 返回一个整数 (UInt32) ，例如 `3446222955`。等同于 [`rand()`](/zh/reference/functions/regular-functions/random-functions#rand)。
* **`RANDOM()`** *(v0.2.1 中新增)* — 非官方的 [`RANDOM()`](https://kb.tableau.com/articles/issue/random-function-produces-inconsistent-results) Tableau 函数，返回 0 到 1 之间的浮点值。
* **`RAND_CONSTANT([optional_field])`** *(于 v0.2.1 新增)* — 生成一个带有随机值的常量列。类似于 `{RAND()}` 的固定 LOD，但速度更快。等同于 [`randConstant()`](/zh/reference/functions/regular-functions/random-functions#randConstant)。
* **`REAL([my_number])`** — 将字段转换为浮点型 (Float64) 。详情见[`此处`](/zh/reference/data-types/decimal#operations-and-result-type)。
* **`SHA256([my_string])`** *(在 v0.2.1 中添加)* — 计算字符串的 SHA-256 哈希，并将得到的字节集作为字符串 (FixedString) 返回。与 `HEX()` 函数搭配使用很方便，例如 `HEX(SHA256([my_string]))`。等价于 [`SHA256()`](/zh/reference/functions/regular-functions/hash-functions#SHA256)。
* **`SKEWNESS([my_number])`** — 计算一个数值序列的样本偏度。等同于 [`skewSamp()`](/zh/reference/functions/aggregate-functions/skewSamp)。
* **`SKEWNESSP([my_number])`** — 计算一组数值的偏度。相当于 [`skewPop()`](/zh/reference/functions/aggregate-functions/skewPop)。
* **`TO_TYPE_NAME([field])`** *(于 v0.2.1 中新增)* — 返回一个字符串，包含传入参数的 ClickHouse 类型名称。等同于 [`toTypeName()`](/zh/reference/functions/regular-functions/other-functions#toTypeName)。
* **`TRUNC([my_float])`** — 与 `FLOOR([my_float])` 函数相同。等同于 [`trunc()`](/zh/reference/functions/regular-functions/rounding-functions#trunc)。
* **`UNHEX([my_string])`** *(于 v0.2.1 中新增)* — 执行与 `HEX()` 相反的操作。等同于 [`unhex()`](/zh/reference/functions/regular-functions/encoding-functions#unhex)。
