65.9K
CodeProject 正在变化。 阅读更多。
Home

如何检查度量组是否与维度组匹配

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.79/5 (8投票s)

2015年5月5日

CPOL

3分钟阅读

viewsIcon

11729

本文介绍了如何检查度量值组是否与维度组映射。

引言

在过去的几个月里,我一直致力于一个仪表板应用程序,其中 ADOMD 是数据源。 我们的应用程序包含大量图表、网格、地图和其他一些 UI 控件。 我们使用 MDX 查询来生成应用程序中使用的部件。 众所周知,在每个仪表板应用程序中,数据必须是正确和准确的,然后我们才能在图表、网格、地图等中获得正确的视觉效果。 因此,必须检查数据是否正确,并且我们必须避免不必要的服务器调用以获取数据。

背景

几天前,我正在使用 High Map 中的气泡地图。 根据地图,我们需要准确指定经度和纬度,数据不能出错。 这里我们将使用一个映射函数来检查维度组和度量值组是否被映射。 这将确保数据是正确的,如果没有此检查,我们的 MDX 查询可能会一直运行。 这肯定会让最终用户关闭我们的应用程序并搜索另一个应用程序。 所以我的想法是,如果度量值组和维度组未映射,则给出一个消息,以避免长时间运行查询。

我们要怎么做?

我们将执行以下步骤。

  1. 一个 ajax 调用,用于传递需要检查过程的信息
  2. 一个控制器函数,我们在其中创建一个 adomd 连接对象并将信息传递给模型类
  3. 一个模型类,我们在其中使用所需的参数构建并运行查询

最后一步将为您提供一个信息,说明给定的度量值组是否与维度组映射。

使用代码

所以让我们现在开始编码吧。

正如我们之前讨论的那样,首先我们需要一个 ajax 调用,对吧?

1.一个 Ajax 调用

以下是我们的 ajax 调用实现。

