StructureColumn (DMX)
van toepassing op: SQL Server Analysis Services
Retourneert de waarde van de structuurkolom die overeenkomt met de opgegeven case of de tabelwaarde voor een geneste tabel in de opgegeven case.
Syntaxis
StructureColumn('structure column name')
Argumenten
structuurkolomnaam.
De naam van een kolom met hoofdletters of geneste tabelanalyses.
Resultaattype
Het type dat wordt geretourneerd, is afhankelijk van het type kolom waarnaar wordt verwezen in de kolomnaam van de <structuur> parameter. Als de kolom met de mijnbouwstructuur waarnaar wordt verwezen bijvoorbeeld een scalaire waarde bevat, retourneert de functie een scalaire waarde.
Als de kolom met de mijnbouwstructuur waarnaar wordt verwezen een geneste tabel is, retourneert de functie een tabelwaarde. De geretourneerde tabelwaarde kan worden gebruikt in de FROM-component van een sub-SELECT-instructie.
Opmerkingen
Deze functie is polymorf en kan overal in een instructie worden gebruikt die expressies toestaat, waaronder een SELECT-expressielijst, een WHERE-voorwaardeexpressie en een ORDER BY-expressie.
De naam van de kolom in de mijnbouwstructuur is een tekenreekswaarde en moet als zodanig tussen enkele aanhalingstekens worden geplaatst: bijvoorbeeld StructureColumn('
kolom 1')
. Als er meerdere kolommen met dezelfde naam zijn, wordt de naam omgezet in de context van de instructie SELECT.
De resultaten die worden geretourneerd uit een query met behulp van de functie StructureColumn, worden beïnvloed door de aanwezigheid van filters in het model. Dat wil zeggen, het modelfilter bepaalt de gevallen die zijn opgenomen in het mijnbouwmodel. Daarom kan een query in de structuurkolom alleen de gevallen retourneren die zijn gebruikt in het mijnbouwmodel. Zie de sectie Voorbeelden van dit onderwerp voor een codevoorbeeld waarin het effect van miningmodelfilters op zowel casetabellen als een geneste tabel wordt weergegeven.
Zie SELECT FROM <model>voor meer informatie over het gebruik van deze functie in een DMX SELECT-instructie. CASES (DMX) of SELECT FROM <structuur>. CASES.
Foutberichten
De volgende beveiligingsfout wordt gegenereerd als de gebruiker geen drillthrough-machtiging heeft voor de bovenliggende mijnbouwstructuur:
De '%{user/}'-gebruiker is niet gemachtigd om in te zoomen op de bovenliggende mijnbouwstructuur van het '%{model/}'-miningmodel.
Het volgende foutbericht wordt weergegeven als er een ongeldige kolomnaam voor de structuur is opgegeven:
De mijnstructuurkolom '%{structure-column-name/}' is niet gevonden in de bovenliggende mijnstructuur '%{structure/}' in de huidige context (lijn %{lijn/}, kolom %{column/}).
Voorbeelden
Voor deze voorbeelden gebruiken we de volgende mijnbouwstructuur. Houd er rekening mee dat de mijnbouwstructuur twee geneste tabelkolommen bevat, Products
en Hobbies
. De geneste tabel in de kolom Hobbies
heeft één kolom die wordt gebruikt als sleutel voor de geneste tabel. De geneste tabel in de Products
kolom is een complexe geneste tabel met zowel een sleutelkolom als andere kolommen die worden gebruikt voor invoer. In de volgende voorbeelden ziet u hoe een gegevensanalysestructuur kan worden ontworpen om veel verschillende kolommen op te nemen, ook al gebruikt een model mogelijk niet elke kolom. Sommige van deze kolommen zijn mogelijk niet nuttig op modelniveau voor het generaliseren van patronen, maar kunnen erg nuttig zijn voor drillthrough.
CREATE MINING STRUCTURE [MyStructure]
(
CustomerName TEXT KEY,
Occupation TEXT DISCRETE,
Age LONG CONTINUOUS,
MaritalStatus TEXT DISCRETE,
Income LONG CONTINUOUS,
Products TABLE
(
ProductNameTEXT KEY,
Quantity LONG CONTINUOUS,
OnSale BOOLEAN DISCRETE
)
Hobbies TABLE
(
Hobby KEY
))
Maak vervolgens een mijnbouwmodel op basis van de structuur die u zojuist hebt gemaakt, met behulp van de volgende voorbeeldcode:
ALTER MINING STRUCTURE [MyStructure] ADD MINING MODEL [MyModel] (
CustomerName,
Age,
MaritalStatus,
Income PREDICT,
Products
(
ProductName
) WITH FILTER(NOT OnSale)
) USING Microsoft_Decision_Trees
WITH FILTER(EXISTS (Products))
Voorbeeldquery 1: Een kolom retourneren uit de mijnbouwstructuur
De volgende voorbeeldquery retourneert de kolommen CustomerName
en Age
, die worden gedefinieerd als onderdeel van het mijnbouwmodel. De query retourneert echter ook de kolom Age
, die deel uitmaakt van de structuur, maar geen deel uitmaakt van het mijnbouwmodel.
SELECT CustomerName, Age, StructureColumn('Occupation') FROM MyModel.CASES
WHERE Age > 30
Houd er rekening mee dat het filteren van rijen om aanvragen te beperken tot klanten ouder dan 30 jaar plaatsvindt op het niveau van het model. Daarom retourneert deze expressie geen cases die zijn opgenomen in de structuurgegevens, maar die niet door het model worden gebruikt. Omdat de filtervoorwaarde die wordt gebruikt voor het maken van het model (EXISTS (Products)
) alleen geldt voor klanten die producten hebben gekocht, kunnen er gevallen zijn in de structuur die niet door deze query worden geretourneerd.
Voorbeeldquery 2: Een filter toepassen op de structuurkolom
De volgende voorbeeldquery retourneert niet alleen de modelkolommen CustomerName
en Age
, en de geneste tabel Products
, maar retourneert ook de waarde van de kolom Quantity
in de geneste tabel, die geen deel uitmaakt van het model.
SELECT CustomerName, Age,
(SELECT ProductName, StructureColumn('Quantity') FROM Products) FROM MA.CASES
WHERE StructureColumn('Occupation') = 'Architect'
Houd er rekening mee dat in dit voorbeeld een filter wordt toegepast op de structuurkolom om de gevallen te beperken tot klanten met de bezetting 'Architect' (WHERE StructureColumn('Occupation') = 'Architect'
). Omdat de modelfiltervoorwaarde altijd wordt toegepast op de gevallen waarin het model wordt gemaakt, worden alleen gevallen opgenomen die ten minste één in aanmerking komende rij in de Products
tabel bevatten in de modelcases. Daarom worden zowel het filter op de geneste tabel Products
als het filter op de case ('Occupation')
toegepast.
Voorbeeldquery 3: Kolommen selecteren uit een geneste tabel
De volgende voorbeeldquery retourneert de namen van klanten die zijn gebruikt als trainingscases van het model. Voor elke klant retourneert de query ook een geneste tabel die de aankoopgegevens bevat. Hoewel het model de ProductName
kolom bevat, gebruikt het model niet de waarde van de ProductName
kolom. Het model controleert alleen of het product is gekocht tegen normale (NOT``OnSale
) prijs. Deze query retourneert niet alleen de productnaam, maar retourneert ook de gekochte hoeveelheid, die niet is opgenomen in het model.
SELECT CustomerName,
(SELECT ProductName, StructureColumn('Quantity')FROM Products)
FROM MyModel.CASES
Houd er rekening mee dat u de ProductName
kolom of de Quantity
kolom niet kunt retourneren, tenzij drillthrough is ingeschakeld voor het miningmodel.
Voorbeeldquery 4: Filteren op en retourneren van geneste tabelkolommen
De volgende voorbeeldquery retourneert de case- en geneste tabelkolommen die zijn opgenomen in de mijnbouwstructuur, maar niet in het model. Het model is al gefilterd op de aanwezigheid van OnSale
producten, maar met deze query wordt een filter toegevoegd aan de kolom mijnstructuur, Quantity
:
SELECT CustomerName, Age, StructureColumn('Occupation'),
(SELECT ProductName, StructureColumn('Quantity') FROM Products)
FROM MyModel.CASES
WHERE EXISTS (SELECT * FROM Products WHERE StructureColumn('Quantity')>1)
Zie ook
DMX-functieverwijzing (Data Mining Extensions)
DMX-( Functions)
algemene voorspellingsfuncties (DMX)