You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by xx...@apache.org on 2022/03/31 10:57:24 UTC

[kylin] branch document updated: # add blog: how to use excel to query kylin

This is an automated email from the ASF dual-hosted git repository.

xxyu pushed a commit to branch document
in repository https://gitbox.apache.org/repos/asf/kylin.git


The following commit(s) were added to refs/heads/document by this push:
     new 647552a  # add blog: how to use excel to query kylin
647552a is described below

commit 647552a45879c80dbd5cac7ee179eb5375e419d4
Author: Mukvin <bo...@163.com>
AuthorDate: Thu Mar 31 18:35:01 2022 +0800

    # add blog: how to use excel to query kylin
---
 ...022-03-31-how-to-use-excel-to-query-kylin.cn.md | 309 ++++++++++++++++++++
 .../2022-03-31-how-to-use-excel-to-query-kylin.md  | 318 +++++++++++++++++++++
 .../10_use_excel_to_query_kylin.cn.png             | Bin 0 -> 81341 bytes
 .../10_use_excel_to_query_kylin.en.png             | Bin 0 -> 96620 bytes
 .../11_use_excel_to_query_kylin.cn.png             | Bin 0 -> 115614 bytes
 .../11_use_excel_to_query_kylin.en.png             | Bin 0 -> 125815 bytes
 .../12_use_excel_to_query_kylin.cn.png             | Bin 0 -> 116759 bytes
 .../12_use_excel_to_query_kylin.en.png             | Bin 0 -> 108379 bytes
 .../13_use_excel_to_query_kylin.cn.png             | Bin 0 -> 152971 bytes
 .../13_use_excel_to_query_kylin.en.png             | Bin 0 -> 179935 bytes
 .../14_use_excel_to_query_kylin.cn.png             | Bin 0 -> 191155 bytes
 .../14_use_excel_to_query_kylin.en.png             | Bin 0 -> 49157 bytes
 .../15_use_excel_to_query_kylin.cn.png             | Bin 0 -> 106766 bytes
 .../15_use_excel_to_query_kylin.en.png             | Bin 0 -> 11863 bytes
 .../16_use_excel_to_query_kylin.cn.png             | Bin 0 -> 191450 bytes
 .../16_use_excel_to_query_kylin.en.png             | Bin 0 -> 20065 bytes
 .../17_use_excel_to_query_kylin.cn.png             | Bin 0 -> 139208 bytes
 .../17_use_excel_to_query_kylin.en.png             | Bin 0 -> 9943 bytes
 .../18_use_excel_to_query_kylin.cn.png             | Bin 0 -> 626872 bytes
 .../18_use_excel_to_query_kylin.en.png             | Bin 0 -> 56858 bytes
 .../1_use_excel_to_query_kylin.cn.png              | Bin 0 -> 81948 bytes
 .../1_use_excel_to_query_kylin.en.png              | Bin 0 -> 197384 bytes
 .../2_use_excel_to_query_kylin.cn.png              | Bin 0 -> 91648 bytes
 .../2_use_excel_to_query_kylin.en.png              | Bin 0 -> 91648 bytes
 .../3_use_excel_to_query_kylin.cn.png              | Bin 0 -> 383700 bytes
 .../3_use_excel_to_query_kylin.en.png              | Bin 0 -> 383700 bytes
 .../4_use_excel_to_query_kylin.cn.png              | Bin 0 -> 171869 bytes
 .../4_use_excel_to_query_kylin.en.png              | Bin 0 -> 171869 bytes
 .../5_use_excel_to_query_kylin.cn.png              | Bin 0 -> 108107 bytes
 .../5_use_excel_to_query_kylin.en.png              | Bin 0 -> 83564 bytes
 .../6_use_excel_to_query_kylin.cn.png              | Bin 0 -> 44138 bytes
 .../6_use_excel_to_query_kylin.en.png              | Bin 0 -> 66025 bytes
 .../7_use_excel_to_query_kylin.cn.png              | Bin 0 -> 59147 bytes
 .../7_use_excel_to_query_kylin.en.png              | Bin 0 -> 74599 bytes
 .../8_use_excel_to_query_kylin.cn.png              | Bin 0 -> 58287 bytes
 .../8_use_excel_to_query_kylin.en.png              | Bin 0 -> 85564 bytes
 .../9_use_excel_to_query_kylin.cn.png              | Bin 0 -> 76709 bytes
 .../9_use_excel_to_query_kylin.en.png              | Bin 0 -> 95813 bytes
 38 files changed, 627 insertions(+)