var cubeName = '';
var measureGroupName = '';
var dimensionGroupName = '';
var serverName = 'My server name';
var databaseName = 'My database name';
cubeName = 'My cube name';
measureGroupName = sessionStorage.getItem("measureGroupName");
dimensionGroupName = sessionStorage.getItem("dimensionGroupName");
var checkMeasuresMapped = {
cubeName: cubeName,
measureGroupName: measureGroupName,
dimensionGroupName: dimensionGroupName,
serverName: serverName,
databaseName: databaseName
};
$.ajax({
async: ajaxAsync,
url: '../CheckMeasureGroupMapping/',
type: 'POST',
dataType: 'json',
data: JSON.stringify(checkMeasuresMapped),
contentType: "application/json; charset=utf-8",
success: function(data) {
if (data.indexOf("Error") > -1) {
$('#btnCreate').css('enabled', 'false');
$('#Preview').html('
<p style="color:red;">Error : ' + data.replace('Error', '') + '</p>
');           
} else if (data == "Mapped") {
//Condition satisfied, write your codes here
ajaxAsync = true;
} else {          
$('#Preview').html('
<p style="color:red;">Warning : The given measure is not mapped with the dimension. Please check.</p>
');
}
},
error: function(xhrequest, ErrorText, thrownError) {
console.log(ErrorText + "," + thrownError);
$('#Preview').html('
<p style="color:red;">Error : ' + ErrorText + '</p>
');
}
});

请注意,我已经传递了所有需要的信息。 我们将列出它们是什么。

I. Cube 名称

II. 度量值组名称

III. 维度组名称

IV. 服务器名称

V. 数据库名称

一旦您完成了 ajax 实现,您将在我们的控制器中获得信息,对吧? 这就是 ajax 调用的工作方式 J. 如果您不熟悉 ajax 调用,请参考以下链接。

  1. https://w3schools.org.cn/ajax/
  2. https://w3schools.org.cn/jquery/ajax_ajax.asp

 

2.控制器函数

我希望您都完成了 ajax 实现,现在我们将继续进行下一部分。 请参考下面的代码。

///
<summary>
   ///This method is used to find whether the given measure is mapped to the dimension
   ///
   <param name="cubeName">
   </param>
   ///
   <param name="measureGroupName">
   </param>
   ///
   <param name="dimensionGroupName">
   </param>
   ///
</summary>
[HandleError]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CheckMeasureGroupMapping(string cubeName, string measureGroupName, string dimensionGroupName, string serverName, string databaseName)
{
try
{
DataTable dt = new DataTable();
dt = adomdConn.CheckMeasureGroupMapping(cubeName, measureGroupName, dimensionGroupName, serverName, databaseName);
if (dt.Rows.Count < 1)
{
return Json("The given measure is not mapped with the dimension. Please check.", JsonRequestBehavior.AllowGet);
}
else
{
return Json("Mapped", JsonRequestBehavior.AllowGet);
}
}
catch (AdomdErrorResponseException ex)
{
string errrorText = "Query Error" + System.Web.HttpUtility.HtmlEncode(ex.Message);
return Json(errrorText, JsonRequestBehavior.AllowGet);
}
}

这里 CheckMeasureGroupMapping 是我们的 ActionResult,我们正在将信息传递给我们的模型类,如果我们的条件得到满足,则上述函数将在数据表中返回行。 通过该数据表的行数,我们可以得出结论 J

3.模型函数

现在我们处于最后一部分,当我们得到模型类中所需的参数时,是时候构建查询并将其运行到 ADOMD 服务器了。 所以下面是执行相同操作的函数。

public DataTable CheckMeasureGroupMapping(string cubeName, string measureGroupName, string dimensionGroupName, string serverName, string databaseName)
{
try
{
string query = string.Empty;
string queryBefore = string.Empty;
queryBefore = "SELECT  [MEASUREGROUP_NAME] AS [MEASUREGROUP],[MEASUREGROUP_CARDINALITY],[DIMENSION_UNIQUE_NAME] AS [DIM],[DIMENSION_GRANULARITY] AS [DIM_KEY],[DIMENSION_CARDINALITY],[DIMENSION_IS_VISIBLE] AS [IS_VISIBLE],[DIMENSION_IS_FACT_DIMENSION] AS [IS_FACT_DIM] FROM $system.MDSCHEMA_MEASUREGROUP_DIMENSIONS WHERE [CUBE_NAME] = {cubeName} AND [MEASUREGROUP_NAME] ={measureGroupName} AND [DIMENSION_UNIQUE_NAME]={dimensionGroupName}";
query = queryBefore.Replace("{cubeName}", "'" + cubeName + "'").Replace("{measureGroupName}", "'" + measureGroupName + "'").Replace("{dimensionGroupName}", "'" + dimensionGroupName + "'");
StringBuilder sbConnectionString = new StringBuilder();
sbConnectionString.Append("Provider=MSOLAP;data source=");
sbConnectionString.Append(serverName + ";initial catalog=" + databaseName + ";Integrated Security=SSPI;Persist Security Info=False;");
using (AdomdConnection conn = new AdomdConnection(sbConnectionString.ToString()))
{
conn.Open();
using (AdomdCommand cmd = new AdomdCommand(query, conn))
{
DataTable dt = new DataTable();
AdomdDataAdapter da = new AdomdDataAdapter(cmd);
da.Fill(dt);
return dt;
}
}
}
catch (AdomdErrorResponseException ex)
{
throw;
}
}

正如您都可以看到,下面是用于查找给定度量值组是否与维度组映射的查询。

SELECT  [MEASUREGROUP_NAME] AS [MEASUREGROUP],[MEASUREGROUP_CARDINALITY],[DIMENSION_UNIQUE_NAME] AS [DIM],[DIMENSION_GRANULARITY] AS [DIM_KEY],[DIMENSION_CARDINALITY],[DIMENSION_IS_VISIBLE] AS [IS_VISIBLE],[DIMENSION_IS_FACT_DIMENSION] AS [IS_FACT_DIM] FROM $system.MDSCHEMA_MEASUREGROUP_DIMENSIONS WHERE [CUBE_NAME] = {cubeName} AND [MEASUREGROUP_NAME] ={measureGroupName} AND [DIMENSION_UNIQUE_NAME]={dimensionGroupName}";

我们正在使用这些参数运行此查询,并将结果返回给我们的控制器。

最后

最后,我们将按照我们在 ajax 调用中显示的方式检查条件。

if (data.indexOf("Error") > -1) {
$('#btnCreate').css('enabled', 'false');
$('#Preview').html('
<p style="color:red;">Error : ' + data.replace('Error', '') + '</p>
');           
} else if (data == "Mapped") {
//Condition satisfied, write your codes here
ajaxAsync = true;
} else {          
$('#Preview').html('
<p style="color:red;">Warning : The given measure is not mapped with the dimension. Please check.</p>
');
}

所以我们已经完成了这个需求。

祝您编码愉快

关注点

ADOMD,ADOMD 度量值,ADOMD 维度,ADOMD 度量值组,ADOMD 维度组,映射度量值组和维度组。

结论

我希望您喜欢我的文章。 请分享您的宝贵反馈。 这意义重大 J

附加参考

输出

如果给定的度量值组未与度量值组映射,您将在预览区域中获得以下输出。

历史

第一个版本:2015 年 5 月 4 日

© . All rights reserved.