MDX 命名集 - 建立 Query-Scoped 具名集
適用於: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
如果單一多維度表示式 (MDX) 查詢只需要具名集,您可以使用WITH關鍵詞來定義該具名集。 使用WITH關鍵詞建立的具名集,在查詢完成執行之後已不存在。
如本主題所討論,WITH 關鍵詞的語法相當有彈性,即使是使用函式來定義命名集。
注意
如需命名集的詳細資訊,請參閱 在 MDX 中建置具名集。
WITH 關鍵詞語法
使用下列語法將 WITH 關鍵詞新增至 MDX SELECT 語句:
[ WITH <SELECT WITH clause> [ , <SELECT WITH clause> ... ] ]
SELECT [ * | ( <SELECT query axis clause> [ , <SELECT query axis clause> ... ] ) ]
FROM <SELECT subcube clause>
[ <SELECT slicer axis clause> ]
[ <SELECT cell property list clause> ]
<SELECT WITH clause> ::=
( SET Set_Identifier AS 'Set_Expression')
在WITH關鍵詞的語法中,Set_Identifier
參數包含具名集的別名。
Set_Expression
參數包含具名集別名所參考的 set 表達式。
WITH 關鍵詞範例
下列 MDX 查詢會檢查 FoodMart 2000中各種 Chardonnay 和 Chablis 葡萄酒的單位銷售,這是 SQL Server 2000 Analysis Services Microsoft範例資料庫。 此查詢雖然在結果集方面相當簡單,但當您必須維護這類查詢時,會很冗長且不複雜。
SELECT
{[Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Good].[Good Chardonnay], [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Pearl].[Pearl Chardonnay], [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Portsmouth].[Portsmouth Chardonnay], [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Top Measure].[Top Measure Chardonnay], [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Walrus].[Walrus Chardonnay], [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Good].[Good Chablis Wine], [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Pearl].[Pearl Chablis Wine], [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Portsmouth].[Portsmouth Chablis Wine], [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Top Measure].[Top Measure Chablis Wine], [Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Walrus].[Walrus Chablis Wine]} ON COLUMNS,
{Measures.[Unit Sales]} ON ROWS
FROM Sales
若要讓先前的 MDX 查詢更容易維護,您可以使用 WITH 關鍵詞建立查詢的具名集。 下列程式代碼示範如何使用WITH關鍵詞來建立具名集,[ChardonnayChablis]
,以及命名集如何讓SELECT語句變得較短且更容易維護。
WITH SET [ChardonnayChablis] AS
{[Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Good].[Good Chardonnay],
[Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Pearl].[Pearl Chardonnay],
[Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Portsmouth].[Portsmouth Chardonnay],
[Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Top Measure].[Top Measure Chardonnay],
[Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Walrus].[Walrus Chardonnay],
[Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Good].[Good Chablis Wine],
[Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Pearl].[Pearl Chablis Wine],
[Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Portsmouth].[Portsmouth Chablis Wine],
[Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Top Measure].[Top Measure Chablis Wine],
[Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine].[Wine].[Walrus].[Walrus Chablis Wine]}
SELECT
[ChardonnayChablis] ON COLUMNS,
{Measures.[Unit Sales]} ON ROWS
FROM Sales
搭配WITH關鍵詞使用函式
雖然您可以明確定義具名集的每個成員,但此方法可能會產生冗長的語句。 若要讓具名集的建立和維護變得更容易,您可以使用 MDX 函式來定義成員。
例如,下列 MDX 查詢範例會使用 Filter、CurrentMember和 Name MDX 函式和 InStr VBA 函式來建立 [ChardonnayChablis]
命名集。 這個版本的 [ChardonnayChablis]
命名集與本主題先前顯示的明確定義版本相同。
WITH SET [ChardonnayChablis] AS
'Filter([Product].Members, (InStr(1, [Product].CurrentMember.Name, "chardonnay") <> 0) OR (InStr(1, [Product].CurrentMember.Name, "chablis") <> 0))'
SELECT
[ChardonnayChablis] ON COLUMNS,
{Measures.[Unit Sales]} ON ROWS
FROM Sales