我想基于维度值(或者实际上,基于度量值的数量级)动态地更改DAX度量的数字格式.
我明白我可以使用SWITCH和FORMAT,由卡斯帕·德容格在这里证明:https://www.kasperonbi.com/dynamic-format-using-dax/
这是我正在创建的度量类型的示例:
My Measure:=IF (
HASONEVALUE ( dimMeasureType[Measure Type] ),
SWITCH ( VALUES ( dimMeasureType[Measure Type] ),
"Total Cost", FORMAT ( [Total Cost], "#,##0, k" ),
"Cost Per Unit", FORMAT ( [Cost Per Unit], "#,##0.00" ),
"Cost % Sales", FORMAT ( [Cost % Sales], "0.00%" ),
BLANK()
),
BLANK()
)
Run Code Online (Sandbox Code Playgroud)
但是这种技术会返回文本度量.我需要能够绘制我的度量图表,所以我不想将它们转换为文本.是否有另一种技术可以动态更改度量数字格式,而无需转换为字符串?
如果它有所作为,我在SQL Server 2016 BI上使用SSAS-Tabular.
在Excel 2013中使用PowerQuery为PowerPivot模型构建Calendar表时,我使用其Date.QuarterOfYear函数来获取季度的数量.
在SSAS表格中构建相同的东西需要一些解决方法.没有等效的DAX函数可以从DATE获得该季度的数量.奇怪的是,DAX有YEAR()和MONTH(),但没有QUARTER().
嵌套IF或SWITCH语句真的是DAX获得季度数的唯一方法吗?
缺少这么简单有用的功能的原因是什么?我是否忽视了这一决定的最高智慧?
微软说:
“当通过 TCP 连接到 SSAS 时,客户端库将使用指定的用户名和密码模拟 Windows 用户,然后照常连接到服务器。”
“通过 HTTP(S) 连接到 SSAS 时,凭据将根据 Web 服务器上配置的身份验证模式(例如基本身份验证或 Windows 身份验证)提供给 Web 服务器。Web 服务器将在连接到之前执行适当的 Windows 模拟SSAS 服务器,因此向服务器提供正确的凭据流。”
但是,当我这样做时:
using Tabular = Microsoft.AnalysisServices.Tabular;
using (Tabular.Server server = new Tabular.Server())
{
//connectionString = "Provider=MSOLAP;DataSource=ServerIP;UserID=xx;Password=xx;Persist Security Info=True;Impersonation Level=Impersonate;"
server.Connect(connectionString);
}
Run Code Online (Sandbox Code Playgroud)
它使用运行代码的用户帐户的凭据,而不是 ConnectionString 中的用户 ID 和密码。
我怎样才能让它通过“TCP”连接?
更新:使用@GregGalloway 的建议和这里的逻辑:我已经实现了一个 Impersonator 类。我用它更新了我的代码以执行以下操作:
using (Tabular.Server server = new Tabular.Server())
{
using (new Impersonator("UserName", "Domain", "Password"))
{
server.Connect(connectionString);
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我分析对 SSAS 服务器的调用时,我可以看到它仍然使用与以前相同的凭据,并且无论传递给构造函数的任何凭据如何,与服务器的连接都会成功。单步查看代码,我可以看到在任何时候都没有抛出异常。
我们开始构建 SSAS 表格模型,想知道大多数人是拥有一个模型还是多个模型。如果有多个,您是否复制每个所需的表,或者有没有办法在模型之间共享表?我想我知道答案,但我希望有更多经验的人可以证实我们的发现......
根据我的研究,我认为...... - 你不能跨模型共享表 - 任何“公共”表都必须复制并与每个模型一起部署并且会占用内存 - 我们应该创建一个模型,使用组织表格并使其更易于使用的观点 - 如果模型之间几乎没有或没有共同数据,则可以接受多个模型
谢谢
我们有一个表格多维数据集,在 SSMS 中处理数据库(完整)\xc2\xa0 工作正常,但是当从 SQL Server 代理处理时,会抛出以下错误。
\n\n <return xmlns="urn:schemas-microsoft-com:xml-analysis">\n\xc2\xa0 <root xmlns="urn:schemas-microsoft-com:xml-analysis:empty">\n\xc2\xa0\xc2\xa0\xc2\xa0 <Messages xmlns="urn:schemas-microsoft-com:xml-analysis:exception">\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0 <Warning WarningCode="1092550744" Description="Cannot order \'\'[] by [] because at least one value in [] has multiple distinct values in []. For example, you can sort [City] by [Region] because there is only one region for each city, but you cannot sort [Region] by [City] because there are multiple cities for each region." Source="Microsoft SQL Server 2016 Analysis Services Managed Code Module" HelpFile="" />\n\xc2\xa0\xc2\xa0\xc2\xa0 </Messages>\n\xc2\xa0 </root>\n</return>\nRun Code Online (Sandbox Code Playgroud)\n\n … 再会!
我有一个关系数据源,其中包含 3 个事实表,这些事实表彼此相关且模型相关
患者医生就诊(EncounterEventFact 表)、向患者分配诊断(DiagnosisEventFact 表)并收集患者的实验室结果(LabComponentResultFact 表),如下图所示。他们都共享 EncounterKey 一个密钥,指定一次独特的就诊。所有 EncounterKey 都在 EncounterEventFact 表中,并且仅存在一次。我在内存中使用 SSAS 表格来对数据进行建模。
每个事实表都有几百万行(2-4 百万行)。DiagnosisDim 有几万行。PatientDim 有几百万行(<1000 万行)。LabDim 有几百条记录。这是一个只有 3 个主要尺寸的简化模型。
我的测量是 DiagnosisEventFact 上的 EncounterKeys 的不同计数和 LabComponentResultFact 上的 EncounterKeys 的不同计数。
正在开发的样本报告在诊断方面进行了选择,显示了该诊断的独特访问次数以及该诊断的实验室收集访问次数。
诊断 count_visits_diagnosis count_visits_labs
ABC 5 0
防御力 10 5
ETC
当我选择报告中的所有诊断时,问题就出现了。诊断计数可以立即测量负载,而实验室计数则需要很长时间才能测量。当我选择一些诊断报告时,它的工作速度很快。
如何改进我的 SSAS 表格模型或计算以有效处理此类报告?
不幸的是,我无法在数据源端重新建模数据。
我尝试将天蓝色广告组添加到 Visual Studio 中表格模型的角色。我尝试过通过 Visual Studio 添加组(在角色编辑器中查找用户)并更改代码本身。但当我尝试打开解决方案时,出现同样的错误:
在工作区数据库上打开模型时发生错误。原因:无法将修改保存到服务器。返回错误:“无法为 Azure Analysis Services 角色成员指定 ID:‘obj:xxxxxxx@yyyyyyyy’”。
有谁知道是否可以在 Visual Studio 中的 bism 模型中添加广告组?
ssas visual-studio bism ssas-tabular azure-analysis-services
我有这篇文章中描述的问题。我有两个具有相同数据支持的多维数据集,一个是多维多维数据集,第二个是表格多维数据集。如果我使用 Excel 连接到多维数据集,并将层次结构的顶层(在本例中为“公司”)拖动到多维多维数据集中的筛选器类别中,然后在 Excel 的搜索栏中输入一些文本:
(层次结构 - 在 Excel 中)
(层次结构 - 在 Visual Studio 中)
(多维 - 在 Excel 中作为过滤器)
下面的级别将通过文本进行过滤并返回结果。但是,如果我在表格多维数据集中过滤相同的层次结构,结果会有所不同:
(表格 - 在 Excel 中作为过滤器)
我没有收到任何结果,搜索似乎无法正常运行。如果我查看层次结构的叶级别,我可以让它工作,但看起来 excel 中表格多维数据集的层次结构搜索功能的节点级别不起作用。
以前是否有其他人遇到过这个问题,我很想发布多维数据集的模型,但它是相当专有的,我在多个服务器和客户端上的多种类型的专有多维数据集中遇到了相同的问题。这是我可以更改的模型中的某种配置吗?或者我可以改变Excel中的某些内容?
我做了更多的挖掘,我在执行搜索时设置了 SQL Profiler 以针对我的 SSAS 服务器运行,似乎它正在生成一个 MDX 查询(这次是在我的“item”层次结构上):
WITH MEMBER [Measures].cChildren As 'AddCalculatedMembers([Item].[I1 - Category].currentmember.children).count'
Set FilteredMembers As 'Head (Filter(AddCalculatedMembers([Item].[I1 - Category].[Category].Members), InStr(1, [Item].[I1 - Category].currentmember.member_caption, "Per")>0),10001)'
Select {[Measures].cChildren} on ROWS,
Hierarchize(Generate(FilteredMembers, Ascendants([Item].[I1 - Category].currentmember))) DIMENSION PROPERTIES PARENT_UNIQUE_NAME,
MEMBER_TYPE ON COLUMNS FROM [XXX_Test_TabularPro]
Run Code Online (Sandbox Code Playgroud)
但在针对我的多维数据集运行时,它似乎出错了(可以解释为什么我在 Excel 中没有得到任何结果):
您无权访问指定成员,或者指定成员不存在。 …
我需要使用单个 MDX 查询根据两个条件获取聚合值
我在下面的查询中使用 IIF() 函数创建了两个计算函数
WITH
MEMBER [Measures].[Expression1] AS IIF([EMPLOYEE].[TITLE].CURRENTMEMBER.MEMBERVALUE = "SALES REPRESENTATIVE",[Reseller Order Count],0)
MEMBER [Measures].[Expression2] AS IIF([EMPLOYEE].[TITLE].CURRENTMEMBER.MEMBERVALUE = "SALES REPRESENTATIVE",0,[Reseller Order Count]) SELECT{
[Measures].[Expression1],
[Measures].[Expression2]} ON COLUMNS FROM [Sales Targets] CELL PROPERTIES VALUE, FORMATTED_VALUE, FORMAT_STRING
Run Code Online (Sandbox Code Playgroud)
输出必须是 3693 和 103,但返回如下
查询中是否需要进行任何更改?
谁能指导我得到正确的结果吗?
在 Microsoft SSAS 中,我有一个维度列,其中包含|单行中由特殊字符分隔的多个值,如下所示。
行的示例值: Image|Video|Audio|
要求: 因此,我需要使用特殊字符来计算维度列中存在的值的数量。
|在本例中,我需要获取使用 MDX 查询的计数,我的预期答案是 3。
有人可以帮我解决这个问题吗?简而言之,是否有 MDX 函数可以计算特定字符在字符串中出现的次数?
SQL 的类似问题:特定字符在字符串中出现的次数