diff --git a/website/_posts/blog/2022-03-31-how-to-use-excel-to-query-kylin.cn.md b/website/_posts/blog/2022-03-31-how-to-use-excel-to-query-kylin.cn.md
new file mode 100644
index 0000000..4de8c99
--- /dev/null
+++ b/website/_posts/blog/2022-03-31-how-to-use-excel-to-query-kylin.cn.md
@@ -0,0 +1,309 @@
+---
+layout: post-blog
+title: 如何使用 Excel 查询 Kylin?MDX for Kylin!
+date: 2022-03-31 11:00:00
+author: Xiaoxiang Yu
+categories: cn_blog
+---
+
+## Kylin 为什么需要 MDX?
+
+### 多维数据库和业务语义层
+
+多维数据库与关系型数据库的关键区别在于业务表达能力。尽管 SQL 表达能力很强,是数据分析师的基本技能,但如果以 “人人都是分析师” 为目标,SQL 和关系数据库对非技术人员还是太难了。从非技术人员的视角,数据湖和数据仓库就好似一个黑暗的房间,知道其中有很多数据,却因为不懂数据库理论和 SQL,无法看清、理解、和使用这些数据。
+
+如何让数据湖(和数据仓库)对非技术人员也 “**清澈见底**”?这就需要引入一个对非技术人员更加友好的“**关系数据模型** – **多维数据模型**”。如果说关系模型描述了数据的技术形态,那么多维模型则描述了数据的业务形态。在多维数据库中,度量对应了每个人都懂的业务指标,维度则是比较、观察这些业务指标的角度。要与上个月比较 KPI,要在平行事业部之间比较绩效,这些是每个非技术人员都理解的概念。通过将关系模型映射到多维模型,本质是在技术数据之上增强了业务语义,形成业务语义层,帮助非技术人员也能看懂、探索、使用数据。
+
+为了增强 Kylin 作为多维数据库的语义层能力,支持多维查询语言是 Kylin Roadmap 上的重点内容,比如 MDX 和 DAX。通过 MDX 可以将 Kylin 中的数据模型转换为业务友好的语言,赋予数据业务价值,方便对接 **Excel**、Tableau 等 BI 工具进行多维分析。
+
+### 基于 MDX 打造业务指标平台 
+
+使用 MDX 来创建复杂的业务指标,相对 SQL 的一些特点和优势如下:
+
+1. 更好的**支持复杂分析场景**,如半累加、多对多、时间窗口分析等;
+2. 广泛支持各种 BI,“Kylin + MDX” 不仅能够通过 SQL 接口暴露为类似于关系型数据库的表,也可以暴露为兼容 XMLA 协议的带有语义信息的数据源,可通过 MDX 语言进行查询,支持对接 **Excel** 等只能通过 XMLA 协议对接数据源的 BI;
+3. 基于 Kylin 中的数据模型灵活定义 MDX 语义模型,将底层数据结构转换为业务友好的语言,赋予数据业务价值,使得业务人员在分析时无需关心底层的技术复杂度和实现;通过 MDX 模型向外暴露统一语义,帮助用户**构建统一的业务语义层**。(详细信息可以参考链接 1/6/7)
+
+
+
+## MDX 介绍
+
+### 什么是 MDX?
+
+MDX (Multi Dimensional eXpression) 是一种 OLAP 多维数据集的查询语言,最初由 Microsoft 于 1997 年作为 OLEDB for OLAP 规范引入,随后集成在 SSAS 中。目前,MDX 在 OLAP 数据库中被广泛采用。
+
+MDX 在很多方面与结构化查询语言 (SQL) 语法相似,但它不是 SQL 语言的扩展;事实上,MDX 所提供的一些功能也可由 SQL 提供,尽管不是那么有效或直观。如同 SQL 查询一样,MDX 查询可以包括SELECT 子句)、FROM 子句和 WHERE 子句。这些关键字以及其它关键字提供了各种工具,用来从多维数据集析取数据的特定部分。
+
+MDX 查询语法示例如下(详细信息可以参考链接 3): 
+
+```sql
+select <axis_specification>[, <axis_specification>]
+from <cube_specification>
+where <slicer_specification>
+```
+
+### MDX 基本概念
+
+在了解学习 MDX 之前,请至少掌握以下概念。限于相关概念在 Microsoft 的 SSAS 官网有比较详细的介绍,不了解的同学可以通过文章末尾的参考链接学习。(详细信息可以参考链接 2/3/4)
+
+1. 维度(Dimensions)、级别(Levels)、成员(Members)和度量值(Measures)
+2. 单元(Cell)、元组(Tuple)和集合(Set)
+3. 轴维度(Query Axis)和切片器维度(Slicer Axis)
+
+### MDX 和 SQL 的比较
+
+**查询对象**不同,MDX 的查询对象是**多维数据集**(Cube),是提前 Join 和聚合好的数据,查询时不需要指定 Join 关系。SQL 查询对象是**关系表**(Table),是一条条的明细记录,查询时需要指定表之间的 Join 关系。 
+
+**查询结果**不同,SQL 返回**二维数据子集**,而 MDX 返回**多维数据集**。(详细信息可以参考链接 5)
+
+# MDX for Kylin 介绍
+
+### 什么是 MDX for Kylin ?
+
+**MDX for Kylin** 是基于 **Mondrian** 二次开发的,由 **Kyligence** 贡献的,使用 **Apache Kylin 4** 作为数据源的 MDX 查询引擎 。MDX for Kylin 的使用体验比较接近 Microsoft SSAS,可以集成多种数据分析工具,包括 Microsoft Excel、Tableau 等,可以为大数据分析场景下提供更极致的体验。
+
+### MDX for Kylin 创建业务指标
+
+#### 原子指标和业务指标
+
+在 Kylin Cube 我们创建的各种度量,是在单独的一列上的进行的聚合计算(TopN 除外),只包含了有限的几种聚合函数,即 Sum/Max/Min/Count/Count Distinct,相对比较简单,我们称之为**原子指标**。
+
+在实际业务场景中,基于原子指标我们可以对**原子指标**的各种复杂运算,来创建有业务含义的复合指标,这样的指标我们称之为**业务指标。**
+
+#### 层级结构、计算度量和命名集
+
+**层级结构:**层级结构是基于维度的级别集合,可用于提高数据分析人员的分析能力。例如,你可以创建一个时间层级结构,包含了年、季、月、周和日级别。这样分析人员在客户端中可以先逐年分析销售额,在需要时可以分别展开“季度 > 月 > 周 > 日”来进行更细粒度的分析。
+
+**计算度量:**计算度量是对**原子指标**使用 MDX 表达式进行复合计算形成的新的度量/指标,我们主要使用计算度量来创建**业务指标**。
+
+**命名集:**在 MDX for Kylin 的使用中,经常会出现需要重复使用一组成员的需求,这种需求可以通过定义命名集来满足。命名集(NamedSet) 是根据指定的表达式 计算得到的一个成员Set,即一组成员的集合,命名集可以直接置于轴上用于展示,也可以在计算度量或其他命名集的表达式中使用。
+
+#### 创建语义模型
+
+在 Kylin 4 根据表与表之间的关系创建数据模型,并且在 Cube 上定义维度和度量,这些度量我们可以认为是**原子指标**。
+
+在 MDX for Kylin,将相关联的 Kylin Cube 相关联,来创建数据集;并且基于原子指标,来创建有业务含义的**业务指标。**
+
+![](/images/blog/how_to_use_excel_to_query_kylin/1_use_excel_to_query_kylin.cn.png)
+
+#### 数据分析
+
+使用时,客户端发送 MDX 查询给 MDX for Kylin,MDX for Kylin 再解析 MDX 查询翻译为 SQL 并且发送给 Kylin ,然后 Kylin 通过预计算的 Cuboid 回答 SQL 查询并把结果交还给 MDX for Kylin,MDX for Kylin 会再做一些衍生指标的计算,最终将多维数据结果返回给客户端。
+
+![](/images/blog/how_to_use_excel_to_query_kylin/2_use_excel_to_query_kylin.cn.png)
+
+#### 流程总结
+
+总的来说,支持 MDX 接口能够增强 Kylin 的语义层能力,为用户带来统一的数据分析和管理体验,更好地发挥数据的价值。下图就是将从下而上,展示从原始数据加工业务指标的过程。
+
+![](/images/blog/how_to_use_excel_to_query_kylin/3_use_excel_to_query_kylin.cn.png)
+
+### MDX for Kylin 的技术优势
+
+MDX for Kylin 相对其它开源 MDX 查询引擎,具有以下优势:
+
+- 更好支持BI(Excel/Tableau/Power BI等) 产品,适配 XMLA 协议;
+- 针对 BI 的 MDX Query 进行了特定优化重写;
+- 适配 Kylin 查询,通过 Kylin 的预计算能力加速 MDX 查询;
+- 通过简洁易懂的操作界面,提供了统一的指标定义和管理能力。
+
+# 从 Docker 快速开始
+
+### 测试环境
+
+- Macbook Pro 笔记本
+  - Docker Desktop (latest version) 
+- Windows 10 虚拟机
+  - Microsoft Excel (for Windows)
+
+### 启动容器
+
+这个容器包含了 Yarn、HDFS、MySQL、Kylin、MDX for Kylin 等进程。
+
+```she
+docker run -d \
+    -m 8g \
+    -p 7070:7070 \
+    -p 7080:7080 \
+    -p 8088:8088 \
+    -p 50070:50070 \
+    -p 8032:8032 \
+    -p 8042:8042 \
+    -p 2181:2181 \
+    --name kylin-4.0.1 \
+    apachekylin/apache-kylin-standalone:kylin-4.0.1-mondrian
+```
+
+### 检查环境
+
+等待一段时间,请依次检查 HDFS/YARN/Kylin/MDX for Kylin 的 Web UI 是否可以访问。
+
+| **组件**      | **Web UI 地址**                       |
+| ------------- | ------------------------------------- |
+| HDFS          | http://localhost:50070/dfshealth.html |
+| YARN          | http://localhost:8088/cluster         |
+| Kylin         | http://localhost:7070/kylin           |
+| MDX for Kylin | http://localhost:7080/overview        |
+
+### 构建样例 Cube
+
+请直接使用 Kylin 自带的样例 Cube:`kylin_sales_cube`。
+
+![](/images/blog/how_to_use_excel_to_query_kylin/4_use_excel_to_query_kylin.cn.png)
+
+### 创建 MDX 数据集
+
+##### 登录 MDX for Kylin
+
+默认账号/密码是 ADMIN/KYLIN,MDX for Kylin 的账户与 KYLIN 的同步。
+
+![](/images/blog/how_to_use_excel_to_query_kylin/5_use_excel_to_query_kylin.cn.png)
+
+##### 创建数据集和定义关系
+
+![](/images/blog/how_to_use_excel_to_query_kylin/6_use_excel_to_query_kylin.cn.png)
+
+![](/images/blog/how_to_use_excel_to_query_kylin/7_use_excel_to_query_kylin.cn.png)
+
+##### 创建时间层级
+
+- 修改`KYLIN_CAL_DT`的表属性
+
+![](/images/blog/how_to_use_excel_to_query_kylin/8_use_excel_to_query_kylin.cn.png)
+
+- 修改 `YEAR_BEG_DT` 的类型为“年”
+
+![](/images/blog/how_to_use_excel_to_query_kylin/9_use_excel_to_query_kylin.cn.png)
+
+![](/images/blog/how_to_use_excel_to_query_kylin/10_use_excel_to_query_kylin.cn.png)
+
+- 同理修改`MONTH_BEG_DT`和`WEEK_BEG_DT` ,并且选择对应的层级
+- 创建时间层级`Calendar` ,请注意设置层级结构的前后顺序保持为“年-月-周”
+
+![](/images/blog/how_to_use_excel_to_query_kylin/11_use_excel_to_query_kylin.cn.png)
+
+##### 修改原子指标名称
+
+- 修改 `GMV_SUM` 为 “销售额”,修改`SELLER_CNT_HLL`为“商家数量”
+
+![](/images/blog/how_to_use_excel_to_query_kylin/12_use_excel_to_query_kylin.cn.png)
+
+##### 创建业务指标(计算度量)
+
+- 创建业务指标“商户平均消费额”
+
+![](/images/blog/how_to_use_excel_to_query_kylin/13_use_excel_to_query_kylin.cn.png)
+
+- 依次创建业务指标“销售额年同期增长率”和“销售额月同期增长率”
+
+| **指标名称**       | **MDX 表达式**                                               |
+| ------------------ | ------------------------------------------------------------ |
+| 商户平均消费额     | [Measures].[销售额]/[Measures].[商家数量]                    |
+| 销售额年同期增长率 | [Measures].[销售额] / SUM(  ParallelPeriod(    [KYLIN_CAL_DT].[Calendar-Hierarchy].[YEAR_BEG_DT],    1,    [KYLIN_CAL_DT].[Calendar-Hierarchy].CurrentMember  ),  [Measures].[销售额] ) - 1 |
+| 销售额月同期增长率 | [Measures].[销售额] / SUM(  ParallelPeriod(    [KYLIN_CAL_DT].[Calendar-Hierarchy].[MONTH_BEG_DT],    1,    [KYLIN_CAL_DT].[Calendar-Hierarchy].CurrentMember  ),  [Measures].[销售额] ) - 1 |
+| 总销售额           | Fixed([KYLIN_CAL_DT].[YEAR_BEG_DT], [Measures].[销售额])     |
+| 全年销售额占比     | [Measures].[销售额]/[Measures].[总销售额]                    |
+
+
+
+### HTTP API 测试 MDX 查询
+
+如果你没有 一个 Windows 环境的 Excel,并且你想测试你在上一步测试创建的业务指标,请通过  MDX 暴露的查询相关的 REST API 来验证查询结果。如果想修改 MDX 查询语句,请修改以下`<Statement></Statement>` 里面的 MDX 语句,并且请根据情况修改`Catalog`字段的值。
+
+```she
+curl --location --request POST 'http://localhost:7080/mdx/xmla/learn_kylin' \
+--header 'Authorization: Basic QURNSU46S1lMSU4=' \
+--header 'Connection:  Keep-Alive' \
+--header 'SOAPAction: "urn:schemas-microsoft-com:xml-analysis:Execute"' \
+--header 'User-Agent: MSOLAP' \
+--header 'Content-Type: text/xml' \
+--header 'Accept: */*' \
+--header 'Cookie: JSESSIONID=22BF2B6D889F183D7F7E898D4D769398; MDXAUTH=ZUt6V1VBRE1JTjoyYTk3Zjg2NTdiNjk0NTE5NzA0NjFiN2ZjYTNkYzg2OToxNjQ2NjMxNDkw' \
+--data-raw '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+    <soap:Header>
+        <Session xmlns="urn:schemas-microsoft-com:xml-analysis" SessionId="8nblet191q"/>
+    </soap:Header>
+    <soap:Body>
+        <Execute xmlns="urn:schemas-microsoft-com:xml-analysis">
+           <Command>
+                <Statement>
+SELECT {[Measures].[销售额],
+        [Measures].[商家数量],
+        [Measures].[商户平均消费额],
+        [Measures].[全年销售额占比],
+        [Measures].[销售额年同期增长率],
+        [Measures].[销售额月同期增长率]} 
+    DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON COLUMNS , 
+NON EMPTY Hierarchize(AddCalculatedMembers({DrilldownLevel({[KYLIN_CAL_DT].[Calendar-Hierarchy].[All]})})) 
+    DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON ROWS  
+FROM [demo0] 
+CELL PROPERTIES VALUE, FORMAT_STRING, LANGUAGE, BACK_COLOR, FORE_COLOR, FONT_FLAGS
+                </Statement>            
+            </Command>
+            <Properties>
+                <PropertyList>
+                    <Catalog>demo0</Catalog>
+                    <Timeout>0</Timeout>
+                    <Content>SchemaData</Content>
+                    <Format>Multidimensional</Format>
+                    <AxisFormat>TupleFormat</AxisFormat>
+                    <DbpropMsmdFlattened2>false</DbpropMsmdFlattened2>
+                    <SafetyOptions>2</SafetyOptions>
+                    <Dialect>MDX</Dialect>
+                    <MdxMissingMemberMode>Error</MdxMissingMemberMode>
+                    <DbpropMsmdOptimizeResponse>9</DbpropMsmdOptimizeResponse>
+                    <DbpropMsmdActivityID>6C94075F-65AD-4B9E-B3EB-4536A191A6AB</DbpropMsmdActivityID>
+                    <DbpropMsmdRequestID>9FA20B8A-ACA0-414E-98EA-14649F20CF75</DbpropMsmdRequestID>
+                    <LocaleIdentifier>1033</LocaleIdentifier>
+                    <DbpropMsmdMDXCompatibility>1</DbpropMsmdMDXCompatibility>
+                </PropertyList>
+            </Properties>
+        </Execute>
+    </soap:Body>
+</soap:Envelope>'
+```
+
+
+
+### 通过 Excel 透视表访问业务指标
+
+##### 连接 MDX for Kylin
+
+- 打开 Microsoft Excel (for Windows)
+
+![](/images/blog/how_to_use_excel_to_query_kylin/14_use_excel_to_query_kylin.cn.png)
+
+- 配置 MDX for Kylin 地址,请替换 IP_Adress 为你笔记本的 IP 地址,用户名和密码使用 Kylin 的账号和密码。
+
+![](/images/blog/how_to_use_excel_to_query_kylin/15_use_excel_to_query_kylin.cn.png)
+
+##### 通过数据透视表分析销售额
+
+- 配置数据透视表
+
+![](/images/blog/how_to_use_excel_to_query_kylin/16_use_excel_to_query_kylin.cn.png)
+
+- 查看年同期销售额增长率
+
+![](/images/blog/how_to_use_excel_to_query_kylin/17_use_excel_to_query_kylin.cn.png)
+
+- 查看月同期销售额增长率
+
+![](/images/blog/how_to_use_excel_to_query_kylin/18_use_excel_to_query_kylin.cn.png)
+
+
+
+## 参考链接
+
+| **编号** | **链接**                                                     | **注释**                        | **产品**       |
+| -------- | ------------------------------------------------------------ | ------------------------------- | -------------- |
+| 1        | https://lists.apache.org/thread/4fkhyw1fyf0jg5cb18v7vxyqbn6vm3zv | Kylin 社区发起开发语义层的讨论  | Apache Kylin   |
+| 2        | https://mondrian.pentaho.com/documentation/mdx.php           | Mondrian 的官网文档             | Mondrian       |
+| 3        | https://docs.microsoft.com/en-us/sql/mdx/mdx-syntax-elements-mdx | SSAS 关于 MDX 查询的语法规范    | Microsoft SSAS |
+| 4        | https://wiki.smartbi.com.cn/pages/viewpage.action?pageId=76692713 | SmartBI 关于 MDX 基本概念的介绍 | SmartBI        |
+| 5        | https://dba.stackexchange.com/questions/138311/good-example-of-mdx-vs-sql-for-analytical-queries | 对比 SQL 和 MDX                 | N/A            |
+| 6        | https://kyligence.io/blog/opportunities-for-ssas-in-the-cloud/ | Kyligence MDX 技术博客          | Kyligence      |
+| 7        | https://kyligence.io/blog/semantic-layer-the-bi-trend-you-dont-want-to-miss-in-2020/ | Kyligence MDX 技术博客          | Kyligence      |
+| 8        | https://docs.kyligence.io/books/mdx/v1.3/zh-cn/index.html    | Kyligence MDX 用户手册          | Kyligence      |
+| 9        | https://medium.com/airbnb-engineering/how-airbnb-achieved-metric-consistency-at-scale-f23cc53dea70 | Airbnb Tech Blog                | Airbnb Minerva |
+
diff --git a/website/_posts/blog/2022-03-31-how-to-use-excel-to-query-kylin.md b/website/_posts/blog/2022-03-31-how-to-use-excel-to-query-kylin.md
new file mode 100644
index 0000000..e8bb083
--- /dev/null
+++ b/website/_posts/blog/2022-03-31-how-to-use-excel-to-query-kylin.md
@@ -0,0 +1,318 @@
+---
+layout: post-blog
+title: How to use Excel to query Kylin? MDX for Kylin!
+date: 2022-03-31 11:00:00
+author: Xiaoxiang Yu
+categories: blog
+---
+
+## **Abstract**
+
+During the [Kylin community discussion](https://lists.apache.org/thread/4fkhyw1fyf0jg5cb18v7vxyqbn6vm3zv) at the beginning of this year, we talked about the positioning of multidimensional databases and the idea of building a Kylin-based business semantic layer. After some development efforts, we are delighted to announce the beta release of the **MDX** **for Kylin** **, an MDX query engine for Apache Kylin** to allow Kylin users to use **Excel** for data analysis.
+
+#### **Target audiences**
+
+- Kylin users who are not familiar with **MDX**
+
+- Data engineers who are interested in building a **metrics platform** based on Kylin
+
+- Data analysts who are interested in massive data analysis with **Excel**
+
+#### **What you will learn**
+
+- Basic concepts of MDX and MDX for Kylin
+
+- Quickstart tutorial for MDX for Kylin
+
+- Demonstration of how to use MDX for Kylin to define complex business metrics
+
+
+
+## **Why Kylin need MDX?**
+
+### **Multidimensional database and business semantic layer**
+
+The primary difference between multidimensional databases and relational databases lies in business semantics. As the must-have skill of data analysts, SQL (Structured Query Language) is extremely expressive, but if we are talking in the context of "every professional will be an analyst", it is still too complex for non-technical users. For them, data lakes and data warehouses are like dark rooms that hold a huge amount of data; they cannot see, understand, or use the data for lack of th [...]
+
+How to make data lakes and data warehouses **"easy"** for a non-technical user to use? One solution is to introduce a more user-friendly **"relational data model - multidimensional data model"**. If relational models are to provide a technique-oriented description of the data, multidimensional models intend to provide a business-oriented description of the data. In multidimensional databases, measures correspond to the business metrics that everyone is familiar with. Measures provide the [...]
+
+In Kylin Roadmap, support to multidimensional query languages (such as MDX and DAX) is an important part, as we aim to enhance the business semantic capability of Kylin as a multi-dimensional database. Users can use MDX to convert the Kylin data model into business-friendly language, so they can perform multidimensional analysis with Excel, Tableau and other BI tools and understand the business values from their data. 
+
+### **Build a business metrics platform with MDX**
+
+When building complex business metrics, MDX provides the following advantages if compared to SQL:
+
+1. **Better support for complex analysis scenarios**, such as semi-accumulation, many-to-many, and time window analysis;
+2. **More BI support**: "Kylin + MDX" can be exposed as relational database tables through the SQL interface, or XMLA-compliant data source with business semantics. It allows MDX queries and integration with Excel and other BI tools through the XMLA protocol;
+3. **Flexible defining of MDX semantic model based on Kylin data model**, it will convert the underlying data structure into a business-friendly language and add business value to data. With MDX model, we offer users a unified business semantic layer, they no longer need to worry about the underlying technology or implementation complexity when analyzing data. For more information, see *[The future of Apache Kylin](https://lists.apache.org/thread/4fkhyw1fyf0jg5cb18v7vxyqbn6vm3zv)*, *[SSA [...]
+
+### **MDX Overview**
+
+#### **What is MDX?**
+
+MDX (Multi Dimensional eXpression) is a query language for OLAP Cube. It was first introduced by Microsoft in 1997 as part of the OLEDB for OLAP specification and later integrated into SSAS. Since then, it has been widely adopted by OLAP databases.
+
+MDX is similar to SQL in many ways and also offers some SQL features though maybe not as intuitive or effective as SQL. For example, you can include SELECT, FROM, or WHERE clause in your MDX queries. But it is not an extension of SQL. You can use these keywords to dig into specific parts of the Cube. 
+
+[MDX query syntax ](https://docs.microsoft.com/en-us/sql/mdx/mdx-syntax-elements-mdx?view=sql-server-ver15)are as follows: 
+
+```sql
+select <axis_specification>[, <axis_specification>]
+ from <cube_specification>
+ where <slicer_specification>
+```
+
+#### **Key concepts of MDX**
+
+Please learn some basic MDX concepts before we continue. 
+
+1. Dimensions, Levels, Members, and Measures
+2. Cell, Tuple, and Set
+3. Query Axis and Slicer Axis
+
+For detailed information about these concepts, see [MDX Syntax Elements (MDX)](https://docs.microsoft.com/en-us/sql/mdx/mdx-syntax-elements-mdx?view=sql-server-ver15).
+
+#### **Comparison of MDX and SQL**
+
+The query objects are different. MDX is to query the cube, with data already joined and aggregated, so users needn't specify the join relation when querying. SQL is to query a table with detailed records. Users need to specify the join relation among the tables when querying.
+
+[Another difference is the query result](https://dba.stackexchange.com/questions/138311/good-example-of-mdx-vs-sql-for-analytical-queries). SQL returns a 2d data subset, while MDX returns the cubes. 
+
+### **MDX for Kylin** **Overview**
+
+#### **What is** **MDX for Kylin**?
+
+**MDX for Kylin** is an MDX query engine which developed based on **Mondrian**, contributed by **Kyligence,** and with **Apache Kylin** as data source. Like Microsoft SSAS, MDX for Kylin can also integrate many data analysis tools, including Microsoft Excel and Tableau, to provide a better user experience for big data analysis.
+
+#### **How** **to create business metrics**
+
+##### **Atomic metrics and business metrics**
+
+In Kylin Cube, we will perform certain aggregate calculations (such as Sum/Max/Min/Count/Count Distinct, exclude TopN) on a single column when creating measures, and the measures created are called atomic metrics. 
+
+In actual business scenarios, we can run complex calculations based on these atomic metrics to create composite metrics with business implications, and these metrics are called business metrics.
+
+##### **Hierarchy, Calculated Measure, and NamedSet**
+
+**Hierarchy:** Hierarchies are collections of dimension-based hierarchies that can empower data analysts with advanced analytical capabilities. For example, you can create a time hierarchy with year, quarter, month, week, and day as its hierarchy. Then data analysts can do a YOY analysis on the sales volume, or dig into the "Quarter > Month > Week > Day" hierarchy for more detailed analysis.
+
+**Calculated Measure:** Calculated Measure are metrics/indexes acquired by running composite computing on the **atomic metrics** with MDX expressions. We mainly use calculated measures to create **business metrics**.
+
+**NamedSet:** Namedset is for the scenario when you need to reuse a set of members in MDX for Kylin. A NamedSet uses specified expressions to get the set members. It can be placed directly on the axis or used in expressions of Calculated Measure for or other Namedset.
+
+#### **Dataset as** **semantic model**
+
+In Kylin 4, we create a data model based on the relationship among tables, and define different dimensions and measures on the Cube. These measures are **atomic metrics**. 
+
+In MDX for Kylin, we join related Kylin Cubes to create datasets and create **business metrics** based on atomic metrics.
+
+![](/images/blog/how_to_use_excel_to_query_kylin/1_use_excel_to_query_kylin.en.png)
+
+#### **Process of calculating**
+
+The client(BI/Excel) sends an MDX query to MDX for Kylin, which will then be parsed into SQL and sent to Kylin. After that, Kylin will answer the SQL query based on the pre-computed Cuboid and return the result to MDX for Kylin. Then, MDX for Kylin will do some derived metrics calculation, and return the multidimensional data results to the client.
+
+![](/images/blog/how_to_use_excel_to_query_kylin/2_use_excel_to_query_kylin.en.png)
+
+#### **Summary**
+
+**MDX for** **Kylin** supports MDX interface enhancing the semantic capability and creates a unified data analysis and management user experience. Now users can better leverage the value of data. The figure below shows the process of how raw data is processed into business metrics.
+
+![](/images/blog/how_to_use_excel_to_query_kylin/3_use_excel_to_query_kylin.en.png)
+
+### **Technical advantages of** **MDX for Kylin**
+
+If compared with other open-source MDX query engines, MDX for Kylin has the following advantages:
+
+- Better support to BIs (Excel/Tableau/Power BI, etc.)and compliance with XMLA protocol
+
+- Optimize the MDX Query for BIs
+
+- Accelerate MDX queries with Kylin's pre-computing capability
+
+- Easy-to-use interface for metrics definition and management
+
+
+
+## **Quick start with Docker**
+
+#### **Test environment**
+
+- MacBook Pro: Docker Desktop (latest version)
+- Windows 10 virtual machine: Microsoft Excel (for Windows)
+
+#### **Start the container**
+
+```she
+docker run -d \
+    -m 8g \
+    -p 7070:7070 \
+    -p 7080:7080 \
+    -p 8088:8088 \
+    -p 50070:50070 \
+    -p 8032:8032 \
+    -p 8042:8042 \
+    -p 2181:2181 \
+    --name kylin-4.0.1 \
+    apachekylin/apache-kylin-standalone:kylin-4.0.1-mondrian
+```
+
+#### Environment Check
+
+Wait for a few minutes, then check if you can visit the web UI of HDFS, YARN, Kylin, and MDX for Kylin.
+
+| **Components** | **Web UI**                            |
+| -------------- | ------------------------------------- |
+| HDFS           | http://localhost:50070/dfshealth.html |
+| YARN           | http://localhost:8088/cluster         |
+| Kylin          | http://localhost:7070/kylin           |
+| MDX for Kylin  | http://localhost:7080/overview        |
+
+#### Build a sample Cube
+
+In this tutorial, we will use Kylin's built-in sample Cube: `kylin_sales_cube`
+
+![](/images/blog/how_to_use_excel_to_query_kylin/4_use_excel_to_query_kylin.en.png)
+
+#### Create a MDX dataset
+
+##### **Log in to** **MDX for Kylin**
+
+Log in to MDX for Kylin through the web UI: http://localhost:7080. The default account/password is **ADMIN/KYLIN**, the same as Kylin.
+
+![](/images/blog/how_to_use_excel_to_query_kylin/5_use_excel_to_query_kylin.en.png)
+
+##### Define the dataset and relations
+
+![](/images/blog/how_to_use_excel_to_query_kylin/6_use_excel_to_query_kylin.en.png)
+
+![](/images/blog/how_to_use_excel_to_query_kylin/7_use_excel_to_query_kylin.en.png)
+
+##### **Create a time hierarchy**
+
+- Configure the dimension table `KYLIN_CAL_DT`. 
+
+![](/images/blog/how_to_use_excel_to_query_kylin/8_use_excel_to_query_kylin.en.png)
+
+- Configure the column `YEAR_BEG_DT`, and set **Type** to **Year**.
+
+![](/images/blog/how_to_use_excel_to_query_kylin/9_use_excel_to_query_kylin.en.png)
+
+![](/images/blog/how_to_use_excel_to_query_kylin/10_use_excel_to_query_kylin.en.png)
+
+- Configure `MONTH_BEG_DT`and `WEEK_BEG_DT`, set them to the correspondent hierarchy. 
+- Create a time hierarchy `Calendar`. Please be noted the time hierarchy should be in a "year-month-week" order.
+
+![](/images/blog/how_to_use_excel_to_query_kylin/11_use_excel_to_query_kylin.en.png)
+
+##### **Rename the atomic metrics**
+
+Rename the atomic metric `GMV_SUM` to some names with business implications. In this tutorial, we named it as **Sales volume**, and renamed `SELLER_CNT_HLL` as **Retailer numbers**.
+
+![](/images/blog/how_to_use_excel_to_query_kylin/12_use_excel_to_query_kylin.en.png)
+
+##### **Create business metrics (calculated measures)**
+
+- Create the business metric **Av****erage sales volume of** **retailers**.
+
+![](/images/blog/how_to_use_excel_to_query_kylin/13_use_excel_to_query_kylin.en.png)
+
+- Build "YoY growth rate of sales volume" and "MoM growth rate of sales volume" sequentially. 
+
+| Metrics                                 | **MDX Expression**                                           |
+| --------------------------------------- | ------------------------------------------------------------ |
+| Average sales volume of retailers       | [Measures].[Sales volume]/[Measures].[Retailer number]       |
+| YoY growth rate of sales volume         | [Measures].[Sales volume] / SUM(  ParallelPeriod(    [KYLIN_CAL_DT].[Calendar-Hierarchy].[YEAR_BEG_DT],    1,    [KYLIN_CAL_DT].[Calendar-Hierarchy].CurrentMember  ),  [Measures].[Sales volume] ) - 1 |
+| MoM growth rate of sales volume         | [Measures].[Sales volume] / SUM(  ParallelPeriod(    [KYLIN_CAL_DT].[Calendar-Hierarchy].[MONTH_BEG_DT],    1,    [KYLIN_CAL_DT].[Calendar-Hierarchy].CurrentMember  ),  [Measures].[Sales volume] ) - 1 |
+| Total sales volume                      | Fixed([KYLIN_CAL_DT].[YEAR_BEG_DT], [Measures].[Sales volume]) |
+| Proportion in total annual sales volume | [Measures].[Sales volume]/[Measures].[Total sales volume]    |
+
+#### **Access business metrics through Excel pivot tables**
+
+##### **Connect** **MDX for Kylin****!**
+
+- Open Microsoft Excel (for Windows)
+
+![](/images/blog/how_to_use_excel_to_query_kylin/14_use_excel_to_query_kylin.en.png)
+
+- Configure the MDX for Kylin server address. Please update the IP_Adress with your IP address, and use Kylin's account and password(ADMIN/KYLIN in this case).
+
+![](/images/blog/how_to_use_excel_to_query_kylin/15_use_excel_to_query_kylin.en.png)
+
+##### Check sales volume with pivot tables
+
+-  Configure pivot table
+
+![](/images/blog/how_to_use_excel_to_query_kylin/16_use_excel_to_query_kylin.en.png)
+
+- Check YoY growth rate of sales volume
+
+![](/images/blog/how_to_use_excel_to_query_kylin/17_use_excel_to_query_kylin.en.png)
+
+- Check MoM growth rate of sales volume
+
+![](/images/blog/how_to_use_excel_to_query_kylin/18_use_excel_to_query_kylin.en.png)
+
+
+#### Call API to query MDX for Kylin
+
+If you do NOT have a windows version Excel, you can also use REST API to test the business metrics just created.  Note: please change the variables in the `<Statement>` `</Statement>` section based on your setting and update the value of `Catalog` if needed. 
+
+```she
+curl --location --request POST 'http://localhost:7080/mdx/xmla/learn_kylin' \
+--header 'Authorization: Basic QURNSU46S1lMSU4=' \
+--header 'Connection:  Keep-Alive' \
+--header 'SOAPAction: "urn:schemas-microsoft-com:xml-analysis:Execute"' \
+--header 'User-Agent: MSOLAP' \
+--header 'Content-Type: text/xml' \
+--header 'Accept: */*' \
+--header 'Cookie: JSESSIONID=22BF2B6D889F183D7F7E898D4D769398; MDXAUTH=ZUt6V1VBRE1JTjoyYTk3Zjg2NTdiNjk0NTE5NzA0NjFiN2ZjYTNkYzg2OToxNjQ2NjMxNDkw' \
+--data-raw '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+    <soap:Header>
+        <Session xmlns="urn:schemas-microsoft-com:xml-analysis" SessionId="8nblet191q"/>
+    </soap:Header>
+    <soap:Body>
+        <Execute xmlns="urn:schemas-microsoft-com:xml-analysis">
+           <Command>
+                <Statement>
+SELECT {[Measures].[Sales volume],
+        [Measures].[Retailer number],
+        [Measures].[Average sales volume of retailers],
+        [Measures].[Proportion in total annual sales volume],
+        [Measures].[YoY growth rate of sales volume],
+        [Measures].[MoM growth rate of sales volume]} 
+    DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON COLUMNS , 
+NON EMPTY Hierarchize(AddCalculatedMembers({DrilldownLevel({[KYLIN_CAL_DT].[Calendar-Hierarchy].[All]})})) 
+    DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON ROWS  
+FROM [demo0] 
+CELL PROPERTIES VALUE, FORMAT_STRING, LANGUAGE, BACK_COLOR, FORE_COLOR, FONT_FLAGS
+                </Statement>            
+            </Command>
+            <Properties>
+                <PropertyList>
+                    <Catalog>demo0</Catalog>
+                    <Timeout>0</Timeout>
+                    <Content>SchemaData</Content>
+                    <Format>Multidimensional</Format>
+                    <AxisFormat>TupleFormat</AxisFormat>
+                    <DbpropMsmdFlattened2>false</DbpropMsmdFlattened2>
+                    <SafetyOptions>2</SafetyOptions>
+                    <Dialect>MDX</Dialect>
+                    <MdxMissingMemberMode>Error</MdxMissingMemberMode>
+                    <DbpropMsmdOptimizeResponse>9</DbpropMsmdOptimizeResponse>
+                    <DbpropMsmdActivityID>6C94075F-65AD-4B9E-B3EB-4536A191A6AB</DbpropMsmdActivityID>
+                    <DbpropMsmdRequestID>9FA20B8A-ACA0-414E-98EA-14649F20CF75</DbpropMsmdRequestID>
+                    <LocaleIdentifier>1033</LocaleIdentifier>
+                    <DbpropMsmdMDXCompatibility>1</DbpropMsmdMDXCompatibility>
+                </PropertyList>
+            </Properties>
+        </Execute>
+    </soap:Body>
+</soap:Envelope>'
+```
+
+## Contact us
+
+If you want to check the official documentation, please check the manual : https://kyligence.github.io/mdx-kylin/en. For developers who want to contribute, please check our Github page : https://github.com/Kyligence/mdx-kylin .
+
+Feel free to leave your suggestion, ask a question or report a bug by referring https://kyligence.github.io/mdx-kylin/en/contact/ . 
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/10_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/10_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..cbed4be
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/10_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/10_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/10_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..3355a96
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/10_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/11_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/11_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..8f6fb27
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/11_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/11_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/11_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..d021f3e
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/11_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/12_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/12_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..a22b52a
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/12_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/12_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/12_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..892899d
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/12_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/13_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/13_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..df4e3a4
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/13_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/13_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/13_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..a8f993c
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/13_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/14_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/14_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..c35c719
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/14_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/14_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/14_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..b49f66d
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/14_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/15_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/15_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..0fb20a1
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/15_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/15_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/15_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..806db97
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/15_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/16_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/16_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..e9fed62
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/16_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/16_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/16_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..5a528fb
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/16_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/17_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/17_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..3fb2aaf
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/17_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/17_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/17_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..fd7f531
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/17_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/18_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/18_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..b6ca1d1
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/18_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/18_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/18_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..3e5fa9b
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/18_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/1_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/1_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..1f168f9
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/1_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/1_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/1_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..c2dd589
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/1_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/2_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/2_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..099d8dd
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/2_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/2_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/2_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..099d8dd
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/2_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/3_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/3_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..712a645
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/3_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/3_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/3_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..712a645
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/3_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/4_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/4_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..084e292
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/4_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/4_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/4_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..084e292
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/4_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/5_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/5_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..f03e1e1
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/5_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/5_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/5_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..171d748
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/5_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/6_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/6_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..e67dc66
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/6_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/6_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/6_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..eceb2de
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/6_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/7_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/7_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..8197abb
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/7_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/7_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/7_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..86adabf
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/7_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/8_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/8_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..66cbedc
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/8_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/8_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/8_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..5849ccb
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/8_use_excel_to_query_kylin.en.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/9_use_excel_to_query_kylin.cn.png b/website/images/blog/how_to_use_excel_to_query_kylin/9_use_excel_to_query_kylin.cn.png
new file mode 100644
index 0000000..ac6b54c
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/9_use_excel_to_query_kylin.cn.png differ
diff --git a/website/images/blog/how_to_use_excel_to_query_kylin/9_use_excel_to_query_kylin.en.png b/website/images/blog/how_to_use_excel_to_query_kylin/9_use_excel_to_query_kylin.en.png
new file mode 100644
index 0000000..e9b4709
Binary files /dev/null and b/website/images/blog/how_to_use_excel_to_query_kylin/9_use_excel_to_query_kylin.en.png differ